有没有一种优雅的方法来获取我已经找到/识别的 Selenium WebElement 的定位器?
要明确这个问题:我想要用于查找元素的“按定位器”。在这种情况下,我对特定属性或特定定位器(如 css-locator) 不 感兴趣。
我知道我可以解析 WebElement 的 toString() 方法的结果:
WebElement element = driver.findElement(By.id("myPreciousElement"));
System.out.println(element.toString());
输出将是例如:
[[FirefoxDriver: WINDOWS 上的 firefox (….)] -> id: myPreciousElement]
如果你通过 xpath 找到你的元素:
WebElement element = driver.findElement(By.xpath("//div[@someId = 'someValue']"));
System.out.println(element.toString());
那么你的输出将是:
[[FirefoxDriver: WINDOWS 上的 firefox (….)] -> xpath: //div[@someId = ‘someValue’]]
因此,我目前编写了自己的方法来解析此输出并为我提供“重新创建”的定位器。
但是 是否已经在 Selenium 中实现了一种更优雅的方法来获取用于查找元素的 By 定位器?
到目前为止我找不到一个。
如果您确定没有开箱即用的功能,您能想到 API 创建者可能不提供此功能的任何原因吗?
*尽管这与问题无关,但如果有人想知道您为什么需要此功能,请举两个例子:
- 如果您使用 PageFactory,您很可能不会将定位器作为 Page 类中的成员变量,但稍后在处理页面元素时可能需要它们。
- 你正在与那些只使用没有 PageFactory 的页面对象模式的人的 API 一起工作,因此希望你交出定位器而不是元素本身。*
原文由 drkthng 发布,翻译遵循 CC BY-SA 4.0 许可协议
tldr;不是默认的,不。您不能从以前找到的 WebElement 中提取
By
。但是,可以通过自定义解决方案。可以实现自定义解决方案,但 Selenium 不提供这种开箱即用的解决方案。
考虑以下关于“为什么”的问题……
你已经有了
By
对象,所以你不需要调用类似e.getBy()