Python 测试元素可见性的Selenium Webdriver假阴性结果?
我对Selenium Webdriver有问题。我正在对一个web应用程序运行自动测试,并进行了一个检查元素可见性的测试。当我在Python 测试元素可见性的Selenium Webdriver假阴性结果?,python,selenium,selenium-webdriver,ui-testing,Python,Selenium,Selenium Webdriver,Ui Testing,我对Selenium Webdriver有问题。我正在对一个web应用程序运行自动测试,并进行了一个检查元素可见性的测试。当我在CLI中运行同一行脚本时,元素被找到并且显示() 我尝试了隐式和显式等待,但等待不是问题所在,元素已经加载 以下是我的测试脚本中的测试用例: def test_image_element_icon_is_displayed(self): self.assertTrue(self.driver.find_element_by_css_selector("#Imag
CLI
中运行同一行脚本时,元素被找到并且显示()
我尝试了隐式和显式等待,但等待不是问题所在,元素已经加载
以下是我的测试脚本中的测试用例:
def test_image_element_icon_is_displayed(self):
self.assertTrue(self.driver.find_element_by_css_selector("#Image").is_displayed(),msg="Image is not displayed")
这是我在CLI中运行的脚本:
driver.find_element_by_css_selector("#Image").is_displayed()
有什么方法可以防止这种假阴性吗?可能正在更改我当前使用的元素选择器
以下是my Image元素的HTML:
<div ng-click="applyDataElement(toolbarButton.type, toolbarButton.id)" class="frame-click ng-scope" ng-repeat="toolbarButton in toolbar">
<div class="frame-box" ng-attr-id="{{toolbarButton.id}}" id="Image">
<div class="draggable-box">
<div bind-html-unsafe="toolbarButton.icon" class="draggable-icon ng-binding"><i class="fa fa-picture-o"></i></div>
<div class="draggable-label ng-binding">Image</div>
</div>
</div>
</div>
形象
在Python终端中运行代码和将其作为脚本运行之间的关键区别在于,在终端上,您执行的每一行之间都有暂停/延迟-这使页面有时间处理异步请求,更新测试代码中的DOM等,您需要等待元素变得可见:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
image = wait.until(EC.visibility_of_element_located((By.ID, "Image")))
我很确定这个id不能是唯一的,因为它在ng repeat
中,并且它可能正在加载多个具有相同id的元素,这些id使用起来不安全
既然这样说了,而且您也提到了元素负载不是一个问题,那么可以安全地假设选择器可能返回了其他一些实际隐藏的元素。我以前也经历过类似的事情,selenium实际上发现了隐藏的元素,而不是预期的元素。实际上,您可以使用len()
和find\u elements\u by\u css\u selector()
来查看返回了多少个元素
使用ng attr id=“{{toolbarButton.id}}”
或与[id='image'][ng attr id='something']
协同显示在客户端上的任何内容作为cssSelector您可以提供元素的一些html
吗?这里的目标元素是什么?带文本图像的div
?或者是带id image的div
。但是,我需要找到一种方法,找到一个较短的惟一属性来查找元素,而不是长css@Saifur@MahsaMortazavi你可以。我通常不会像担心长xpath那样担心长css,除非您需要一些漂亮的代码。我不知道长css是否真的会影响执行时间。谢谢@alecxe,这是真的。我以前有过这个问题。然而,在这种情况下,元素被加载了,但#Image不是唯一的选择器。@MahsaMortazavi当然,这是有道理的。谢谢分享。