selenium显示等待与Expected Conditions类使用方法

一、调用WebDriverWait类设置等待总时长、轮询周期

WebDriverWait(wd 超时时长, 调用频率(默认0.5s)).until(可执行方法, 超时时返回的信息)

等待10秒钟,每隔1秒去查看对应的元素是否可见;如果可见,继续下一步操作;如果不可见,则继续等待,直到10s结束,如果元素还是不可见,则抛出超时异常

WebDriverWait(wd,10,1).until(EC.visibility_of_element_located((By.ID,ele_locator))

二、Expected Conditions 类提供的预期条件判断方法(参考资料链接:https://blog.csdn.net/zyooooxie/article/details/84561783)**

1.title_is(‘title’) 判断当前页面的title是否完全等于(==)预期字符串,
返回布尔值:如果完全一致,返回Ture,否则返回Flase

和显式等待结合后,条件符合返回True,不符合 显式等待+报错
WebDriverWait(self.driver, 10).until(ec.title_is('百度一下,你就知道'), '失败') 打印结果是True

2.title_contains(‘title’) 判断当前页面的title是否包含预期字符串,
返回布尔值:True/False;如果完全一致,返回Ture,否则返回Flase

和显式等待结合后,条件符合返回True,不符合 显式等待+报错
WebDriverWait(self.driver, 10).until(ec.title_contains('知道'), '失败') 打印结果是True

3.presence_of_element_located(locator) 判断某个locator元素是否被加到DOM树里,并不代表该元素一定可见(元素是隐藏的)
如果定位到就返回WebElement,找不到元素 报错Message: no such element: Unable to locate element

WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.ID, 'su'))) 打印结果是WebElement
和显式等待结合后,如果定位到就返回WebElement,找不到元素 显式等待+报错

4.visibility_of_element_located(locator) 判断某个locator元素是否可见。
可见代表非隐藏、可显示,并且元素的宽和高都大于0
如果定位到就返回WebElement,找不到元素 报错Message: no such element: Unable to locate element

WebDriverWait(driver, 10).until(ec.visibility_of_element_located((By.ID, 'su'))) 打印结果是WebElement
和显式等待结合后,如果定位到就返回WebElement,找不到元素 显式等待+报错

5.visibility_of(element) 判断element元素是否可见。
Visibility means that the element is not only displayed but also has a height and width that is greater than 0.

直接传element;
如果可见就返回这个WebElement元素;不可见就返回 False;找不到的 报错的是 no such element: Unable to locate element
和显式等待结合后,不可见的 显式等待+报错;可见的返回WebElement;不存在的报错 Message: no such element: Unable to locate element

WebDriverWait(driver, 10).until(ec.visibility_of(driver.find_element(By.ID, 'su')))
WebDriverWait(driver, 10).until(ec.visibility_of(driver.find_element_by_link_text('高级搜索123')))
如果是第二个 实际不会到显式等待

10.invisibility_of_element_located(locator) 判断某个locator元素是否隐藏DOM树(隐藏、不存在、可见)

可见的元素返回False,不存在的元素见返回True;隐藏的元素返回WebElement

和显式等待结合后,可见的元素显式等待+报错;隐藏的元素会返回WebElement;不存在的元素 返回True

WebDriverWait(self.driver, 10).until(ec.invisibility_of_element_located((By.ID, 'toStationText')), '失败')

7.text_to_be_present_in_element(locator,text) 判断某个locator元素的text是否包含了预期的字符串

请先确定此元素的text [元素文本]

符合就返回True,不符合返回False;

和显式等待结合后,符合返回True;不符合,显式等待+报错

WebDriverWait(self.driver, 10).until(ec.text_to_be_present_in_element((By.PARTIAL_LINK_TEXT, '多产'), '产品'), '失败')

8.text_to_be_present_in_element_value(locator,value) 判断某个元素的value属性值是否包含了预期的字符串

请先确定此元素的value属性值 print(abc.get_attribute('value'))

条件符合 返回True;条件不符合返回False

和显式等待结合后,返回返回True;条件不符合 显式等待+报错

WebDriverWait(driver, 10).until(ec.text_to_be_present_in_element((By.ID, 'su'),'百度一下'))

等待'su'元素的value属性值是否包含'百度一下'

9.frame_to_be_available_and_switch_to_it() 判断该frame是否可以switch进去

如果直接传入定位方式id,可以的话就返回True并switch进去,否则返回False

也可传入locator元组或WebElement,可以的话就返回True并switch进去,否则报错 Message: no such element

和显式等待结合后,传入定位方式id、locator元组,可以的话就返回True并switch进去,否则 显式等待+报错

和显式等待结合后,传入WebElement,可以的话就返回True并switch进去,

否则找不到定位报错 selenium.common.exceptions.NoSuchElementException: Message: no such element

WebElement因为是去定位某个元素,定位不到会报错,用不到那个显式等待的!在执行前就已经报错 找不到元素

