强制等待&隐式等待&显示等待:
1.强制等待
time.sleep(秒)
设置一个时间,让他等待多久就会等多久
优点:代码比较简单
2.隐式等待:
implicitly_wait(秒)
优点:对整个driver周期都起作用,只要设置一次即可
缺点:会一直等待整个页面加载完成,才会执行下一步
元素已经存在但是不可见,implicitly_wait元素只出现在dom中,等待元素是不可见不可交互的
也就是有时无法生效
3.显示等待
#presence_of_element_located 等待页面上的某个元素被加载到dom树中,这并不意味一定可见的
#visibility_of_element_located 等待页面上的某个元素不仅存在于dom树中,而且可见
# title is和title_contains:验证页面标题
#text_to_be _present in_element或text to be_present_in_element_value
#验证页面上的元素显示了正确的文本
#text to_be present in element或text to be_present in_element_value#
区别:text_to_be_present_in_element不是输入的文本 <div><span><p>
#text to be present in element value输入性的文本里面 <input>
部分代码:
presence_of_element_located()等待页面上的某个元素并加载到dom树中,不一定可见
visibility_of_element_located等待页面上的某个元素不仅存在dom树中,而且可见
WebDriverWait(driver,10).until(EC.visibility_of_element_located())
driver= webdriver.Chrome()#打开浏览器
driver.get("http://novel.hctestedu.com/user/login.html")
# driver.implicitly_wait(5)
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,"txtUName"))).send_keys("13587545934")
# driver.find_element(By.ID,"txtUName").send_keys("13587545934")
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,"txtPassword"))).send_keys("q20050821")
# driver.find_element(By.ID,"txtPassword").send_keys("q20050821")
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,"btnLogin"))).click()
# driver.find_element(By.ID,"btnLogin").click()
# time.sleep(2)
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//*[text()="成吉思汗的动物军团"]'))).click()
# driver.find_element(By.XPATH,'//*[text()="成吉思汗的动物军团"]').click()
# time.sleep(2)
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.XPATH,'//*[text()="点击阅读"]'))).click()
# driver.find_element(By.XPATH,'//*[text()="点击阅读"]').click()
# time.sleep(2)
# driver.find_element(By.XPATH,'//*[text()="加书架"]').click()
# time.sleep(2)
# sjjg=driver.find_element(By.XPATH,'//*[text()="已收藏"]').text
print(sjjg)
expECt = "已收藏"
assert sjjg==expECt,"收藏失败"
time.sleep(2)
显式等待,需要用到两个类:WebDriverWait().until和expected_conditions两个类,这两个类包括了:
presence_of_element located ;visibility_of_element_located 用于找元素
title_is和title_contains 以及 text to be_present in_element或text to be_ present in_element_value 用于断言