您的位置:首页 > 移动开发

Appnium、Selenium常用的等待元素的三种方法

2018-01-19 11:35 585 查看
学过或者了解过Appium、Selenium都知道,等待元素加载一般常用的三种方法:

强制等待
隐试等待
显示等待

(1)强制等待    ----sleep
示例:Thread.sleep(10000);         强制等待10s
强制等待方式不是全局限制,10s的等待时间只是对当前操作生效。

package com.sandy;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class ElementWait {

private static WebDriver driver;
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
driver = new ChromeDriver();

driver.get("http://www.baidu.com/");
driver.manage().window().maximize();  //最大化

WebElement element = driver.findElement(By.name("tj_trnews"));  //目标元素
Thread.sleep(1000);  //强制等待1s

driver.quit();
}

}


(2)隐式等待   ----implicitlyWait

示例:driver.manage().timeouts().implicitlyWait(10,
TimeUnit.SECONDS);

全局等待30s,不管元素是否已经加载出来。
当使用了隐式等待的时候,如果WebDriver没有找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0
 一旦设置了隐式等待,则它存在整个WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢。
它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。
implicitly_wait()方法比sleep() 更加智能,后者只能选择一个固定的时间的等待,前者可以在一个时间范围内智能的等待。

package com.sandy;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class ElementWait {

private static WebDriver driver;
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
driver = new ChromeDriver();

driver.get("http://www.baidu.com/");
driver.manage().window().maximize();  //最大化

WebElement element = driver.findElement(By.name("tj_trnews"));  //目标元素
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);  //隐式等待

driver.quit();
}

}


(3)显示等待 
----WebDriverWait
显示等待,这个需要增加一定等待时间,显示等待时间可以通过WebDriverWait 和util来决定,如果该元素在设置的等待时间(示例设置的时间是30s)以内出现就不在等待。
显示等待也可以这样写:
WebElement element = (new WebDriverWait(driver, 30).until(ExpectedConditions.presenceOfElementLocated(By.name("tj_trnews"))));

package com.sandy;

import java.util.concurrent.TimeUnit;

import o
4000
rg.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.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;

public class ElementWait {

private static WebDriver driver;
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "E:\\eclipse_jar\\selenium_jar\\chromedriver.exe");
driver = new ChromeDriver();

driver.get("http://www.baidu.com/");
driver.manage().window().maximize();  //最大化

/**
* 显示等待,等待时间设置的时30s
* element即时所需要等待的元素
*/
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver driver) {
return driver.findElement(By.name("tj_trnews"));
}
});

driver.quit();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  selenium appium