分为 3 种
(1) 就是通过线程强制等待
Thread.sleep(1000);
(2) 隐示等待. 就是所有的命令都等待. 分为 3 种
- // 这个方法表示全局的等待. 意思是针对所有的 findElement 方法都执行, 执行过程是如果第一次找不到, 那么每个 500ms 再去找, 直到设定的时间结束; 如果找到了就不等待, 继续执行
- driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
- // 这个方法是针对网页加载的. 意思是加载网页时, 如果在设定的时间内加载成功了, 继续执行; 如果在设定的时间到了还没有加载成功再抛出异常. 解决有的时候加载慢抛异常的情况.
- driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
- // 针对执行的 JS 脚本. 意思是在设定的时间内等待脚本执行, 如果设定的时间内脚本还没有执行成功再跑出异常. 有的时候脚本执行很慢, 没有执行完就跑出异常, 这个方法可以设定时间.
- driver.manage().timeouts().setScriptTimeout(60, TimeUnit.SECONDS);
(3) 显式等待. 针对特定的元素
- // 显示等待, 针对某一个元素等待, 每 500ms 执行一次查询, 直到找到, 如果在设定的时间内还没有找到, 跑出异常
- public void WaitUntil() {
- webDriverWait wait=new WebDriverWait(driver, 10);
- WebElement rElement=wait.until(new ExpectedCondition<WebElement>() {
- public WebElement apply(WebDriver d) {
- return d.findElement(By.CSSSelector("input[type='radio'][name='company']:checked"));
- }
- });
- }
显式等待 使用 ExpectedConditions 类中自带方法, 可以进行显试等待的判断.
显式等待可以自定义等待的条件, 用于更加复杂的页面等待条件
等待的条件 | WebDriver 方法 |
页面元素是否在页面上可用和可被单击 | elementToBeClickable(By locator) |
页面元素处于被选中状态 | elementToBeSelected(WebElement element) |
页面元素在页面中存在 | presenceOfElementLocated(By locator) |
在页面元素中是否包含特定的文本 | textToBePresentInElement(By locator) |
页面元素值 | textToBePresentInElementValue(By locator, java.lang.String text) |
标题 (title) | titleContains(java.lang.String title) |
只有满足显式等待的条件满足, 测试代码才会继续向后执行后续的测试逻辑
如果超过设定的最大显式等待时间阈值, 这测试程序会抛出异常.
- public static void testWait2(WebDriver driver) {
- driver.get("E:\\StashFolder\\[email protected]\\Stash\\Tank-MoneyProject\\ 浦东软件园培训中心 \\ 我的教材 \\Selenium Webdriver\\set_timeout.html");
- WebDriverWait wait = new WebDriverWait(driver, 20); wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box")));
- WebElement element = driver.findElement(By.cssSelector(".red_box"));
- ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);
- }
来源: http://www.bubuko.com/infodetail-3009899.html