У меня есть иерархия файлов HTML в древовидной структуре на веб-странице, как показано на рисунке.
Код HTML - это
<div class="rtMid rtSelected">
< span class="rtSp"/>
< img class="rtImg" alt="Automation" src="http://192.168.1.6/eprint_prod_3.8/images/StoreImages/close_folder.png"/>
< span class="rtIn" title="Automation">Automation (1)</span>
</div>
В Selenium WebDriver есть способ щелкнуть по ссылке Automation (1)
, ища только текст, который я не хочу использовать по причине XPath, это местоположение будет меняться, поэтому есть способ найти его по его тексту и нажать на Это.
XPath является мощным, вы считаете его ненадежным, вы не используете его правильно. Проведите некоторое время в учебном пособии XPath.
Это простое решение вашего вопроса, но может быть много другого, о чем вам нужно подумать. Например, соответствие названия и текста и т.д.
driver.findElement(By.xpath(".//span[text()='Automation (1)']")).click();
Селектор CSS также мощный и быстрый, более читаемый, чем XPath. Но в вашем случае он не поддерживает поиск по тексту.
2 подхода
Подход 1:
По названию класса:
Здесь у нас есть имя класса для автоматизации текста (1), которое является rtIn. Выполните driver.findElement(By.className("rtIn")). Click();
Подход 2:
Селектором CSS родительского имени и класса
Селектор CSS родителя:.rtSelected
WebElement element1 = driver.findElement(By.cssSelector(". RtSelected")) element1.className("rtIn"). Click();
Подход 3:
Прямым селектором CSS: 1..rtIn 2..rtSelected>.rtIn
Лучше использовать второй CSS-селектор
driver.findElement(By.cssSelector(". rtSelected>.rtIn")). click();
поиск по названию работал хорошо
driver.findElement(By.xpath("//span[contains(@title,'Automation')]")).click();