私はセレニウムウェブドライバ3.0を使用していて、開いている2つのダイアログからアクティブダイアログからOKボタンをクリックしたいフォアグラウンドで)。私はどのようにフォアグラウンドのダイアログボックスOKボタンをクリックして親divからhtmlの下に移動できますか? nth-childとnth-of-typeを使ってみましたが、クリックは常に最初のダイアログがバックグラウンドで表示され、Webドライバは[OK]ボタンへのクリックに失敗します。Selenium WebドライバがフォアグラウンドダイアログのOKボタンをクリックしてバックグラウンドダイアログのOKボタンを見つけられません
we.isDisplayed()をチェックすると、最初のOKボタンも見つけられます。私は2番目のダイアログのOKボタンのwe.isDisplayed()メソッドが必要です。
HTML:
<div id="z_shell" class="DwtShell">
<div id="Dialog1" class="DwtDialog">
<td id="ErrorDialog_button1_title" class="ZWidgetTitle">OK</td>
<td id="ErrorDialog_button2_title" class="ZWidgetTitle">Cancel</td>
</div>
<div id="Dialog2" class="DwtDialog">
<td id="ErrorDialog_button2_title" class="ZWidgetTitle">OK</td>
</div>
</div>
注:ダイアログのdiv idは何をすることができますが、クラス名が固定されている:DwtDialog。
しようとしましたコード:
WebDriver webDriver;
WebElement we = webDriver.findElement(By.cssSelector("div[class='DwtDialog']:nth-child(2) td[id$='_button2_title']:contains('OK')"));
visible = we.click();
// Click fails here
しようとしましたロケータ:
By.cssSelector("div[class='DwtDialog']:nth-child(2) td[id$='_button2_title']:contains('OK')")
By.xpath("//div[@class='DwtDialog'][2]//td[@id='ErrorDialog_button2_title' and contains(text(), 'OK')]")
By.xpath("//div[@id='z_shell']//div[@class='DwtDialog'][2]//td[@id='ErrorDialog_button2_title' and contains(text(), 'OK')]")
問題:
がどのように表示されているダイアログの[OK]ボタンをクリックすることができますか?ほとんどの場合、このダイアログは後で読み込まれます。私はnth-child(2)を意味し、第3ダイアログnth-child(3)はヒントとして意味します。
お読みいただきありがとうございます!
ダイアログのタイトルや情報メッセージに頼って別の戦略を試すことはできますか? (HTMLのこの部分はスクリーンショットで展開されていません) – alecxe
コメントありがとうございました。クラス名のみが固定され、アクティブでなければなりません。残りはバックグラウンドになります。 –
内側のIDを使用します。内側のdivのtrやidのようにします。 – lauda