gpt4 book ai didi

java - 获取已找到的 WebElement 的 By 定位器

转载 作者:IT老高 更新时间:2023-10-28 20:54:29 27 4
gpt4 key购买 nike

有没有一种优雅的方式来获取我已经找到/识别的 Selenium WebElement 的 By 定位器?

要明确这个问题:我希望使用“按定位器”来查找元素。在这种情况下,我对特定属性或特定定位器(如 css-locator)感兴趣。

我知道我可以解析 WebElement 的 toString() 方法的结果:

WebElement element = driver.findElement(By.id("myPreciousElement"));
System.out.println(element.toString());

输出例如:

[[FirefoxDriver: firefox on WINDOWS (....)] -> id: myPreciousElement]

如果你通过 xpath 找到了你的元素:

WebElement element = driver.findElement(By.xpath("//div[@someId = 'someValue']"));
System.out.println(element.toString());

那么你的输出将是:

[[FirefoxDriver: firefox on WINDOWS (....)] -> xpath: //div[@someId = 'someValue']]

所以我目前编写了自己的方法来解析此输出并为我提供“重新创建”的 By 定位器。


但是是否已经在 Selenium 中实现了一种更优雅的方法来获取用于查找元素的 By 定位器?

到目前为止我找不到。< p>

如果您确定没有开箱即用的功能,您能想到 API 创建者可能不提供此功能的任何原因吗?



*尽管这与问题无关,但如果有人想知道您为什么需要此功能,仅举两个例子:

  • 如果您使用 PageFactory,您很可能不会将定位器作为 Page 类中的成员变量,但您稍后在处理页面元素时可能需要它们。
  • 您使用的 API 是那些只使用没有 PageFactory 的页面对象模式的人,因此希望您交出定位器而不是元素本身。*

最佳答案

tldr;不是默认的,没有。您不能从以前找到的 WebElement 中提取 By。但是,可以通过自定义解决方案来实现。

可以实现自定义解决方案,但 Selenium 不提供这种开箱即用的功能。

考虑以下关于“为什么”..

By by = By.id("someId");
WebElement e = driver.findElement(by);

你已经有了 By 对象,所以你不需要调用像 e.getBy()

这样的东西

关于java - 获取已找到的 WebElement 的 By 定位器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31676964/

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