使用selenium和python,如何检查元素是否存在,但实际上不可见
我一直在使用find_element_by_xpath或cssSelector来定位页面上的元素 今天,我遇到了一个问题,警告消息的xpath出现在HTML中,但实际上在站点上不可见。例如,当用户进入页面时,JS将显示一条横幅消息,但在3s后消失使用selenium和python,如何检查元素是否存在,但实际上不可见,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我一直在使用find_element_by_xpath或cssSelector来定位页面上的元素 今天,我遇到了一个问题,警告消息的xpath出现在HTML中,但实际上在站点上不可见。例如,当用户进入页面时,JS将显示一条横幅消息,但在3s后消失 CSS选择器span.greet将始终返回HTML中的元素,但这并不意味着它显示在页面上 ... <span class="greet">Hello</span> <span class="greetAgain">H
CSS选择器
span.greet
将始终返回HTML中的元素,但这并不意味着它显示在页面上
...
<span class="greet">Hello</span>
<span class="greetAgain">Hello Again!</span>
...
。。。
你好
你好!
...
我阅读了关于is_Visible()的文档,但我不太确定我是否完全理解这是否是一个解决方案?如果没有,还有其他方法可以替代吗?通过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
方法
此外,您应该使用is_display
方法检查元素是否可见
您需要了解所处元素的可见性是否符合预期条件。或者,换句话说,等待元素变为可见:
抵制使用
time.sleep()
-这是非常不可靠的错误提示。我也有类似的问题,但在我的情况下,另一个元素覆盖了实际元素。因此,我找到了一个使用javascript executer而不是使用webdriver单击的解决方案。等待一段时间可能会导致测试期间出现随机错误。
单击“确定”按钮示例:
ok_btn = self.driver.find_element_by_xpath("//button[contains(.,'OK')]")
self.driver.execute_script("arguments[0].click();", ok_btn)
“但这并不意味着它会显示在页面上。”-好吧,即使你试图等待可见性,它也永远无法与之交互,除非它真的在屏幕上可见。你必须使用
移动\U到\U元素
,并可能单击它们以使其可用于交互。一个快速的解决方法是使窗口高度与从javascript返回中收集的文档视口高度相同。
ok_btn = self.driver.find_element_by_xpath("//button[contains(.,'OK')]")
self.driver.execute_script("arguments[0].click();", ok_btn)