gpt4 book ai didi

java - 如何获取当前网页元素的定位器?

转载 作者:行者123 更新时间:2023-12-01 19:31:37 25 4
gpt4 key购买 nike

要求是获取当前网页元素的定位器(By)。

对于我的项目,我正在实现自定义元素。因此,对于 HTML 选择元素,将有一个 SelectElement 类,对于 HTML 选项元素,将有一个 OptionElement 类。

为了实现自定义元素,我使用 CustomWebElement此存储库中的类:https://github.com/JulHorn/java_selenium_custom_elements

我想检索selectElementInstance.getOptions()应该返回 List<OptionElement>而不是List<WebElement> .

这就是我正在尝试做的事情:

1) 我得到 List<WebElement>使用findElements(...)方法。

2)在此列表中,我将逐个迭代元素。

3) 任意 WebElement我明白了,我想检索此元素的 By 实例。

4) 有了 By 实例,并且 WebDriver实例已经存在,我可以使用构造函数 super(WebDriver driver, By by) 创建自定义元素.

下面我给出了我的代码示例:

List<WebElement> myList = driver.findElement(By.xpath("//select[@id ='abcd']/*"));
ListIterator<WebElement> simpleChildIterator = myList.listIterator();
List<OptionElement> options = new ArrayList<OptionElement>();
while(simpleChildIterator.hasNext())
{
By l = simpleChildIterator.next().getBy();//I want locator for same element
//Here I can now create Instance of OptionElement to add to List<OptionElement>
OptionElement o = new OptionElement(driver, l);
options.add(o);
}

请注意,当我使用OptionElement extends CustomWebElement时页面对象中的实现符合 PageFactory ,以下内容对我来说绝对没问题。

@findBy(xpath = "//select[@id ='abcd']/*")
List<OptionElement> options;

但这之所以有效,是因为 PageFactory 的魔力通过其 initElements() 参与进来。称呼。

当我愿意定义一个新方法时,我希望在没有 PageFactory 参与的情况下也能同样工作 List<OptionElement> getOptions()在我的SelectElement上类。

既然我已经做了多次编辑,我希望问题已经清楚了。

感谢 @Muzzamil 建议 WebDriver 应该是单例的。我已将其从我的问题中删除。还要感谢@Pranav 用 select 和 option 元素举例说明了我的问题。这是一个更好解释的例子。

最佳答案

所以基本上你需要 webElement 中的 By 元素。你可以试试这个:

private By getByFromElement(WebElement element) {

By by = null;
String[] selectorWithValue= (element.toString().split("->")[1].replaceFirst("(?s)(.*)\\]", "$1" + "")).split(":");

String selector = selectorWithValue[0].trim();
String value = selectorWithValue[1].trim();

switch (selector) {
case "id":
by = By.id(value);
break;
case "className":
by = By.className(value);
break;
case "tagName":
by = By.tagName(value);
break;
case "xpath":
by = By.xpath(value);
break;
case "cssSelector":
by = By.cssSelector(value);
break;
case "linkText":
by = By.linkText(value);
break;
case "name":
by = By.name(value);
break;
case "partialLinkText":
by = By.partialLinkText(value);
break;
default:
throw new IllegalStateException("locator : " + selector + " not found!!!");
}
return by;
}

关于java - 如何获取当前网页元素的定位器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59661690/

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