• 关于selenium的智能等待页面加载的问题


    我们经常会碰到用selenium操作页面上某个元素的时候,需要等待页面加载完成后,才能操作, 否则页面上的元素不存在,会抛出异常。 

    或者碰到AJAX异步加载,我们需要等待元素加载完成后,才能操作。

    首先来讲,我们最不推荐的就是使用  Thread.sleep( ) ;  这个也叫做线程休眠。

    这种写法通常是固定了一个时间,然而我们不知道页面具体的等待情况,有快有慢,虽然很百搭,但是并不适用于框架中。

    selenium 中提供了非常简单,智能的方法,来判断元素是否存在。我来简单的举例说明几种(在我使用的过程中,我会逐步添加到这里)

    阅读目录ctrl+F根据自己所需来搜索查看吧

    1. 实例要求
    2. 隐式等待
    3. 显式等待

    实例要求

    实例:set_timeout.html

    下面的html 代码, 实现的是点击click 按钮5秒后, 页面上会出现一个红色的div快, 我们需要写一段自动化脚本智能的去判断这个div是否存在, 然后把这个div高亮。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6 </head>
     7     <title>Set Timeout</title>
     8     <style>
     9         .red_box {background-color: red; width:20%; height: 100px; border: none;}
    10     </style>
    11     <script>
    12         function show_div(){
    13             setTimeout("create_div()", 5000);
    14         }
    15 
    16         function create_div(){
    17             d = document.createElement('div');
    18             d.className = "red_box";
    19             document.body.appendChild(d);
    20         }
    21     </script>
    22 </head>
    23 <body>
    24 <button id = "b" onclick = "show_div()">click</button>
    25 </body>
    26 </html>

    隐式等待

    通常,我们会这么写

    1 WebDriver driver = new FirefoxDriver();
    2 driver.get("file:///C:/Users/Tank/Desktop/set_timeout.html"); 
    3  
    4 driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    5 WebElement element = driver.findElement(By.cssSelector(".red_box"));  
    6 ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = "5px solid yellow"",element);

    其中

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

    意思是, 总共等待10秒, 如果10秒后,元素还不存在,就会抛出异常  org.openqa.selenium.NoSuchElementException。

    换句话说,当元素没有立即出现,隐式等待将等待一段时间再查找。

    一旦设置了隐式等待,则会存在整个WebDriver对象实例的声明周期中,它将寻找每个元素的时候都进行等待,增加整个测试执行的时间。

    即针对全局设置的,webdriver中执行所有命令的超时时间都设置为10秒了。

    显式等待

    显式等待,就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间或条件之内都没找到,那么就跳出Exception.

    一般使用ExpectedConditions类中自带方法,点击查看API页

    显式等待可以自定义等待的条件,用于更加复杂的页面等待条件

    等待的条件

    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)

    只有满足显式等待的条件满足,测试代码才会继续向后执行后续的测试逻辑

    如果超过设定的最大显式等待时间阈值, 测试程序会抛出异常。 

    1     public static void testWait2(WebDriver driver) {
    2         driver.get("file:///C:/Users/Ice/Desktop/set_timeout.html");
    3 
    4         WebDriverWait wait = new WebDriverWait(driver, 20);
    5         wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box")));
    6         WebElement element = driver.findElement(By.cssSelector(".red_box"));
    7         ((JavascriptExecutor) driver).executeScript("arguments[0].style.border = "5px solid yellow"", element);
    8     }

    以上就是对Java selenium 等待页面加载的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

  • 相关阅读:
    通过actionlib控制jaco机械臂
    actionlib学习
    配置 jaco机械臂 ros环境
    ubuntu14.04标题栏显示上下网速
    linux下alsa架构音频驱动播放wav格式文件
    ros语音交互(五)移植科大讯飞语音识别到ros
    ubuntu14.04 wifi驱动
    Ubuntu14.04使用apt-fast来加快apt-get下载的教程
    ROS语音交互(四)接入图灵语义理解
    相比传统游戏,区块链游戏的价值在哪里?
  • 原文地址:https://www.cnblogs.com/iceb/p/7364137.html
Copyright © 2020-2023  润新知