以前社内で「webdriverは逐次sleepしなきゃいけないからいまいち」と言われたんですが、別に逐次sleepしても良いと思うけどなーと思いつつ、設定値を与えてある程度待たせる方法もあるのでSelenium webdriver Javaで適宜行える方法の記載です。
WebDriverWaitを利用すれば要素出現までの最大秒数まで待機させておくことが可能なので、これを利用してアイテム毎に待機メソッド作成しておくだけです。
WebDriverWaitの第二引数は秒数。
public staticvoid waitNameText(WebDriver driver, String element, String textData) { // Waitオブジェクト作成 Wait<WebDriver> wait = new WebDriverWait(driver, 10); // 待機条件を実装 ExpectedCondition<Boolean> waitCondition = new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver driver) { driver.findElement(By.name(element)).sendKeys(textData); return true; } }; // 条件を満たすまで待つ wait.until(waitCondition); }
公式ドキュメントを読めば大体のことは分かると思います。
https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/support/ui/WebDriverWait.html
ついでにクリックする対象を画面内に収める方法。
WebElement element = driver.findElement(By.linkText(text)); ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);",element); JavascriptExecutor jse = (JavascriptExecutor) driver; jse.executeScript("javascript:window.scrollBy(0,-100)"); try { Thread.sleep(m); } catch (InterruptedException e) { System.out.println(e); }