SeleniumWebDriverで暗黙的なWaitを入れたい
自動化で操作を行う場合に、一番ネックになる部分、それは画面の切り替わりであったり、何かしらの処理を「待つ」ということではないでしょうか。
- 何を持って画面が切り替わったと判定するのか。
- 何を持って処理が終了したと判定するのか。
このあたり、自動化のスクリプトを安定させるためには非常に重要ですよね。
画面の切り替わりを判定させる。
方法としては、期待する画面が表示された場合に表示されるであろう何かを待つようにする。を一つの例として。
public class ExTest {
WebDriver driver;
ExTestPage ex;
@Test
public void test1() {
System.setProperty("webdriver.chrome.driver", "./driver/chromedriver.exe");
driver = new ChromeDriver();
WebElement element;
WebDriverWait wait = new WebDriverWait(driver, 5);
driver.get("http://autotestengineer.hatenablog.com/");
element = driver.findElement(By.xpath("(//a[text()='QAエンジニア'])[1]"));
element.click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='トップ']")));
driver.quit();
}
}
処理の終了を判断させる
これは、処理が走った後に画面は切り替わらないが、ボタンが押せるようになるのを待ちたいケースとか。
要は、押せるようになるを検知する、を一つの例として。
上記の
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='トップ']")));
を以下の様に記載すれば実現可能です。
下記で待った後にクリック処理を入れるようにすれば、動作として安定するかもです。
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='トップ']")));
ちょっと自分で試したことがあるものを履歴がてら残してみました。