【问题标题】:writng javascript in selenium在 selenium 中编写 javascript
【发布时间】:2025-12-21 19:05:16
【问题描述】:

我正在用 selenium 编写一个 javascript,但它不起作用....这是我的代码

FluentJavascript variable = executeScript("return arguments[0].getBoundingClientRect();", element); // to get x, y, width and height of element

有什么建议吗?

【问题讨论】:

  • 你遇到了什么错误?
  • @john 它没有被编译
  • 好的,什么不能编译?另外,我看不出那行代码是如何相关的。除非,比如说,您还没有导入 FluentJavascript,因此编译器不知道如何处理它,或者 executeScript 可能有不同的签名。或者,element 永远不会被初始化。这纯粹是猜测,但编译器应该非常明确地告诉你,如果是这种情况。 JS 肯定与它无关。
  • @mmmm 编译错误总是有原因的,检查它的消息/堆栈跟踪。
  • 请粘贴编译错误信息。

标签: javascript java selenium


【解决方案1】:

我倾向于发现 executeScript 更容易:

    ((JavascriptExecutor)driver).executeScript("return arguments[0].getBoundingClientRect();", element); 

并确保元素确实存在。

【讨论】:

  • 据我们所知,OP 示例中的executeScript 实际上最终可能只是调用它。我们仍然不确切知道他的错误是什么,因此不知道您的替换线是否可以正常工作。
【解决方案2】:

如果您尝试检索元素的大小及其相对于Viewport 的位置,您可以调用getBoundingClientRect() 方法,如下所示:

  • 通过Java,您可以使用Dimension 类并调用getBoundingClientRect(),如下所示:

    JavascriptExecutor js = (JavascriptExecutor) driver;  
    WebElement element = driver.findElement(By.xpath("element_xpath"));
    Dimension mydimension =  (Dimension) js.executeScript("return arguments[0].getBoundingClientRect();", element);
    
  • 通过 Javascript 你可以调用getBoundingClientRect() 如下:

    var rect = document.getElementById("myElement").getBoundingClientRect();
    

    此行将返回包含整个元素的最小矩形 left, top, right, bottomxywidthheight 属性描述了整个边框框(以像素为单位)。

注意widthheight以外的属性都是相对于视口的左上角的。

【讨论】:

  • 但我想在 java 上下文中编写它(硒是重点)