我经常遇到Selenium的问题,脚本崩溃,因为我想访问尚未加载的元素。
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method": "xpath", "selector":"//*[@id="ipv4_info"]/span[3]"}
目前我是这样做的,我在这些地方之前放了一个time.sleep(30)
,但有时需要更长或更短的时间才能加载元素。
有没有办法等到元素加载完毕,一旦加载,立即继续执行其余的代码?
要定位元素,需要为visibility_of_element_located()引入WebDriverWait,您可以使用以下定位策略:
>
XPATH:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[@id="ipv4_info"]/span[3]")))
CSS_SELECTOR:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "#ipv4_info span:nth-child(3)")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我有一个动态加载的页面,其中包含一个按钮。我正在尝试等待selenium使用C#绑定点击按钮。我有以下代码: 不过这不管用。click事件永远不会被触发。selenium脚本不会抛出异常警告ID为“addInspectionButton”的元素不存在。它只是不能点击它。如果我加一根线。Sleep(3000)在wait语句和我获得按钮元素句柄的那一行之间。 我没有使用预期条件.元素在这里正确点击吗?
问题内容: 我正在尝试使用pythonselenium登录到网页。我找到了一个元素并将其启用,但是当我尝试向其发送send_keys()时出现错误。错误输出的主要内容(我认为)是 我的代码是 输出是 那么,我该怎么办? 问题答案: 为了使用户名字段可见,您需要将光标移动到登录链接:
我正试图使用Selenium来废除google maps,不幸的是,它不太好用,元素不在页面加载上,是在点击某个按钮后添加的,但似乎元素在寻找时并不总是加载。(我指的是在进行特定搜索时,点击商店、餐馆后出现的旋转木马项目) null
问题内容: 我正在寻找类似于在单击元素之前检查元素是否已显示的内容。我认为可以通过完成此操作,因此我使用了以下方法: 然后点击 不幸的是,有时它等待元素,有时不等待。我寻找了一段时间,找到了这个解决方案: 它等待一切正常,但是在超时之前必须等待10次5、50秒。有点多。因此,我将隐式等待时间设置为1秒,直到现在一切都还不错。因为现在有些事情在超时前等待10秒,而另一些事情在1秒之后超时。 如何覆盖
问题内容: 只要我使用PageObject模式,我就想知道应该在哪里等待动态页面上的元素。假设我们有测试方法和pageObject类。我应该做类似的事情吗(在测试方法中): 点击按钮 等待元素显示 验证元素(例如包含方法isElementDisplayed()) 也许还有其他好的做法来等待该要素?也许我们应该等待PageObject.class中的isElementDisplayed方法中的元素?
等待元素出现在网页上的最佳方式是什么?我已经读到,我们可以使用隐式等待和功能,如网络驱动程序wait,流利的等待等,最后但不是最不重要的线程.sleep()...我使用最多,但想停止使用。 我的场景: 用户登录到网站…网站检查凭据,并以叠加的形式向用户提供报价(一种弹出窗口,但不是单独的窗口)。我需要验证叠加图上的文字。用户登录和显示覆盖之间存在时间间隔。最好的方法是什么,以便硒只等待元素不可见的