2016-08-16 23 views
0

Selenium(C#)を使用して添付ファイルをアップロードしようとしています。SeleniumでWindowsアップロードダイアログを使用してファイルのアップロードを処理する方法

サイトのDOMを確認すると、ファイルを添付するリンクにobject tagsが使用されています。以下 は、HTMLの抜粋です:

<object id="ctl00_mainContent_rauFilessilverlight03" class="ruObject" height="22px" type="application/x-silverlight-2" data="data:application/x-silverlight-2," style="width: 100%;"> 
<param value="/App/somelongjunkyparameters" name="source"/> 
<param value="true" name="windowless"/> <param value="transparent" name="background"/> 
<param value="some number" name="minRuntimeVersion"/> 
<param value="PostData=anotherlongjunkyparameters,SilverlightRowId=ctl00_mainContent_rauFilessilverlight03,AsyncUploadId=ctl00_mainContent_rauFiles,MultipleSelection=Disabled,AllowedFileExtensions=,ServiceHandlerUrl=/App/Telerik.Web.UI.WebResource type=rau,MaxFileSize=0" name="InitParams"/> 
<param value="true" name="autoUpgrade"/> 
</object> 

私はこれまでのところ、これを試してみました:

IWebElement fileAttachTA = driver.FindElement(By.XPath("//object[@class='ruObject']")); 
fileAttachTA.Click(); 
String filePath = "C:/User/My Documents/file.txt"; 

セレンを、オブジェクトを見つけることができた、しかし、私はWindowsのアップロード]ダイアログに切り替える必要がありますか? これを経験したことがある人から聞きたいと思っています。

ありがとう!

+0

あなたの試したコードの問題は何ですか?例外はありますか? –

+0

Windowsアップロードダイアログに切り替わらない – Marj

答えて

1

ウェブサイトを開発した人は、ファイルをアップロードするために非標準のメカニズムを使用しています。あなたが提供したHTMLを見ると、Silverlightのコントロールのように見えます。ページが標準的なHTMLアップロードメカニズム(すなわち、<input type="file">要素)を使用しているときに、Selenium WebDriverがファイル選択ダイアログを適切に処理してファイルをアップロードすることはできますが、非標準のアップロードメカニズムを使用することはできません。 Selenium以外のダイアログを処理する方法を見つける必要があります。

+0

fileAttachTA.SendKeys(filePath)を追加しようとしました。 Windowsアップロードダイアログ自体には入りません。 – Marj

+1

それは私の要点です。 'fileAttachTA'の変数は' '要素ではありません。これは ''要素です。だから、 'SendKeys'は動作しません。それが私の答えの要点です。 – JimEvans

0

ファイルをダウンロード/アップロードするときに、Windowsのダイアログボックスと話す際に問題がありました。私の解決策はuser32.dll GetForegroundWindow()を利用することでした。次に、(まだuser32.dllを使用している)ヘッダーテキストに基づいてダイアログボックスが表示されなくなるように待機メソッドをいくつか作成しました。その後、BeginInvokeへのアクションを最終的に作成し、ウィンドウがポップアップするのを待って、送信キーを進めました。私の目の前にコード例はありませんが、Google user32.dll Seleniumと情報があります。

2

私はそれを持って、私がやったことは、このでした:私はSendKeys.SendWait作業を取得するのSystem.Windows.Formsを使用

IWebElement fileAttachTA = driver.FindElement(By.XPath("//object[@class='ruObject']")); 
    fileAttachTA.Click(); 

    //Switch into the windows upload dialog 
    SendKeys.SendWait("^a"); 
    Thread.Sleep(1000); 
    SendKeys.SendWait(file); 
    Thread.Sleep(1000); 
    SendKeys.SendWait(@"{Enter}"); 
    Thread.Sleep(1000); 

。みんな、ありがとう!

関連する問題