Java Selenium - ExpectedCopnditions 存在通过但可见性失败

2023-12-04

我不明白..我已经寻找答案两天了,但我找不到解决这个问题的单一解决方案。

代码如下所示(在 try catch 块内):

Presence = new WebDriverWait(Driver, custTimeout);
Presence.until(ExpectedConditions.presenceOfElementLocated(By.xpath(ElementXpath)));

单独的 try catch 块:

Visisble = new WebDriverWait(Driver, custTimeout);
Visisble.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(ElementXpath)));

这也显示为 FALSE:

foundElement.isDisplayed();

这失败了:

Clickable = new WebDriverWait(Driver, custTimeout);
Clickable.until(ExpectedConditions.elementToBeClickable(By.xpath(ElementXpath)));

现在,当元素在屏幕上可见并且可以单击时,PRESENCE 如何/为什么会通过而 VISIBILITY 会失败:

ElementToClick.get(0).click();

所以基本上,元素是可见的并且元素是可交互的,但“检查是否可见”却失败并出现异常。

看到对“可见性”的检查基本上是寻找元素的高度和宽度,我决定也通过以下方式手动检查:

ElementToClick.getAttribute("height");
ElementToClick.getAttribute("width");

两个值都是 0(但我可以在屏幕上看到该元素)。

Edit:

那么,如果这些标准方法不起作用,我该如何识别元素是否可见呢?

当前元素属性:

enter image description here

已经检查了这些帖子:

预期条件失败:等待 By.xpath 定位的元素的可见性

Selenium Webdriver 问题:预期条件失败:等待位于 (..) 的元素的可见性

https://sqa.stackexchange.com/questions/24459/selenium-webdriver-tests-sometimes-doesnt-find-elements

Selenium:硒如何识别可见或不可见的元素?是否有可能它已加载到 DOM 中但未渲染到 UI 上?

Selenium 中的 isDisplayed() 与 isVisible()


存在元素定位()

presenceOfElementLocated()是检查页面 DOM 上是否存在元素的期望。这并不一定意味着该元素是可见的。

public static ExpectedCondition<WebElement> presenceOfElementLocated​(By locator)

Parameters:
locator - used to find the element
Returns:
the WebElement once it is located

元素位置可见性()

visibilityOfElementLocated()是检查元素是否存在于页面 DOM 上并且可见的期望。可见性是指元素不仅能显示,而且高度和宽度都大于0。

public static ExpectedCondition<WebElement> visibilityOfElementLocated​(By locator)

Parameters:
locator - used to find the element
Returns:
the WebElement once it is located and visible

元素显示

此次实施isDisplayed()符合规范中的WebDriver 2 级 W3C 工作草案其中提到:

推荐的方法将给出简化的近似值 元素的可见性,但请注意,它仅依赖于 树遍历,并且仅涵盖可见性检查的子集。

元素的可见性由感知可见的内容决定 对人眼来说。在这种情况下,元素的显示性并不 涉及到能见度 or display风格 特性。

建议实施者确定元素的方法 可见性最初是由 Selenium 项目开发的,并且是 基于对元素性质的粗略近似 树中的关系。一般要考虑一个元素 如果它的任何部分在边界内绘制在画布上,则可见 视口的。

显示的元素算法是布尔状态,其中 true 表示该元素已显示, false 表示该元素已显示 元素不显示。要计算元素的状态,请调用Call(bot.dom.isShown, null, element)。如果这样做不会产生错误,则返回此函数调用的返回值。 否则返回错误,错误代码未知错误。

此函数通常会暴露给 URI 模板为 GET 的请求:

/session/{session id}/element/{element id}/displayed.

结论

人眼感知可见的元素可以通过以下方式变得不可见:

  • 设置 CSSvisibility财产给hidden
  • 设置display财产给none

