我的框架中存在一个问题,即我尝试等待元素的可见性,而不是使用静态睡眠。问题是元素的可见性检查DOM上是否存在元素,这将返回true但在我的系统中页面尚未完全加载。发生的事情是,一旦检查元素的可见性,我就会得到真实的设置值。当实际页面完全加载时,这些值会重置。
我的问题是我可以使用什么代替静态睡眠等待实际页面(不仅是DOM)完全加载,因为元素的可见性对我不起作用?
P.S。我正在使用Selenium webdriver与python 2.7
/亚当
答案 0 :(得分:3)
expected_conditions.visibility_of_element_located(locator)
方法将检查两者 - DOM中元素的存在及其可见性(元素的显示高度和宽度大于零)。
理想情况下,driver.get(url)
方法应自动等待整页加载,然后再转到下一行。但是,如果正在测试的Web应用程序使用ajax调用/操作(尽管页面已加载但ajax操作仍在进行中),这可能不会按预期运行。在这种情况下,我们可以使用类似下面的内容在对所需的元素执行操作之前等待稳定性。
# create the firefox driver
driver = webdriver.Firefox()
# navigate to the app url
driver.get('http://www.google.com')
# keep a watch on jQuery 'active' attribute
WebDriverWait(driver, 10).until(lambda s: s.execute_script("return jQuery.active == 0"))
# page should be stable enough now, and we can perform desired actions
elem = WebDriverWait(driver, 10).until(expected_conditions.visibility_of_element_located((By.ID, 'id')))
elem.send_keys('some text')
希望这会有所帮助..
答案 1 :(得分:1)
试试ExpectedConditions.elementToBeClickable
。
请参阅:https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html#elementToBeClickable-org.openqa.selenium.By-