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

通过Selenium中的Java交互API移动到不透明度为0的WebElement

刘意
2023-03-14

考虑以下

<select id="invisi_select" style="opacity:0;">
    <option selected value="apples">Apples</option>
    <option value="oranges">Oranges</option>
</select>

它用于模拟id显示的不可见元素,通过将opacity设置为0来实现。

虽然元素不可见,但用户实际上可以与它进行交互。如果我在浏览器中打开页面并单击元素的位置,选择菜单就会打开。我相信这也是为什么WebElement#isDisplayed()会为这个元素返回true,这也是这些旧问题的建议:

  • https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/1610
  • https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/1941

为了执行诸如点击之类的操作,我们最近出于几个原因切换到Java interactions API,例如,为了防止ElementClickInterceptedExceptions(请注意,这不是关于重构一系列Selenium测试,这是在Selenium API之上运行的通用操作执行器的上下文中发生的)然而,如果我这样做:

WebElement applesOption = /* get apples option */
new Actions(webDriver).moveToElement(applesOption)
        .click()
        .perform();

移动到元素会引发以下异常:

org.openqa.selenium.JavascriptException: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.

我猜这是因为通过WebDriver Actions API的elementsFromPoint()似乎为这样的透明元素返回了一个“非有限”的双精度?

有没有办法在使用Actions时防止这种情况发生?也许,除了检查元素是否可单击(预期条件#elementToBeClickable(...)),我还必须解析-这听起来很可怕-属性,如不透明度


共有2个答案

孙胜泫
2023-03-14

此错误消息。。。

org.openqa.selenium.JavascriptException: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.

...意味着WebDriver实例由于一个或其他原因无法专注于元素:

  • 当您尝试与元素交互时,它没有正确加载。
  • 元素没有得到焦点。

不使用Java交互API,您可以使用Select类,也可以使用以下任一定位器策略:

>

Select s = new Select(driver.findElement(By.cssSelector("select#invisi_select")));
s.selectByValue("apples");

使用xpathselectByVisibleText()

Select s = new Select(driver.findElement(By.xpath("//select[@id='invisi_select']")));
s.selectByVisibleText("Apples");

你可以在以下网站上找到一些相关的详细讨论:

  • javascript错误:未能在“文档”上执行“elementsFromPoint”:提供的双精度值是非有限的
阎星华
2023-03-14

我刚刚在本地尝试了您的示例文件,下面的代码正常工作。

WebElement e = driver.findElement(By.id("invisi_select"));
Select select = new Select(e);
select.selectByValue("apples");
System.out.println(select.getFirstSelectedOption().getText());
select.selectByValue("oranges");
System.out.println(select.getFirstSelectedOption().getText());

它会打印

Apples
Oranges
 类似资料:
  • 问题内容: .item:hover { zoom: 1; filter: alpha(opacity=50); opacity: 0.5; -webkit-transition: opacity .15s ease-in-out; -moz-transition: opacity .15s ease-in-out; -ms-transition: opacity .15s ease-in-out;

  • 我正在尝试创建一个角度的小小吃栏,它将一个数组作为输入并显示每个通知几秒钟,然后从堆栈中弹出并显示下一个通知。 我希望在这些通知之间有一个不透明度转换。 过渡属性似乎不起作用 这是堆栈闪电战链接 更多信息: < li >应用程序组件有一个按钮,每次单击都会生成一个通知 < li>snackbar组件显示3秒钟的通知,然后删除它并切换到下一个。 < li>snackbar容器用0 opacity()

  • 我正在寻找将Python连接到交互式代理应用编程接口。谷歌搜索显示了ibPy的可用性(见https://pypi.python.org/pypi/ib),但是这个库似乎没有得到维护,也不支持Python 3。我还发现https://github.com/colin1alexander/IbPython3但是这个项目已经被取消了。 我知道Quantopian使用交互式代理作为其执行代理,但有一个用于

  • 问题内容: 故事: 像Google ReCaptcha一样,解决验证码的方法之一就是尝试 模仿人的鼠标动作 :移动,悬停和点击。 一些用户报告说,随着B样条曲线的作用而使鼠标移动。 问题: 如何通过selenium将鼠标移动到遵循B样条轨迹的特定元素上? 请注意,常规会直接且太快地“跳转”到元素。我的理解是,这是放慢移动速度的问题,它遵循B样条轨迹的数学模型从点到点平滑地“跳跃”。 我们正在使用量

  • 问题内容: 假设我要使JPanel%20的不透明度可见。我的意思不是setOpaque(绘制或不绘制)或setVisible(显示或隐藏)…我的意思是使其透明JPanel ..您知道吗? 这可能吗? 问题答案: 您还应该查看具有透明度的背景,以了解使用此功能时可能遇到的任何绘画问题。

  • 问题内容: 我已经实现了[waypoints][1]插件,当对象的像素高于100px时,该对象就会褪色。[使用offet属性],但希望基本上控制对象的不透明度并使动画可见,如上面的示例。 我已经搜寻了全部-这是我的最后选择。任何帮助是极大的赞赏。 问题答案: 我在这里复制粘贴基本代码