Selenium:元素等待的4种方法

摘要:
WebDriverdr=newFirefoxDriver();dr.manage().timeouts().implicitlyWait;3.使用javascriptWebElementelement=driver.findElement;.executeScript;4.显示等待,推荐使用显示等待WebDriverWaitwait=newWebDriverWait;wait.until;显式等待使用ExpectedConditions类中自带方法,可以进行显试等待的判断。WebDriverWaitwait=newWebDriverWait;wait.until;==========================================================================我们经常会碰到用selenium操作页面上某个元素的时候,需要等待页面加载完成后,才能操作。SetTimeout.red_box{background-color:red;width=20%;height:100px;border:none;}functionshow_div(){setTimeout;}functioncreate_div(){d=document.createElement;d.className="red_box";document.body.appendChild;}click隐式等待WebDriverdriver=newFirefoxDriver();driver.get;driver.manage().timeouts().implicitlyWait;WebElementelement=driver.findElement;.executeScript;其中driver.manage().timeouts().implicitlyWait;意思是,总共等待10秒,如果10秒后,元素还不存在,就会抛出异常org.openqa.selenium.NoSuchElementException显式等待显式等待使用ExpectedConditions类中自带方法,可以进行显试等待的判断。

1.使用Thread.sleep(),这是最笨的方法,但有时候也能用到而且很实用。

2.隐示等待,隐性等待是指当要查找元素,而这个元素没有马上出现时,告诉WebDriver查询Dom一定时间。默认值是0,但是设置之后,这个时间将在WebDriver对象实例整个生命周期都起作用。
WebDriverdr=newFirefoxDriver();
dr.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
3.使用javascript
WebElementelement=driver.findElement(By.xpath(test));
((JavascriptExecutor)driver).executeScript("arguments[0].style.border="5pxsolidyellow"",element);
4.显示等待,推荐使用显示等待

WebDriverWait wait = new WebDriverWait(dr, 10);

wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("kw")));

显式等待 使用ExpectedConditions类中自带方法, 可以进行显试等待的判断。

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

(1)页面元素是否在页面上可用和可被单击:elementToBeClickable(By locator)

(2)页面元素处于被选中状态:elementToBeSelected(WebElement element)

(3)页面元素在页面中存在:presenceOfElementLocated(By locator)

(4)在页面元素中是否包含特定的文本:textToBePresentInElement(By locator)

(5)页面元素值:textToBePresentInElementValue(By locator, java.lang.String text)

(6)标题 (title):titleContains(java.lang.String title)

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

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

WebDriverWaitwait=newWebDriverWait(driver,5);

wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("")));

==========================================================================

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

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

selenium 中提供了非常简单,智能的方法,来判断元素是否存在.

阅读目录

实例要求

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

复制代码
<html>
    <head>
        <title>Set Timeout</title>
        <style>
            .red_box {background-color: red; width = 20%; height: 100px; border: none;}
        </style>
        <script>
            function show_div(){
                setTimeout("create_div()", 5000);
            }
  
            function create_div(){
                d = document.createElement('div');
                d.className = "red_box";
                document.body.appendChild(d);
            }
        </script>
    </head>
    <body>
        <button   onclick = "show_div()">click</button>
    </body>
</html>
复制代码

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

其中

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

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

显式等待

显式等待 使用ExpectedConditions类中自带方法, 可以进行显试等待的判断。

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

等待的条件

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)

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

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

复制代码
    public static void testWait2(WebDriver driver)
    {
        driver.get("E:\StashFolder\huoli_28@hotmail.com\Stash\Tank-MoneyProject\浦东软件园培训中心\我的教材\Selenium Webdriver\set_timeout.html");    
        
        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box")));
        WebElement element = driver.findElement(By.cssSelector(".red_box"));      
        ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = "5px solid yellow"",element);  
    }
复制代码

免责声明:文章转载自《Selenium:元素等待的4种方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转)关于Update语句的锁理解C#回调函数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Element plus的tree组件实现单选和搜索功能

需求: Element plus的树组件实现单选和搜索功能。 效果: 实现: <!--element plus 树组件实现单选及搜索功能 --> <template> <div class="tree-radio"> <h3>Element plus 树组件实现单选及搜索功能<...

Selenium自动化获取WebSocket信息

性能日志 ChromeDriver支持性能日志记录,您可以从中获取域“时间轴”,“网络”和“页面”的事件,以及指定跟踪类别的跟踪数据。 启用性能日志 默认情况下不启用性能日志记录。因此,在创建新会话时,您必须启用它。 DesiredCapabilities cap = DesiredCapabilities.chrome();LoggingPref...

4_Selenium框架封装

1 封装WebDriver 封装代码编写 package com.selenium.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDr...

将元素移动到列表末尾

列表的操作在日常编程中很常见。人们可能会遇到希望仅使用单衬纸执行的各种问题。一个这样的问题可能是将列表元素移动到后面(列表末尾)。让我们讨论可以做到这一点的某些方法。 方法#1:使用append() + pop() + index()通过组合这些功能,可以在一行中执行此特定功能。append 函数使用 index 函数提供的索引添加 pop 函数删除的元素...

webdriver与JS操作浏览器元素

1、JQuery的选择器实例 语法 描述 $(this) 当前 HTML 元素 $("p") 所有 <p> 元素 $("p.intro") 所有 的 <p> 元素 $(".intro") 所有 的元素 $("#intro") 的元素 $("ul li:first") 每个 <ul> 的第一个...

如何记录selenium自动化测试过程中接口的调用信息

注: 以下内容引自https://www.cnblogs.com/hhudaqiang/p/6635494.html 上一篇博客,我写了python自动化框架的一些知识和粗浅的看法,在上一篇中我也给自己提出一个需求:如果记录在测试过程中接口的调用情况?提出这个需求,我觉得是有意义的。你在测试过程中肯定会遇到一些莫名其妙的问题,比如:web某个页面一直在刷进...