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/

posted @ 2023-01-30 15:31  *蓝医生*  阅读(51)  评论(0编辑  收藏  举报