2019-04-04
当使用脚本定位元素或去验证程序的运行状态时,有时候会发现找不到元素,这可能是由于突然的资源受限或网络延迟引起的响应速度太慢所导致,这时测试报告就会返回测试失败的结果。我们需要在测试脚本中引入延时机制,来使脚本的运行速度与程序的响应速度相匹配。换句话说,我们需要使脚本和程序的响应能够同步。WebDriver为这种同步提供了隐式等待和显式等待两种机制。
隐式等待
self.driver.implicitly_wait(30)
当找不到元素时,等待30s,超时将会抛出一个NoSuchElementException 的异常。
显式等待
WebDriver提供了WebDriverWait类和expected_conditions类来实现显式等待
account = WebDriverWait(self.driver, 10).until(expected_conditions.visibility_of_element_located((By.LINK_TEXT, "ACCOUNT")))
脚本将一直查找目标元素是否可见,直到达到最大等待时间10秒,超时,将会抛出TimeoutException异常
element_to_be_clickable(locator) 等待通过定位器查找的元素可见并且可用,以便确定元素是可点击的。
此方法返回定位到的元素。
WebDriverWait(self.driver, 10).until(expected_conditions.element_to_be_clickable((By.NAME,"is“)
element_to_be_selected(element) 等待直到指定的元素被选中
subscription = self.driver.find_element_by_name("is_subscribed")
WebDriverWait(self.driver, 10). until(expected_conditions. element_to_be_selected(subscription)
invisibility_of_element_located(locator) 等待一个元素在DOM中不可见或不存在
WebDriverWait(self.driver, 10). until(expected_conditions. invisibility_of_element_located((By. ID,"loading_ban”)
title_is(title) 等待网页标题与预期的标题相一致。 该方法在匹配成功时返回True,否则返回False
WebDriverWait(self.driver, 10). until(expected_conditions.title_is("Create New CustomerAccount
Alert_is_present 预期判定条件就可以用来检测警告窗口是否出现,并且把警告窗口返回给脚本,以进行后续的动作。该脚本将会等待10秒的时间来检测警告窗口是否出现,如果没有出现就抛出异常。
alert = WebDriverWait(self.driver, 10)\.until(expected_conditions.alert_is_present())
# get the text from alert
alert_text = alert.text