对于元素本身或者它的祖先之一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Selenium - ExpectedCopnditions 存在通过但可见性失败 的相关文章

  • 数组查找时间复杂度和。它是如何存储的

    众所周知 通过索引访问数组的时间复杂度是O 1 Java 的文档ArrayList 它由数组支持 对其也有同样的说法get手术 size isEmpty get set iterator 和 listIterator 操作以恒定时间运行 查
  • 面试问题 - 在排序数组 X 中搜索索引 i,使得 X[i] = i

    昨天面试时 我被问到了以下问题 考虑一个 Java 或 C 数组X它已排序并且其中没有两个元素是相同的 如何最好地找到索引i这样该索引处的元素也是i 那是X i i 作为澄清 她还给了我一个例子 Array X 3 1 0 3 5 7 in
  • 如何检测线程是否被IO阻塞?

    在Java中 线程可以有不同的状态 新的 可运行的 阻塞的 等待的 TIMED WAITING 的 终止的 然而 当线程被IO阻塞时 其状态为 RUNNABLE 如何判断是否被IO阻塞 NEW 线程已创建但尚未处理 可运行 线程正在占用CP
  • 如何从 .t​​xt 文件读取数据并将数据放入对象的数组列表中?

    到目前为止 我所写的内容是基于我目前对基本数组的了解 但我只是不明白如何使用数组列表 或如何从文件中读取 到目前为止我所写的内容有效 任何有助于修复我的代码以从文件中读取并使用数组列表的链接或建议将不胜感激 谢谢 public class
  • 如何使用 log4j 自动记录类中调用的每个方法

    我有一个包含数据库调用的类 我通常希望使用 log4j 记录该类中调用的每个方法 带参数 logger debug foo id id initiated 可以自动执行此操作吗 也许通过在每个方法的开头使用某种注释而不是编写每个 logge
  • 仅使用 ServletContext 查找应用程序的 URL

    我正在使用 Spring MVC 编写一个 Java Web 应用程序 我有一个后台进程 它会遍历数据库并查找必须通过电子邮件发送给我的用户的通知 这些电子邮件需要包含应用程序的超链接 对于网络应用程序来说 这似乎是相当常见的模式 但我遇到
  • 如何提高 Guice 启动时的性能

    好吧 我知道我的计算不客观等等 但无论如何 我讨厌在执行单元测试时等待这么多时间 我的 guice swing 应用程序需要大约 7 秒来初始化 这是一个简单的 IRC 客户端 在那一刻 没有打开连接 我什至还没有调用任何 java io
  • 在 Java 和 PHP 之间加密/解密字符串

    我使用 AES 加密来加密和解密服务器端的 php 和 Android 应用程序 作为客户端 之间的字符串 PHP 中的加密字符串为 HaxRKnMxT24kCJWUXaVvqDHahzurJQK sYA4lIHql U 在 Java 中是
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • JFreeChart MeterPlot

    我目前正在用java做Agent项目 在某些时候 我需要显示一个仪表 例如 电池电量 我的程序中有 5 个代理 每个代理都会创建自己的带有名称的仪表图 但不知何故他们没有更新数据集 或者他们正在更新数据集 只是它没有显示在仪表图上 任何想法
  • 为什么我的容器化 Selenium 应用程序仅在 AWS Lambda 中失败?

    我正在尝试让一个函数在使用 Selenium 和 Firefox 的 AWS Lambda 中运行geckodriver为了运行 我决定采用创建容器映像 然后上传并运行该映像的方式 而不是使用预先配置的运行时 我能够创建一个正确安装 Fir
  • 在java中设置Process对象的安全性

    有人可以告诉我如何限制通过进程对象访问系统属性吗 如果我通过进程对象运行以下代码 我可以抛出安全异常吗 System getProperty user home 请告诉我如何为流程对象配置证券 在ProcessBuilder类文档中 环境方
  • 无法运行简单的 doclet 程序:包 com.sun.javadoc 不存在

    我正在尝试运行一个简单的 doclet 程序 但无法编译它 javac cp cygdrive c Progra 2 Java jdk1 8 0 65 lib tools jar A java 但它抛出 A java 1 错误 包 com
  • 当相应的 JTextfield 为空时,如何填充 JTable 中的所有项目

    我正在 Java 项目中设计一个高级搜索选项sqlite在 NetBeans 中 有5种不同JTextfields和 5 列 我想填充JTable具有相应的匹配标准 如果一个JTextfield为空 那么它应该选择该列的所有项目 我使用的查
  • Google OR-Tools:无法运行 java 示例,java.lang.UnsatisfiedLinkError:java.library.path 中没有 jniortools

    我是java新手 我想尝试google or tools来解决车辆路由问题 只是尝试运行 java 示例here https developers google com optimization introduction run progr
  • java.lang.NoClassDefFoundError:com.google.ads.AdView

    我正在尝试将 admob 广告合并到我的应用程序中 到目前为止我已经添加了以下代码 在我的应用程序主要活动的 onCreate 方法中 adView new AdView this AdSize BANNER my code number
  • SAXParseException:找不到元素“定义”的声明

    我对 camunda 和 DMN 完全陌生 我试图在 spring boot 中运行 DMN 示例 链接在这里 https github com camunda camunda bpm examples tree master dmn en
  • 跳过一行GridBagLayout

    我在 JFrame 上使用 GridBagLayout 我希望能够跳过一两行 但将这些行显示为空白 然后在这些行后面有一个按钮 我在文档中找不到任何方法来执行我所描述的操作 有谁知道我可以执行此操作的任何方法吗 发现它比添加空组件干净得多
  • 1° 夏令时 Java 和 JS 表现出不同的行为

    假设巴西利亚 GMT 0300 夏令时于 21 10 2012 00 00 00 此时时钟应提前一小时 Java new Date 2012 1900 9 21 0 0 0 Sun Oct 21 01 00 00 BRST 2012 Chr
  • gwt - 在 RPC 调用中使用 List

    我有一个 RPC 服务 方法如下 public List

