私は Selenium が初めてで、Java はかなり初めてです。私は開発者ではなくテスターなので、Selenium IDE スクリプトをより堅牢で「適切な」ものに徐々に変換しようとしています。残念ながら、私はかなり基本的なタスクに苦労しています。Web ページが読み込まれるとすぐに、ボタンをクリックしたいと思います。これは Selenium IDE で正常に動作しますが、速度を「低速」に設定した場合のみです。
次のコードを使用して動作させることができますが、thread.sleep 行を含めた場合のみです。これは良い考えではないことを読んだので、webDriverWait を使用してよりスマートなものを実装しようとしています。
public class mytestclass {
private WebDriver driver;
private String baseUrl;
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "";
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
}
@Test
public void test1() throws Exception {
driver.get(baseUrl + "file:///C:/_VM/testpage.html");
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("button_X")));
//Thread.sleep(2000);
driver.findElement(By.id("button_X")).click();
}
}
したがって、thread.sleep 行の実行時にこれが機能しているという事実は、ボタンが実際に準備ができていないときに、wait.until 行が true を返していると信じさせます。また、ExpectedConditions を visibilityOfElementLocated(By locator) や presentOfElementLocated(By locator) などの他の識別子に切り替えようとしましたが、これらも同じように機能します。
ここで何か間違ったことをしていますか?他に試せることはありますか?
仕事の関係上、残念ながらサイトへのリンクはできません。多くの画像を読み込み、起動時に多くの JavaScript を実行するため、少し時間がかかりますが、待機ロジックを追加したいのはそのためです。
アドバイスをありがとう。