1. 判断元素 (expected_conditons)
作为一个刚刚转到 python 开发的小朋友, 在开发前只将前辈们封装的方法看了一遍, 学了一边 selenium 基础. 看到封装的方法有什么判断元素是否存在, 判断元素是否可见, 而在基础知识中根本不存在, 一脸懵逼.
直到写爬虫案例的时候, 突然发现了 selenium 下的一个模块吸引了我, 因为我在其他开发中根本没有碰到这个模块, 所以我就去了解了一下, 然后就有了这篇博客.
selenium 的 expected_conditions 模块一般也简称 EC, 收集了一系列的场景判断方法.
expected_condtions 提供了 16 种判断页面元素的方法.
我们就用百度首页来进行演示吧 (想不到什么网页).
前面代码都一样, 所以我就写在前面了.
- #coding=utf-8
- from selenium import webdriver
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.support.wait import WebDriverWait
- base_url = "http://www.baidu.com"
- driver = webdriver.Firefox()
- driver.implicitly_wait(5)
- # 隐式等待和显示等待都存在时, 超时时间取二者中较大的
- driver.get(base_url)
title_is(): 判断当前页面的 title 是否完全等于预期字符串, 返回布尔值
- demo = WebDriverWait(driver,10).until(EC.title_is(u"百度一下, 你就知道"))
- print("判断 title, 返回布尔值:",demo)
结果:
title_contains(): 判断当前页面的 title 是否包含预期字符串, 返回布尔值
- demo = WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
- print("判断 title, 返回布尔值:",demo)
结果:
presence_of_element_located(): 判断某个元素是否被加到 dom 树下, 不代表该元素一定可见
- demo = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
- '''判断某个元素是否被加到了 dom 树里, 并不代表该元素一定可见, 如果定位到就返回 WebElement'''
- print(demo)
结果:
visibility_of_element_located(): 判断某个元素是否可见, 可见代表元素非隐藏, 并且元素的宽和高都不为 0
- demo = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))
- '''判断某个元素是否被添加到了 dom 里并且可见, 可见代表元素可显示且宽和高都大于 0'''
- print(demo)
结果:
visibility_of(): 判断元素是否可见, 如果可见就返回这个元素
- demo = WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))
- '''判断元素是否可见, 如果可见就返回这个元素'''
- print(demo)
结果:
presence_of_all_elements_located(): 判断是否至少一个元素存在于 dom 树中, 举个例子, 如果页面上有 n 个元素的 class 都是'coumn-md-3',name 只要有一个元素存在, 这个方法就返回 True
- demo = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))
- '''判断是否至少有 1 个元素存在于 dom 树中, 如果定位到就返回列表'''
- print(demo)
结果:
text_to_be_present_in_element_value(): 判断某个元素中的 value 属性值是否包含了预期字符串
- demo = WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))
- '''判断指定元素的属性值中是否包含了预期的字符串, 返回布尔值'''
- print(demo)
结果:
text_to_be_present_in_element(): 判断某个元素中的 text 文本是否包含预期字符串
- demo = WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))
- '''判断指定的元素中是否包含了预期的字符串, 返回布尔值'''
- print(demo)
结果:
frame_to_be_availabe_and_switch_to_it(): 判断该 frame 是否可以 switch 进去, 如果可以, 则返回 True 并且 switch 进去, 否则返回 False (没找到例子)
invisibility_of_element_located(): 判断某个元素是否不存在于 dom 树或不可见
- demo = WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))
- '''判断某个元素在是否存在于 dom 或不可见, 如果可见返回 False, 不可见返回这个元素'''
- # 注意 #swfEveryCookieWrap 在此页面中是一个隐藏的元素
- print(demo)
结果:
element_to_be_clickable(): 判断某个元素是见并且是 enable(有效) 的, 这样的话才叫 clickable
- demo = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()
- '''判断某个元素中是否可见并且是 enable 的, 代表可点击'''
- print(demo)
结果:
staleness_of(): 等某个元素从 dom 树下移除, 返回 True 或 False(没找到例子)
element_to_be_selected: 判断某个元素是否被选中, 一般用于 select 下拉表 (没找到例子)
element_selection_state_to_be: 判断某个元素的选中状态是否符合预期 (没找到例子)
element_located_selection_state_to_be: 跟上面的方法一样, 只是上面的方法传入定位到的 element, 这个方法传入 locator(没找到例子)
alert_is_present: 判断页面上是会否存在 alert(没找到例子)
来源: http://www.bubuko.com/infodetail-3344691.html