Selenium WebDriver のテストで問題があります。Click
プログラムがボタンをクリックしようとしたときに、イベントが常に機能するとは限りません。1 つのテストではすべて正常ですが、他のテストではそうではありません。
すべてのテストは 1 つのページから始まります。まず、ユーザーはコンポーネントからオプションを選択しselect
、その後ボタンをクリックします。
一度はすべて正常であるのに、2 回目にテストを実行すると正常ではなくなるのはなぜか知りたいです。
ボタンを見つけてクリックするソース コードは次のとおりです。
public void clickContinueBtn() {
webElement = driver.findElement(By.xpath("//div[@class='btn magenta_s']/a/span"));
webElement.click();
}
ベストアンサー1
同様の問題に遭遇しました。クリック メソッドは他のページでは機能しましたが、特定のページではまったく機能しませんでした。
競合状態により問題が発生しました:
- ボタンが無効になっている状態で HTML コンテンツがレンダリングされます。
- セレンウェブドライバスクリプトはJavaScriptの前に実行されましたアップロードイベントがトリガーされました(または実行完了). そのため、
button.click
無効な要素で が発生します。そして何も起こりません。 - するとJavaScriptのonloadイベントがトリガーされ(または実行を終了する)そして、JavaScript によってボタンが有効になります。
- ページを確認しましたが、検査するとボタンが有効になっているように見え、手動でボタンをクリックすると機能するため、コードが機能しない理由がわかりませんでした。
タイミングの問題だとわかった後、ここで解決策を見つけました:Selenium Web Driver に、要素が存在するだけでなく、アクセス可能になるまで待機させるにはどうすればよいですか?
この解決策を Ruby で言い換えると次のようになります。
//This will not return the button until it is enabled.
button = driver.find_element(:xpath, "//button[@id='myButtonId' and not(@disabled)]")
button.click