Selenium:isDisplayed返回

时间:2013-06-04 14:46:39

标签: exception selenium click

我对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 dev工具中可见)。有什么想法吗?

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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);

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