2012-03-12 4 views
7

Selenium RC「attach_file」はFirefoxをサポートしているので、Google Chromeでファイルをアップロードする方法はありますか?どんな提案や回避策も高く評価されます。Selenium:Google Chromeでファイルをアップロード

+2

[私はここでのpythonを使って答えを掲載した。] [1] [1]:ことは注目にhttp://stackoverflow.com/a/11872608/471376 – JamesThomasMoon1979

答えて

3

ファイルのアップロードは通常はPOSTリクエストであるため、実際にはSeleniumを使用せずにファイルをアップロードできます。あなたのサイトがクッキーを必要としない限り、あなたは最初webdriver.get_cookies()でクッキーを再構築する必要が

簡単な例:あなたはwebdriverをを使用している場合

# required package: 
# http://pypi.python.org/pypi/MultipartPostHandler/0.1.0 

import MultipartPostHandler, urllib2, cookielib 

cookies = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies), 
           MultipartPostHandler.MultipartPostHandler) 

path_to_file = r"abc.zip" 

open_file = open(path_to_file,"rb") 
param = { "file": open_file } 
req = opener.open("http://www.yoursite.com/uploadfile", param) 
open_file.close() 
4

その後、「あなたが必要とするすべてが使用されたファイルをアップロードしますsendKeys "を使用してファイルパスを入力します。参照ボタンをクリックする部分をスキップしてファイルを選択するダイアログボックスを開く必要があります。私の作品のJavaバージョンはIJavaScriptExecutorがポップアップしません。この要素は、非クリッカブルであるというエラーができるので、クロムのドライバをクリックし、アップロード入力フィールドを変更することで使用して、以下のようになります

WebElement inputFilePath = driver.findElement(By.id("filepath")); 
inputFilePath.sendKeys("/absolute/path/to/my/local/file"); 
+0

もおそらく価値SendKeysを使用してファイルをアップロードすると、 Ardesco

-1

 [SetUp] 
     public void SetupTest() 
     { 
      driver = new ChromeDriver(); 
      baseURL = ""; 
      verificationErrors = new StringBuilder(); 
     } 

     [Test] 
     public void Test() 
     { 
      IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
      IWebElement element = driver.FindElement(By.Id("UploadFile_ButtonID")); 
      js.ExecuteScript("arguments[0].style.visibility = 'visible'; arguments[0].style.height = '1px'; arguments[0].style.width = '1px'; arguments[0].style.opacity = 1", element); 
      Thread.Sleep(1000); 
      element.SendKeys("D:\\path\\test\\image.jpg"); 
} 
+1

コンテキストのみのコードは無意味です。JavaScript Executorを使用して要素を表示する理由を説明していないので、おそらく悪いことです。それはエンドユーザーができないものなので、隠れた要素とやりとりするのを防ぎます。Jを盲目的に使うのではなく要素を可視にするにはavaScriptを使用します。実際には、要素を表示させるためにエンドユーザーが行うべきことを実行する必要があります。 – Ardesco

+1

また、悪い習慣であるThread.sleepも使用してください。正しいことは、WebDriverWaitオブジェクトとExpectedConditionsクラスを使用して要素が可視になるのを待つことです。これは、説明がなく、コードの慣行が悪い、厄介な例です-1 – Ardesco

関連する問題