Selenium使用注意点
本博客默认基于JAVA语言!
一、与页面加载有关问题
1. 页面加载策略(实质目的是配置何时return WebDriver对象)
官网使用normal(默认即是normal)示例:
import org.openqa.selenium.PageLoadStrategy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.chrome.ChromeDriver;
public class pageLoadStrategy {
public static void main(String[] args) {
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setPageLoadStrategy(PageLoadStrategy.NORMAL);
WebDriver driver = new ChromeDriver(chromeOptions);
try {
// Navigate to Url
driver.get("https://google.com");
} finally {
driver.quit();
}
}
}
参考官网链接:https://www.selenium.dev/documentation/webdriver/drivers/options/
2. 等待时间
1) 强制等待
Thread.sleep(100);
强制等待非效率最高选项,建议尽量使用其他等待方式。
2) 隐式等待
三种方式:Script Timeout,Page Load Timeout,Implicit Wait Timeout
一旦设置,隐式等待会在WebDriver对象实例的整个生命周期起作用。
① Script Timeout
浏览器全局js脚本执行时间限制设定。默认超时时间为 30,000。
② Page Load Timeout
指定在当前浏览上下文中, 加载网页的时间间隔. 默认超时时间为 300,000。如果页面加载限制了给定 (或默认) 的时间范围, 则该脚本将被 TimeoutException 停止。
③ Implicit Wait Timeout
指定一个时间,若在这个时间之内定位到指定元素,则立刻进入下一步;定位不到,则抛出异常org.openqa.selenium.NoSuchElementException。默认超时时间为 0 。
WebDriver driver = new ChromeDriver();
long timeOut = 5L; //超时时间
driver.manage().timeouts().implicitlyWait(timeOut, TimeUnit.SECONDS);
缺点:当页面某些js无法加载,但是想找的元素已经出来了,它还是会继续等待,直到页面加载完成(浏览器标签左上角圈圈不再转),才会执行下一句。某些情况下会影响脚本执行速度。
3) 显示等待
WebDriver driver = new ChromeDriver();
long timeOutInSeconds = 5L; //max wait time
driver.get("https://www.baidu.com");
try{
new WebDriverWait(driver,timeOutInSeconds).until(ExpectedConditions.presenceOfElementLocated(By.id("kw")));
}catch(Exception e){
e.printStackTrace();
}
WebDriverWait默认每500ms就调用一次,在规定时间timeOutInSeconds内若没有定位成功元素,则until()会抛出org.openqa.selenium.TimeoutException 。
官网警告:
参考官网链接:https://www.selenium.dev/documentation/webdriver/waits/