#java #selenium #xpath
#java #selenium #xpath
Вопрос:
Я пытаюсь автоматизировать пару сценариев Selenium с этого веб-сайта
я пытался щелкнуть ссылку «категории», указав приведенный ниже XPATH
//a[contains(text(), 'CATEGORIES')]/@href
Я получаю InvalidSelector
ошибку. Не могли бы вы, пожалуйста, предложить альтернативный XPATH для этого?
Ответ №1:
Просто для справки:
<ul>
<li><a href="index.php">HOME</a></li>
<li><a href="catlist.php">CATEGORIES</a></li>
<li><a href="brands.php">BRANDS</a></li>
<li><a href="products.php">PRODUCTS</a></li>
<li><a href="cart.php">MY CART</a></li>
<li><a href="tracking.php">TRACKING</a></li>
<li><a href="customerlogin.php">ACCOUNT</a>
</li>
<li><a href="faq.php">FAQ'S</a></li>
<li><a href="aboutus.php">ABOUT US</a></li>
</ul>
Альтернативный способ с использованием linktext:
=> По.linkText(«КАТЕГОРИИ»)
driver.findElement(By.linkText("CATEGORIES")).click();
Комментарии:
1. linkText(«») не всегда работает. В этом случае это может сработать.
2. @kajal kundu: Всегда ли это работает с помощью.xpath(«//a[содержит(text(), ‘CATEGORIES’)]»))??
Ответ №2:
Используйте класс action, чтобы щелкнуть по элементу.
Actions action=new Actions(driver);
action.moveToElement(driver.findElement(By.xpath("//a[contains(text(), 'CATEGORIES')]"))).click().build().perform();
Пожалуйста, обратите внимание: используйте следующий импорт.
import org.openqa.selenium.interactions.Actions;
Комментарии:
1. Существует проблема с этим ответом: когда набор узлов из
text()
теста узла передается в качестве аргумента дляcontains
функции, он будет приведенstring
функцией. Короче говоря, вы бы тестировали только первый текстовый узел. Правильное выражение должно быть//a[contains(.,'CATEGORIES')]
2. @Alejandro: полностью согласен.
Ответ №3:
Раздел «КАТЕГОРИИ» на странице, которую вы пытаетесь автоматизировать, хранится в виде текста в структуре html, поэтому вы можете найти его, используя приведенный ниже xpath, который находит его, сопоставляя его текст:
WebElement categoriesSection = driver.findElement(By.xpath("//a[text()='CATEGORIES']"));
Комментарии:
1. почему вы изменили свой ответ?
2. Поскольку на странице было две категории, и сначала я написал xpath для других категорий, затем я обнаружил, что OP запрашивает категории с тегом привязки, поэтому я отредактировал свой xpath.
3. Сначала прочитайте вопрос, что ищет OP. Просто давать ответ — не лучшая практика.
4. OP упомянул категории, и если вы проверите веб-страницу, на странице есть две категории, поэтому я запутался, и именно поэтому я впоследствии изменил свой xpath, и если вы увидите историю редактирования, логика, которую я использовал, одинакова для обеих. Однако да, я постараюсь, чтобы этого не произошло в будущем.
5. Я проверил. Другой элемент — текстовое поле теперь скажите мне, как щелкнуть текстовое поле. Упомянутый OP хочет щелкнуть по привязке, а не по текстовому полю. Вот почему я сказал сначала прочитать.