明示的および暗黙の待機待ち:webdriverを待機の2種類が用意されています。
1.ディスプレイの待ち時間
webdriverを、具体的には、要素の判断を待つために、明示的な待機方法を提供します。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedCondition;
public class TimeOut01 {
public static void main(String[]args) throws InterruptedException {
WebDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
//显式等待, 针对某个元素等待
WebDriverWait wait = new WebDriverWait(driver,10,1);
wait.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver text) {
return text.findElement(By.id("kw"));
}
}).sendKeys("selenium");
driver.findElement(By.id("su")).click();
Thread.sleep(2000);
driver.quit();
}
}
WebDirverによって提供さWebDriverWaitクラスの待機方法。設定時間内、時間にデフォルトの時間は、現在のページ要素が存在したら、テストされ、それが設定時間を超えた場合に例外がスローされた検出されません。以下の形式:WebDriverWait(ドライバ、10、1)ドライバ:ブラウザのドライバ。10:秒で最長のタイムアウト、デフォルト。1:検出間隔(ステップ)デフォルト値は0.5秒です。
2.暗黙の待ち時間
webdriverを要素を待つには、いくつかの方法を提供します。
- implicitlyWait。タイムアウトオブジェクトを特定します。オブジェクトが見つからない場合は、この時間の後、そしてNoSuchElementは例外をスローします。
- setScriptTimeout。タイムアウト非同期スクリプト。非同期スクリプトを実行webdriverを、このスクリプトは、非同期のスクリプトを実行するように設定されたタイムアウトの結果を返します。
- pageLoadTimeout。ページのタイムアウトロード。webdriverをバックに進む前に、ページの読み込みを待つことになるので、ページがまだ読み込まれていない設定時間を超えた場合、その後、webdriverを例外がスローされますので。
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.By;
import java.util.concurrent.TimeUnit;
public class TimeOut02 {
public static void main(String[] args){
WebDriver driver = new ChromeDriver();
//页面加载超时时间设置为 5s
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
driver.get("https://www.baidu.com/");
//定位对象时给 10s 的时间, 如果 10s 内还定位不到则抛出异常
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("kw")).sendKeys("selenium");
//异步脚本的超时时间设置成 3s
driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);
driver.quit();
}
}