当前位置: 首页 > 面试题库 >

selenium视口中元素的验证

韩弘壮
2023-03-14
问题内容

如何使用selenium验证元素是否在视口中可见(浏览器的可见性)?

我尝试使用下面的代码,但是Point对象(Y值)由于页面可滚动而返回巨大的值。这是获取元素尺寸,浏览器的位置和尺寸并进行比较。

Dimension weD = element.getSize(); //to get the element Dimensions
Point weP = element.getLocation(); // getting the location of the element in the page.

Dimension d = driver.manage().window().getSize(); // To get the browser dimensions
int x = d.getWidth(); //browser width
int y = d.getHeight(); //browser height
int x2 = weD.getWidth() + ewp.getX();
int y2 = weD.getHeight() + ewp.getY();
return x2 <= x && y2 <= y;

如果有人为此工作,请您分享解决方案?


问题答案:

无法直接通过API进行操作,因此您必须使用脚本注入。

确定元素在视口中是否可见的最佳方法是使用document.elementFromPoint将元素放置在假定的位置。如果它不在视口和您的元素中,则返回null;如果它不在其子元素中,则返回null。

public static Boolean isVisibleInViewport(WebElement element) {
  WebDriver driver = ((RemoteWebElement)element).getWrappedDriver();

  return (Boolean)((JavascriptExecutor)driver).executeScript(
      "var elem = arguments[0],                 " +
      "  box = elem.getBoundingClientRect(),    " +
      "  cx = box.left + box.width / 2,         " +
      "  cy = box.top + box.height / 2,         " +
      "  e = document.elementFromPoint(cx, cy); " +
      "for (; e; e = e.parentElement) {         " +
      "  if (e === elem)                        " +
      "    return true;                         " +
      "}                                        " +
      "return false;                            "
      , element);
}


 类似资料:
  • 问题内容: 在Selenium 2中,我要确保驱动程序已加载的页面上的元素不存在。我在这里包括了我的幼稚实现。 有没有一种更优雅的方法可以从根本上验证断言是否引发了NoSuchElementException? 问题答案: 如果您正在使用junit进行测试,而这只是您要进行的测试,则可以使测试使用来预期异常 或者,您可以使用返回元素列表的方法,如果找不到元素,则返回一个空列表(不抛出): 要么

  • 我正在尝试使用java和Eclipse学习Selenium。我试图找到网页中的一个元素。 我尝试使用这行代码单击一个html元素: 下图显示了页面的html结构:

  • 问题内容: 我可以验证列表中的一个元素,但是下拉菜单中有20个元素需要验证,我不想使用上述逻辑20次。有没有更简单的方法可以做到? 问题答案: 不要使用for-each构造。仅在对单个/数组进行迭代时有用。您需要同时遍历和数组。 OP稍微改变了他的问题后进行编辑: 假设您有一组期望值,则可以执行以下操作: 这段代码实质上完成了我的第一个代码。唯一的区别是,现在您手动进行工作并打印结果。 以前,我使

  • 问题内容: Selenium 1.x或2.x中是否可以滚动浏览器窗口,以使XPath标识的特定元素在浏览器的视野中?Selenium中有一个聚焦方法,但是在FireFox中似乎并没有实际滚动视图。有人对此有任何建议吗? 我需要这样做的原因是我正在测试页面上某个元素的点击。不幸的是,除非该元素可见,否则该事件似乎不起作用。我无法控制单击元素时触发的代码,因此无法调试或对其进行修改,因此,最简单的解决

  • 有人能帮我一下吗:检查元素代码是。 代码为:

  • 我在选择要在Selenium中读取的表时遇到了一个问题。 我有一个表,其中的'thead'中有两个'tr'元素,我需要找到一种方法来忽略其中的第一个元素。 以下是代码: 使用Selenium,我将要求它记录某一行和某列的值。然后查看我将给出的Table元素(希望使用在本例中可以使用的XPath),查看head,并记录每个列的header。在这种情况下,我正在努力,在这个表的顶部有一个额外的'tr'