0

我对 Selenium 很陌生,所以这个问题可能很愚蠢,但我无法解决它......

我正在尝试使用 Selenium(在 Java 中,使用 Eclipse 和 Firefox 和 Chrome 驱动程序)在屏幕上肯定显示和可见的元素上进行 click(),但是false当我在其上应用该isDisplayed()方法时会返回。所以我得到一个异常,告诉我元素必须可见才能对其执行操作。

我检查了所有父母 div(我没有在我的页面中使用任何 iframe),其中一些返回true为其他返回 false。这是我尝试做的代码的一个小例子:

<div id=1><div id=2><div id=3><div id=4><img that i want to click on with selenium\></div></div></div></div>

我想用 selenium 点击 img,但它认为它没有显示。

  • img 被标记为未显示
  • div4 被标记为不显示
  • div3 被标记为由 selenium 显示
  • div2 被标记为不显示
  • div1 被标记为显示,因为所有父母 div

但我绝对可以在我的屏幕上看到同一个 div 中的图像和其他元素。

在那一点上有什么帮助吗?谢谢 !

编辑:我使用 JS 来修改这些属性,特别是 div 3,它在加载时不显示并标记为不显示,但是经过几次操作后,它变成了(它是并且被标记为)显示。

编辑 2:我发现标记为不被 selenium 显示的两个 div 的样式都具有两种样式display:block;(在 chrome 开发工具中看到)。有任何想法吗 ?

Edit3:根据评论中给出的链接,我添加了 div 的计算样式:

  • div4 :它的高度和宽度不为零,显示设置在块上。它甚至有最小宽度和最小高度。
  • div3 :它的高度和宽度不为零,显示也设置在块上
  • div2:它有一个 0 高度和一个非零宽度和一个 display:block;所以这可能是问题所在。
  • div1 : 高度为 0,非 sero 宽度,无显示参数,隐藏溢出-x 和 y。认为这个被 Selenium 标记为 deisplayed ......

有任何想法吗 ?

4

1 回答 1

0

我设法用一个简单的技巧解决了我的问题:调用应该由点击触发的 Js 函数,使用

JavascriptExecutor js; 
if (driver instanceof JavascriptExecutor) {
    js = (JavascriptExecutor) driver;
} else {
    throw new Exception("  Webdriver do not manage JS");
}
js.executeScript("function()");

另一个可能合适的解决方案是使用机器人使用鼠标点击这个img,如果你当然有它的坐标(或者如果你可以计算它):

Robot robot = new Robot();
robot.mouseMove(300, 300);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);

虽然我没有找到显示/未显示问题的解决方案。享受 :)

于 2013-06-05T13:37:23.383 回答