有没有办法可以等待两个元素中的一个加载到selenium中.我使用明确的等待,到目前为止,还没有找到解决方案.
干脆做
WebDriverWait(driver,5).until(lambda driver : driver.find_element(By.ID,"a") or driver.find_element(By.ID,"b"))
Run Code Online (Sandbox Code Playgroud)
似乎不起作用.它只是寻找id ="a"的元素.
谢谢!
find_elementNoSuchElementException如果没有找到元素,则引发异常.
如果具有id的元素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"))
Run Code Online (Sandbox Code Playgroud)
正如 falsetru 所解释的,如果您的第一次find_element调用未能找到元素,它将引发NoSuchElementException并且您的测试的第二部分将不会执行。
我建议使用与您要查找的 ID 匹配的 CSS 选择器:
WebDriverWait(driver, 5).until(
lambda driver : driver.find_element_by_css_selector("#a, #b"))
Run Code Online (Sandbox Code Playgroud)
这比执行两次find_elements调用更有优势,因为这只会在您的 Selenium 客户端(您的脚本)和 Selenium 服务器之间进行一次往返。这应该总是比执行两次find_elements调用更快。在本地执行测试时,差异不会太大,但如果您远程执行测试,例如使用 Sauce Labs 或浏览器堆栈,差异将是显着的。
| 归档时间: |
|
| 查看次数: |
4270 次 |
| 最近记录: |