随机推荐

  • jQuery Mobile 默认选项卡

    我想在 jQuery Mobile 中设置默认选项卡 我的源代码 div div ul li a href one one a li li a href two two a li li a href ajax content html th
  • 将 bash 脚本添加到路径

    我想向 linux PATH 添加一个小脚本 这样我就不必在磁盘上物理放置的位置实际运行它 该脚本非常简单 就是通过代理提供 apt get 访问权限 我这样做是这样的 bin bash array len array args array
  • JQuery Datepicker 返回 Date 对象类型

    Datepicker返回的对象类型是什么 假设我有以下内容 txtbox datepicker onClose function date something What is date 我有兴趣从另一个日期选择器读取日期对象进行比较 例如
  • Wix 安装、服务器、客户端或两者

    我想创建 Wix 安装程序来安装 Client Server或两者都基于用户选择 我的问题是当用户选择服务器时如何限制安装客户端 它被安装 因为它的级别 1 我已经定制了WixUI Mondo 我尝试使用组件条件但没有成功
  • 任何 iPhone 应用程序使用的内存

    关于iOS内存管理 我有一些不明白的地方 我想知道 iPhone 应用程序在设备上运行时通常需要多少内存 是否有像 10MB 这样的固定数字 如果应用程序包含大量大图像 对内存有何影响 它们仅在加载时影响内存吗 当有多个应用程序运行时 iO
  • WebBrowser 控件报告什么 UserAgent?

    只是想知道 VB NET 在访问网页时读取的浏览器类型是什么 例如 在我的网站上 它显示了访问我的网站的所有不同浏览器的详细信息 您没有为您的问题提供太多背景信息 但我认为您正在谈论用户代理字符串当您使用时发送的WebBrowser con
  • 使用路径变量在 golang 中调用 GET REST API

    我是第一次尝试Golang 我正在尝试调用具有路径变量的 GET REST API 我正在使用 net http 我正在尝试如下所示 但到目前为止还没有运气 我需要知道如何使用路径变量并从代码中传递该变量 任何帮助或代码示例将不胜感激 这似
  • SQL Server - 重叠数据的累积总和 - 获取总和达到给定值的日期

    在我们公司 我们的客户执行我们在不同表中记录的各种活动 面试出勤 课程出勤和其他一般活动 我有一个数据库视图 它将所有这些表中的数据结合在一起 为我们提供了如下所示的 ActivityView 正如您所看到的 一些活动是重叠的 例如 在参加
  • 生成 1D 张量作为 2D 张量的行的唯一索引

    假设我们通过为每个不同的行提供不同的索引来将 2D 张量转换为 1D 张量 从0 to the number of rows 1 1 2 1 3 1 4 gt 0 1 2 但如果有相同的行 那么我们重复索引 如下所示 1 2 1 2 1 4
  • 将自定义小部件添加到 QTableWidget 单元格

    我有使用 qt 设计器制作的自定义小部件 我想将其添加到 QTableWidget 单元格中 但这不起作用 这是代码 int nRows 10 for int row 0 row lt nRows row QTableWidgetItem
  • 使用sscanf多次读取字符串

    我正在尝试读取多维数组内字符串的内容 问题是 当我这样做时 sscanf 继续仅读取第一个字符 我的绳子上有这个 A1 A2 A3 A4 我想读取 c d 如果只是 A1 我可以读取这个 但是当这种情况发生时 它只读取 A1 我这样做是为了
  • global-variable-exists 在 Sass 中触发错误

    我正在使用类似三元的语句来初始化 Sass 中的变量 这允许我将一些默认变量设置为 Zurb Foundation 正在使用的相同变量 但如果我决定不包含 Foundation 模块 那么事情就不应该落在他们头上 nav link icon
  • 如何用 Python 解释 JavaScript

    可以用Python运行JavaScript吗 有任何库可以实现这一点吗 我需要执行一些 JavaScript 我知道这对于某些 Java 库是可能的 但我更喜欢 Python 有人可以给我一个线索吗 此致 你可以检查蜘蛛猴
  • 有没有一种方法可以在不使用 IIS 的情况下使用 WCF 自定义友好 URL?

    有没有一种方法可以在不使用 IIS 的情况下使用 WCF 自定义友好 URL 特别是 我希望通过我自己的 Windows 服务中托管的 app config 执行类似的操作 WebGet UriTemplate foo id public
  • JSF Eclipse 设计器

    是否有任何 Eclipse 插件可以让我像 Visual Studio 一样在网页上拖放 JSF 组件 这样我就不用写了
  • 是否可以反序列化 Avro 消息(使用来自 Kafka 的消息)而不在 ConfluenceRegistryAvroDeserializationSchema 中提供 Reader 模式

    我在 Apache Flink 中使用 Kafka Connector 来访问由汇流卡夫卡 除了 schema 注册表 url 之外ConfluentRegistryAvroDeserializationSchema forGeneric
  • 动态打开Javascript中定义的radwindow

    客观的 从服务器端 我需要在 IF 条件下自动打开一个 radwindow 在 aspx 页面的 JavaScript 中定义 使用的代码 在 aspx 页面中 我将 radwindow 定义为
  • 在 dplyr 中使用动态位置数创建滞后/超前变量

    我正在寻找一种方法来生成从具有动态位置数的滞后列派生的列 参数n 这意味着这个新列应该作为参数n存储在另一列中的值 参见lag文档功能 样本数据 set seed 42 df lt as tibble data frame id c rep
  • ARM 存储寄存器

    在ARM中有一个Banked Register的概念 在阅读许多问题及其答案以及有关什么的各种其他资源时Banked意思是这里 然后我得到了这个定义 登记银行业务是指在同一地址提供登记册的多份副本 并非所有寄存器都能立即看到 但我在这里的疑
  • Java Selenium - ExpectedCopnditions 存在通过但可见性失败

    我不明白 我已经寻找答案两天了 但我找不到解决这个问题的单一解决方案 代码如下所示 在 try catch 块内 Presence new WebDriverWait Driver custTimeout Presence until Ex