当前位置: 首页 > 知识库问答 >
问题:

Selenium WebDrive用于测试元素可见性的假阴性结果?

皮安顺
2023-03-14

我对Selenium WebDrive有一个问题。我正在对Web应用程序运行自动化测试,并进行测试以检查元素的可见性。当我在CLI中运行同一行脚本时,找到了元素,并且is_displayed()返回“TRUE”,但当我通过Python IDE与其他测试用例一起运行它时,is_displayed()返回False

我尝试了隐式和显式等待,但等待不是问题所在,元素已经加载。

这是我的测试脚本中的测试用例:

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()

有什么方法可以防止这种假阴性吗?可能正在更改我当前使用的元素选择器?

以下是我的图像元素的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>

共有2个答案

贡威
2023-03-14

在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")))
龙越彬
2023-03-14

我很确定这个id不可能是唯一的,因为它在ng-重复中,并且它可能正在加载多个具有相同id的元素,使用起来不安全。

既然如此,而且您也提到了元素负载不是一个问题,那么可以安全地假设选择器可能返回了其他一些实际隐藏的元素。我之前也经历过类似的事情,硒实际上发现了隐藏的元素,而不是预期的元素。实际上,您可以将len()find\u elements\u by\u css\u selector()一起使用,以查看返回了多少个元素。

使用ng-attr-id="{{tools barButton.id}}"或客户端上显示的任何与[id='image'][ng-attr-id='某事']作为cssSelector

 类似资料:
  • CSS 中的 visibility 属性用来设置元素是否可见,您可以将该属性与 JavaScript 一起使用,来创建非常复杂的菜单或网页布局,比如在网页中做一些测试题时您可以使用 visibility 属性将题目的答案或解析隐藏起来,需要时再将其展示出来。 visibility 属性的可选值如下: 值 描述 visible 默认值,表示元素是可见的 hidden 隐藏元素 collapse 主要

  • 所以我们有一页医学专科。它原本只是英文的。因此,如果您搜索“neuro”,则HTML看起来类似于 然后他们添加了西班牙语,所以并不是所有的结果都会返回,但是只有西班牙语是可见的。一个新的 > 添加在底部。 是否有方法等待任何匹配xpath的元素可见?注意,visibilityOfAllElements()将不起作用,因为它们不会全部可见。 我想可以做的是,预先计算所有带有@id和“width”的元

  • 问题内容: 我想根据元素的属性来验证元素是否可见,但是我没有找到一种有效的方法来使用新的Xcode 7 UI测试材料。 我已经尝试过,但是它们似乎没有按我预期的那样工作。我想他们将与该物业合作。隐藏的元素不应该存在并且不能被击中……但这不是当前的行为(我可以理解行为……但是隐藏的元素不应被IMO击中)。 还有另一种方法来验证“隐藏”属性值吗? 问题答案: 从Xcode 7.1 Beta 3开始,U

  • 问题内容: 我对一种检查元素是否具有display:none样式显式性(即style =“ display:none”),具有(或继承)此样式的类,或其父项是否被隐藏的方式感兴趣(并且我的元素继承了这个) 情况1: 要么 情况2: 谢谢, 问题答案: 您正在寻找一种针对两种不同情况的解决方案。 第二种情况是检测某个元素的 父级 是否被隐藏。这需要遍历并且麻烦且缓慢。 / Sizzle使用),然后阅

  • 结构体对字段的可见性有额外的规定(Structs have an extra level of visibility with their fields)。其可见性默认为私有,也可以加上 pub 修饰语来改变默认属性。只有当从定义在外部的模块访问一个结构体时,这可见性才显得重要,并具有隐藏信息的目的(封装,encapsulatoin)(原文:This visibility only matters

  • 问题内容: 使用和,我一直在页面上隐藏/显示一个元素,但是有两个按钮,一个用于隐藏,一个用于显示。我现在想要 一个按钮来同时切换 两者 。 我的HTML / JavaScript是这样的: 我想要的HTML / JavaScript: 如何检测元素是否可见? 问题答案: 您正在寻找: 尽管您可能考虑到仍在其他地方使用它,但应该将选择器更改为使用jQuery: 重要的是要注意,如果目标元素的父元素中