有没有办法可以等待两个元素中的一个加载到selenium中。我使用明确的等待,到目前为止,还没有找到解决方案。
简单地做
WebDriverWait(driver,5).until(lambda driver : driver.find_element(By.ID,"a") or driver.find_element(By.ID,"b"))
似乎不起作用。它只是寻找id =“a”的元素。
谢谢!
答案 0 :(得分:7)
find_element
会引发NoSuchElementException
异常。
如果标识为a
的元素不存在,driver.find_element(By.ID,"a")
将引发异常,driver.find_element(By.ID,"b")
将不会被执行。
解决问题的一种简单方法是使用find_elements
返回空列表而不是引发异常:
WebDriverWait(driver,5).until(
lambda driver: driver.find_elements(By.ID,"a") or driver.find_elements(By.ID,"b"))
答案 1 :(得分:2)
如果你的第一个find_element
调用无法找到一个元素,那么explained如果是NoSuchElementException
,则会引发WebDriverWait(driver, 5).until(
lambda driver : driver.find_element_by_css_selector("#a, #b"))
并且测试的第二部分将无法执行。
我建议使用与您要查找的ID匹配的CSS选择器:
find_elements
这比执行两个find_elements
调用有一个优势,因为这将使您的Selenium客户端(您的脚本)和Selenium服务器之间只进行一次往返。这应该总是比执行两个{{1}}调用更快。在本地执行测试时,差异不会太大,但如果您远程执行测试,例如使用Sauce Labs或浏览器堆栈,差异将会很大。