selenium等待

有三种等待方法

1.time.sleep(5)

  简单粗暴,强制等待5秒

2.隐式等待

  driver.implicityly_wait(10)

 在所有执行前,如果没有找到都等待10秒,我试了,不好用,好多都不起作用,为什么不知道

3.显式等待,针对某个元素,找不到之前等待,找到之后立刻执行下一句,查找时间超过给定时间就报错

方法一

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

driver=webdriver.Chrome()
driver.get("www.")
wait=WebDriverWait(driver,10,0.5) #最多等待十秒,一个文件定义一次就可以了,
wait.until(lambda driver:driver.find_element_by_xpath('aaa'))#找到该xpath对应的元素后,立刻执行下一步
driver.find_element_by_xpath('aaa').click()#点击元素
wait.until(lambda driver:driver.find_element_by_xpath('bbb'))#找到该xpath对应的元素后,立刻执行下一步
driver.find_element_by_xpath('aaa').send_keys("bbb")#输入文本

方法二

用expected_conditions判断

expected_condtions提供了16种判断页面元素的方法:

1.title_is:判断当前页面的title是否完全等于预期字符串,返回布尔值

2.title_contains:判断当前页面的title是否包含预期字符串,返回布尔值

3.presence_of_element_located:判断某个元素是否被加到dom树下,不代表该元素一定可见

4.visibility_of_element_located:判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不为0

5.visibility_of:跟上面的方法是一样的,只是上面需要传入locator,这个方法直接传定位到的element就好

6.presence_of_all_elements_located:判断是否至少一个元素存在于dom树中,举个例子,如果页面上有n个元素的class都是'coumn-md-3',name只要有一个元素存在,这个方法就返回True

7.text_to_be_present_in_element:判断某个元素中的text文本是否包含预期字符串

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

9.frame_to_be_availabe_and_switch_to_it:判断该frame是否可以switch进去,如果可以,则返回True并且switch进去,否则返回False

10.invisibility_of_element_located:判断某个元素是否不存在于dom树或不可见

11.element_to_be_clickable:判断某个元素是见并且是enable(有效)的,这样的话才叫clickable

12.staleness_of:等某个元素从dom树下移除,返回True或False

13.element_to_be_selected:判断某个元素是否被选中,一般用于select下拉表

14.element_selection_state_to_be:判断某个元素的选中状态是否符合预期

15.element_located_selection_state_to_be:跟上面的方法一样,只是上面的方法传入定位到的element,这个方法传入locator

16.alert_is_present:判断页面上是会否存在alert

以上16种部分可以用下面的方法做等待判断

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


driver=webdriver.Chrome()
driver.get("www.")
wait=WebDriverWait(driver,10,0.5) #最多等待十秒,一个文件定义一次就可以了,
locator=(By.XPATH,'aaa')
wait.until(EC.presence_of_element_located(locator))#找到该xpath对应的元素后,立刻执行下一步
driver.find_element_by_xpath('aaa').click()#点击元素
posted @ 2020-01-07 17:05  mghhz816  阅读(190)  评论(0编辑  收藏  举报