テキスト、テキストフィールド、標準フォームボタン、およびファイルアップロードボタン(ファイルアップロードダイアログを開く)の両方を持つページがあります。SeleniumとC#:ボタンでファイルアップロードダイアログを開くことができません
ファイルアップロードボタンを除いて、他のすべての要素にアクセスできます。私は.Click()とJavaScriptExecutorの両方で試しましたが、視覚的に見る限り、ファイルダイアログは決して開きません。しかし、エラーメッセージはありません。ボタンをクリックする
<a class="bttngrey file-input-container bttn-small" data-bind="enable: !uploading() " style="margin-top: 10px; ... data-original-title="Add attachment">
<i class="fa fa-cloud-upload">...</i>
<input type="file" data-bind="upload: addAttachments, enable: !uploading()"> == $9
C#/セレンコード:
ページのソース
NB:私はへの呼び出しを処理するために、ButtonクラスとJavaScriptActionsクラスを使用しています直接呼び出すのではなく、ChromeDriverのインスタンスです。コードスニペットが理にかなっていることを願っています。
Button.FindByXPath("/html/body/div[1]/div[2]/overlay--master/div/div/overlay-lightbox/div/div[3]/content-placeholder/a").Click();
JavaScriptActions.ButtonClickXPath("/html/body/div[1]/div[2]/overlay--master/div/div/overlay-lightbox/div/div[3]/content-placeholder/a");
public class Button {
public static IWebElement FindByXPath (string bttnxpath) {
return GCDriver.Instance.FindElement(By.XPath(bttnxpath));
}
}
public class JavascriptActions {
public static void ButtonClickXPath (string xpath) {
GCDriver.JSClickXPath(xpath);
}
}
public class GCDriver {
....
....
....
public static void JSClickXPath (string xpath) {
IWebElement icon = Instance.FindElement(By.XPath(xpath));
Actions ob = new Actions(Instance);
ob.Click(icon);
IAction action = ob.Build();
action.Perform();
}
....
....
....
}
ボタンをクリックする方法はありません。ページ上の他の「通常の」ボタンでも機能します。私がJavaScriptExecutorを試しているのは、このようなボタン(ファイルダイアログを開く)が通常のSeleniumメソッドではクリックできないケースが経験したことですが、JavaScriptExecutorを使用していました。
ここで奇妙なことは、どちらの方法もエラーなしで終了することです。しかし、私がページを見ているとき、私はダイアログのクリックとオープンを見ません。テストはただちに終了します。ボタンをクリックする前後に明示的に待機を追加することは役に立ちません。
アイデア?必要に応じてもっと詳しく説明します。質問/問題が明確になるためには、どの程度のコードを表示する必要があるかは必ずしも明確ではありません。
それは魅力のように機能します!ありがとう:-) –