gpt4 book ai didi

java - 如何使用 Selenium 3 定位 ZK DOM 节点?

转载 作者:行者123 更新时间:2023-12-02 09:29:47 29 4
gpt4 key购买 nike

使用 ZK 时,我有开发 ID (id="foo")。如何使用 Selenium 3 获取它的 DOM 节点?

最佳答案

这涉及几个步骤。首先,您需要使用客户端 JavaScript 定位 DOM 节点。 ZK提供功能window.jq()为了那个原因。此函数使您可以访问 jQuery 实例(请参阅 https://www.zkoss.org/wiki/ZK_Client-side_Reference/General_Control/Client-side_selection_of_elements_and_widgets )。

要区分 DOM 和 ZK ID,请使用 #$分别。

所以最终的 JavaScript 应该如下所示:

jq('$foo')

要运行此 JavaScript,请使用 driver.executeScript() 。您可能还想使用上下文(开发 ID 通常仅在 ZK 父元素中是唯一的)。

结果是一个 jQuery 集,例如 ChromeDriver 无法处理(您将收到 javascript error: circular reference 错误)。所以您需要调用toArray()根据结果​​将 jQuery 对象转换为具有纯 DOM 节点的数组。 ChromeDriver 知道如何将它们转换为 Java。剩下的就是从 JavaScript 返回这个数组。然后您将获得 List<WebElement>在 Java 方面。

我创建了一个By定位器:

public class ByZKId extends By {

private String id;
private WebElement context;

public ByZKId(String id) {
this.id = "$" + id;
}

public ByZKId(String id, WebElement context) {
this.id = "$" + id;
this.context = context;
}

@Override
public List<WebElement> findElements(SearchContext context) {
if (context == null) {
return executeJavaScript("return jq(arguments[0]).toArray();", id);
}

return executeJavaScript("return jq(arguments[0], arguments[1]).toArray();", id, this.context);
}

@Override
public String toString() {
return "ByZKId: [" + id + "]";
}
}

关于java - 如何使用 Selenium 3 定位 ZK DOM 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58080921/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com