我一直在使用find_element_by_xpath或cssSelector来定位页面上的元素。
今天,我遇到了一个问题,即HTML中存在警报消息的xpath但实际上在网站上不可见。一个例子是JS将在用户进入页面时显示横幅消息,但在3秒后消失。
CSS Selector span.greet
将始终以HTML格式返回元素,但并不一定意味着它正在页面上显示。
...
<span class="greet">Hello</span>
<span class="greetAgain">Hello Again!</span>
...
我阅读了关于is_Visible()的文档但是我不太确定我是否完全理解它是否可以成为解决方案?如果没有,我可以使用其他方法吗?
答案 0 :(得分:1)
我有类似的问题,但是在我的情况下,另一个元素覆盖了实际元素。因此,我找到了使用javascript执行程序而不是使用webdriver单击的解决方案。等待一段时间可能会导致测试期间出现随机错误。 示例单击“确定”按钮:
ok_btn = self.driver.find_element_by_xpath("//button[contains(.,'OK')]")
self.driver.execute_script("arguments[0].click();", ok_btn)
答案 1 :(得分:0)
通过selenium加载页面后,该元素在您测试时可能会显示,但在一段时间后会隐藏。
一种简单的方法是等待一段固定的时间。
如果您想等待元素隐藏,可以使用time.sleep
暂停脚本。
import time
def your_test_function():
# initial tests (to check if elements are displayed)
time.sleep(3)
# delayed tests (to check if something is hidden)
如果您需要更多控制权,或者您想要等待元素显示/隐藏,您可以使用Webdriver的Wait
方法。
http://selenium-python.readthedocs.org/en/latest/waits.html?highlight=wait
此外,您应该使用is_displayed
方法检查元素是否可见。
答案 2 :(得分:0)
visibility_of_element_located
预期条件需要explicitly wait。或者,换句话说,等待元素变为可见:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.greet")))
拒绝使用time.sleep()
的诱惑 - 这是非常不可靠和错误提示。