expected_conditions(EC) 判断元素的操作
expected_conditions(EC) 判断元素的操作
面试的时候经常会被问到,如何判断一个元素是否存在,如何判断alert弹窗出来了,如何判断动态的元素等等一系列的判断,在selenium的expected_conditions模块收集了一系列的场景判断方法。
expected_conditions是selenium的一个模块,主要用于对页面元素的加载进行判断,包括元素是否存在,可点击等等。
expected_conditions的使用场景一般有两种:
1. 直接在断言中使用。
2. 与WebDriverWait配合使用,显示等待页面上元素出现或者消失。
expected_conditions导入
一般情况下,我们在使用expected_conditions模块时都会对其进行重命名,通过as关键字对其命名为EC。
1. 导包:from selenium.webdriver.support import expected_conditions as EC
2. EC模块单独使用语法:
EC.方法(参数)(driver)
EC.方法(参数).__call__(driver)
expected_conditions常用操作
- title_is(title)
title_is(title)判断网页title是否是特定文本,若完全相同则返回true,否则返回False。 - title_contains(title)
title_contains(title)判断网页title是否包含特定文本,若包含则返回true,不包含返回false。
例子:
'''需求:打开https://www.baidu.com/,判断打开页面的标题是否为百度一下,你就知道;判断打开页面的标题中是否包含百度一下'''
from selenium import webdriver
from selenium.webdriver.support import expected_conditions
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
res1 = expected_conditions.title_is('百度一下,你就知道')(driver)
res2 = expected_conditions.title_contains('百度一下').__call__(driver)
print(res1, res2)
driver.quit()
- presence_of_element_located(locator)
presence_of_element_located(locator)判断一个元素存在于页面DOM树中,存在则返回元素本身,不存在则报错。
参数locator:定位器是一个数据类型元组
(“元素定位方式”, “方式对应的值”)
(By.ID, “id属性值”) - presence_of_all_elements_located(locator)
presence_of_all_elements_located(locator)判断定位的元素范围内,至少有一个元素存在于页面当中,存在则以list形式返回元素本身,不存在则报错。
例子:
'''
需求:打开https://www.baidu.com,输入中秋节快乐,点击百度一下,要求先对每个元素进行判断,元素存在则再进行输入或点击的操作
'''
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 打开浏览器
driver = webdriver.Chrome()
# 打开百度
driver.get('https://www.baidu.com/')
# 输入关键字
loc_search = (By.ID, 'kw')
ele_serach = EC.presence_of_element_located(loc_search)(driver)
ele_serach.send_keys('中秋节快乐')
# 点击按钮
loc_button = (By.ID, 'su')
ele_button = EC.presence_of_element_located(loc_button)(driver)
ele_button.click()
# 关闭浏览器
driver.quit()