zoukankan      html  css  js  c++  java
  • Selenium 的页面加载以及几种等待的问题

    1. PageLoadStrategy :

       当调用driver.get("https://xxxx.xxx.xxx")来访问某页面时,get方法通常会阻塞浏览器直到页面完全加载后才执行后面的动作,若一个页面加载过慢,则会导致get方法一直阻塞。有时候希望页面在加载过程中就开始检测元素是否存在,而不是等到页面加载完了才开始检测,想要实现这个效果,可以用ChromeOptions类下的setPageLoadStrategy方法(Java,Chrome浏览器):

    import org.openqa.selenium.PageLoadStrategy;
    import org.openqa.selenium.chrome.ChromeOptions; 
    
    ChromeOptions options = new ChromeOptions();
    options.setPageLoadStrategy(PageLoadStrategy.NONE);
    driver=new ChromeDriver(options);

    其中PageLoadStrategy有三种选择:

    (1) NONE: 当html下载完成之后,不等待解析完成,selenium会直接返回

    (2) EAGER: 要等待整个dom树加载完成,即DOMContentLoaded这个事件完成,仅对html的内容进行下载解析

    (3) NORMAL: 即正常情况下,selenium会等待整个界面加载完成(指对html和子资源的下载与解析,如JS文件,图片等,不包括ajax

    以下这段来自https://blog.csdn.net/wkb342814892/article/details/81611737,感谢原作者

    实际上,对于一个新加载的dom,页面啥时候开始接受命令由页面的加载策略决定,也就是说,我们通过修改页面加载策略,可以使页面即使处于加载中,也能接受我们的命令,从这点可以解决webdriver.get的阻塞问题。而每类webdriver都有一个对应的配置文件放在特定的类DesiredCapabilities里面,通过修改里面的pageLoadStrategy,可以使webdriver的页面加载策略发生改变。

     

    2. selenium的几种等待方式:

    (1) Thread.sleep(XXX):硬等待,必须过了XXX毫秒以后才执行后面的命令。

    (2) 

    WebDriverWait wait=new WebDriverWait(driver,10);
    wait.until(ExpectedConditions.presenceOfElementLocated(By.id("XXX")));

    最多等待10秒,一旦等到XXX元素出现即退出等待执行后面操作,10秒后仍然没有出现XXX元素则抛出异常。

    (3) driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);

    所有的findElement方法都会隐式等待10s

  • 相关阅读:
    安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)
    VM虚拟机安装 常用Linux命令 网卡配置 (第二天)
    数据库的交互模式 常用的dos命令 (第一天)
    Validate US Telephone Numbers FreeCodeCamp
    Arguments Optional FreeCodeCamp
    Everything Be True FreeCodeCamp
    Binary Agents FreeCodeCamp
    Steamroller FreeCodeCamp
    Drop it FreeCodeCamp
    Smallest Common Multiple FreeCodeCamp
  • 原文地址:https://www.cnblogs.com/mabingxue/p/11057366.html
Copyright © 2011-2022 走看看