expected_conditions模块主要用于对页面的加载进行判断,主要的用途有两个,一、用于响应数据断言;二、与WebDriverWait连用,等待页面元素加载成功
在此先导入需要用到的模块或方法,一下举例访问的url均以此为准
from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
常用方法:
title_is(title_pre):判断当前页面的title是否精确等于title_pre
print(expected_conditions.title_is(u"百度一下,你就知道")(driver)) # 在title_is类中,存在__call__方法,判断输入的字符串是否等于当前页面的title,而__call__方法需要传入的一个参数就是当前浏览器driver
print(driver.title) # 输出当前页面的title
driver.quit()
title_contains(title_pre):判断当前页面的title是否包含title_pre
print(expected_conditions.title_contains(u"百度一下")(driver)) # 原理同title_is
presence_of_element_located((By.ID, locator)):接收一个元组,判断页面元素是否出现(出现不代表可见),一般与智能等待一块使用
WebDriverWait(driver, 5).until(expected_conditions.presence_of_element_located((By.ID, "su"))) # 这里只要不报错,程序可以继续向下执行即说明此命令执行成功
url_contains(url_pre):判断当前页面的url是否包含url_pre,区分大小写
print(expected_conditions.url_contains("baidu.com")(driver))
url_matches(url_pre):使用正则表达式的方式判断当前页面的url是否包含url_pre,包含返回返回True
print(expected_conditions.url_matches("baidu.com")(driver)) # True
print(expected_conditions.url_matches("b0idu.com")(driver)) # False
url_to_be(url_pre):判断当前页面的url是否精确等于url_pre
print(expected_conditions.url_to_be("https://www.baidu.com/")(driver))
print(driver.current_url) # 得到当前页面的url
url_changes(url_pre):判断当前页面的url是否与预期不同,不同返回True
visibility_of_element_located((By.ID, locator)):接收一个元组,判断元素是否出现并可见,可见意味着宽高大于0,一般与智能等待连用
WebDriverWait(driver, 5).until(expected_conditions.visibility_of_element_located((By.ID, "su"))) # 程序无报错,继续向下执行即为成功
visibility_of(element):通过元素直接定位,visibility_of_element_locator是通过locator进行定位
presence_of_all_elements_located((By.ID, locator)):只要页面上有一个符合的元素出现就返回True
text_to_be_present_in_element_value((By.ID, locator), str_pre):判断定位到的元素的value值是否等于预期的str_pre
print(expected_conditions.text_to_be_present_in_element_value((By.ID, "su"), u"百度一下")(driver))
element_to_be_clickable:判断一个元素是否可以点击,可点击需符合两个条件,一、元素可见;二、使能,即元素的is_enabled()为True
element_to_be_selected(element):判断元素是否被选中
element_located_to_be_selected((By, locator)):接收一个元素,功能与上一个相同
element_selection_stat_to_be(element, is_selected):判断元素的状态是否符合给定的值
number_of_windows_to_be(num):判断窗口的数量是否达到指定的数量
print(expected_conditions.number_of_windows_to_be(1)(driver))
alert_is_present:无参数,判断页面上是否存在alert,如果有,返回alert句柄
print(expected_conditions.alert_is_present()(driver))