Есть ли элегантный способ получить локатор Selenium WebElement, который я уже нашел/идентифицировал?
Чтобы быть понятным в вопросе: я хочу, чтобы "By locator" использовался для поиска элемента. Я в этом случае не заинтересован в конкретном атрибуте или определенном локаторе, таком как css-locator.
Я знаю, что могу проанализировать результат метода WebElement toString():
WebElement element = driver.findElement(By.id("myPreciousElement"));
System.out.println(element.toString());
Выход был бы, например:
[[FirefoxDriver: firefox на WINDOWS (....)] → id: myPreciousElement]
если вы нашли свой элемент по xpath:
WebElement element = driver.findElement(By.xpath("//div[@someId = 'someValue']"));
System.out.println(element.toString());
Тогда ваш вывод будет:
[[FirefoxDriver: firefox на WINDOWS (....)] → xpath://div [@someId = 'someValue']]
Итак, в настоящее время я написал свой собственный метод, который анализирует этот результат и дает мне "воссозданный" по локатору.
НО есть ли более элегантный способ, уже реализованный в Selenium, чтобы получить локатор By, используемый для поиска элемента?
Я пока не смог найти его.Если вы уверены, что это не так, вы можете подумать о какой-либо причине, почему разработчики API могут не предоставлять эту функцию?
* Несмотря на то, что это не имеет никакого отношения к вопросу, если кто-то задается вопросом, почему вам понадобится эта функциональность, всего 2 примера:
- если вы используете PageFactory, скорее всего, не будете иметь локаторы как переменные-члены в вашем классе страницы, но вам может понадобиться их позже при работе с элементами страницы.
- вы работаете с API-интерфейсами людей, которые просто используют шаблон объекта страницы без PageFactory и, следовательно, ожидают, что вы передадите локаторы вместо самого элемента. *