selenium的等待条件

Posted 永远不要矫情

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium的等待条件相关的知识,希望对你有一定的参考价值。

在上一篇文章中,我们讲到了显示等待,在until的方法中使用的等待条件是:title_is。下面简单介绍了selenium的17种等待:

序号方法名含义返回值
1title_is判断title,是否出现布尔
2title_contains判断title,是否包含某些字符布尔
3presence_of_element_located判断某个元素是否被加到了dom树里,并不代表该元素一定可见WebElement
4visibility_of _element_located判断某个元素是否被加到了dom树里并且可见,宽和高都大于0WebElement
5visibility_of判断元素是否可见,如果可见就返回这个元素WebElement
6presence_of_all_elements_located判断是否至少有一个元素存在于dom树中列表
7visibility_of_any_elements_located判断是否至少有一个元素在页面上可见列表
8text_to_be_present_in_element判断指定的元素中是否包含了预期的字符串布尔
9text_to_be_present_in_element_value判断指定的元素属性值中是否包含了预期的字符串布尔
10frame_to_be_available_and_switch_to_it判断该iframe是否可以switch进去布尔
11invisibility_of_elements_located判断某个元素是否存在于dom或不可见布尔
12element_to_be_clickable判断某个元素中是否可见且是enable的,代表可点击布尔
13staleness_of等待某个元素从dom树中移除布尔
14element_to_bo_selected判断某个元素是否被选中了布尔
15element_selection_state_to_be判断某个元素的选中状态是否符合预期布尔
16element_located_selection_state_to_be判断某个元素的选中状态是否符合预期布尔
17alert_is_present判断页面上是否存在alertalert

代码示例如下:

from selenium import webdriver
import os

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

class TestCase(object):
    def __init__(self):
        self.driver = webdriver.Chrome()
        path = 'file:///'+os.path.abspath('test_wait.html')
        self.driver.get(path)

    def test(self):
        self.driver.find_element_by_id('btn').click()
        # 显示等待
        wait = WebDriverWait(self.driver, 3)
        wait.until(EC.text_to_be_present_in_element((By.ID, 'id2'), 'id 2'))
        print(self.driver.find_element_by_id('id2').text)
        print('ok')
        self.driver.quit()

if __name__ == '__main__':
    case = TestCase()
    case.test()

当 wait = WebDriverWait(self.driver, 3)中的3改为1时,则会报TimeoutException错误;如果没有显示等待,则会报NoSuchElementException。
html的页面代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>title</title>
</head>
<body>
<script>
    function f(){
        window.setTimeout("populate()",2000);
    }
    function populate(){

        document.getElementById("id1").innerHTML = "<div id='id2'>id 2</div>"
    }
</script>
<form>
    <input type="text" name="t1">
    <input type="button" value="Click me" onclick="f()" id="btn">
    <div id="id1">
    </div>
</form>
</body>

</html>

以上是关于selenium的等待条件的主要内容,如果未能解决你的问题,请参考以下文章

selenium 显示等待和隐式等待哪个更好

Selenium显示等待常用的等待条件ExpectedConditions

selenium的等待条件

selenium2中的等待

selenium webdriver 的三种等待方式

Selenium自动化测试中的等待