frame的定位 driver.switch_to.frame(xxxx) xxxx可以是id属性值;或是查找到这个元素WebElement,不可以使用locator元组

WebDriverWait(driver, 10).until(ec.frame_to_be_available_and_switch_to_it('frame_id'))
WebDriverWait(driver, 10).until(ec.frame_to_be_available_and_switch_to_it((By.ID, 'frame_id')))
WebDriverWait(driver, 10).until(ec.frame_to_be_available_and_switch_to_it(
driver.find_element(By.ID, 'frame_id')))

11.element_to_be_clickable(locator) 判断某个locator元素是否可点击

元素可以被看见visibility_of_element_located()并且可以被使用is_enabled()返回WebElement;

找不到的元素 报错 Message: no such element: Unable to locate element

隐藏的元素返回 False;

WebDriverWait 实际显式等待+ 报错的 包括 隐藏的元素和不存在的元素;可点击返回WebElement

WebDriverWait(driver, 10).until(ec.element_to_be_clickable((By.ID, 'su')))

12.staleness_of(element) 等某个元素从DOM树中移除。传入WebElement对象

returns False if the element is still attached to the DOM, true otherwise.

如果元素is_enabled()返回False;其他返回True;根本不存在的报错 Message: no such element

和显式等待结合后,元素is_enabled() 显式等待+报错;不然返回True;根本不存在的报错 Message: no such element

WebDriverWait(self.driver, 10).until(ec.staleness_of(self.driver.find_element_by_id('su')))

13.element_to_be_selected(element) 等待element元素是被选中,一般用在下拉列表

如果元素是被选中的,返回True;如果不是,返回False;定位失败的 报错 Message: no such element: Unable to locate element

和显式等待结合后,符合条件返回True;不符合就显式等待+报错;定位失败的 报错 Message: no such element

16.element_located_to_be_selected(locator) 等待locator元素是被选中

如果元素是被选中的,返回True;如果不是,返回False;元素是根本不存在的,就报错 Message: no such element: Unable to locate element

和显式等待结合后,符合条件的选项返回True;不符合条件的选项、和不存在的选项 都显式等待+报错

14.element_selection_state_to_be(element, is_selected) 判断某个元素的选中状态是否符合预期;

传入WebElement对象以及2种状态(True、False),相等返回True,否则返回False;找不到的报错 Message: no such element: Unable to locate element

is_selected is a Boolean.所以状态一定不能输入'is_selected'

和显式等待结合后 符合判断条件的返回True;不符合判断条件的 显式等待+ 报错;找不到元素的报错 Message: no such element: Unable to locate element

15.element_located_selection_state_to_be(locator,is_selected) 判断某个元素的选中状态是否符合预期。

传入locator以及2种状态(True、False),相等返回True,否则返回False;找不到的报错 Message: no such element: Unable to locate element

is_selected is a Boolean.所以状态一定 不能输入'is_selected'

print(ec.element_located_selection_state_to_be(abcd10, 'is_selected')(self.driver)) # 返回 False

和显式等待结合后,符合状态判断条件的选项 返回True;实际 显式等待 + 报错的 包括不符合状态判断条件的选项 和不存在的选项

17.alert_is_present 判断页面是否存在alert

如果有就切换到alert并返回这个Alert;如果没有就返回False

和显式等待结合后,没有alert 就显式等待+报错;有alert 就返回这个Alert

6.presence_of_all_elements_located(locator) 判断是否至少有1个元素存在DOM树中。

如果定位到就返回WebElement列表,不存在的元素 返回的是 空列表;

和显式等待结合后,定位到就返回WebElement列表,查不到这些元素 显式等待 + 报错

和显式等待结合后, 符合 最少存在一个WebElement的 返回符合定位元素条件WebElement的列表,找不到元素的 显式等待+报错

WebDriverWait(driver, 10).until(ec.presence_of_all_elements_located((By.ID, 'su')))

18.visibility_of_any_elements_located 判断页面至少有一个元素可见 visible,
传入locator,一旦定位就返回 the list of located WebElements;不可见(元素隐藏 或是 完全不存在,一个都没有)返回的是 空列表;

和显式等待结合后, 符合 最少存在一个WebElement的 返回符合定位元素条件WebElement的列表,不可见(元素隐藏 或是 完全不存在的)显式等待+报错

19.visibility_of_all_elements_located 判断页面all elements存在且可见 visible
all elements are present and visible;
传入locator,全部符合的 就返回 the list of located and visible WebElements;不能全部符合的返回False;不存在的元素返回 空列表;

和显式等待结合后,符合 全部可见WebElement的 返回符合定位元素条件WebElement的列表,找不到元素的 + WebElement不能全部可见的 显式等待+报错

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,135评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,317评论 3 397
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,596评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,481评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,492评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,153评论 1 309
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,737评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,657评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,193评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,276评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,420评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,093评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,783评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,262评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,787评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,427评论 2 359

推荐阅读更多精彩内容