Как извлечь текст со страницы списка категорий товаров в виде Xpath и добавить его в список в Selenium Java - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь выбрать название каждого продукта на странице списка категорий следующим образом (например: https://www.prana.com/women/clothing/tops.html#page=1)

У меня есть цикл for, проходящий через Xpath, но он продолжает возвращатьсяошибка в том, что - «Xpath» - это [текст объекта], это должен быть элемент.Что правильно.Мой вопрос, как я могу получить текст?Я осмотрелся повсюду, но, похоже, не могу найти правильный ответ. Это то, что я имею сейчас.

List<WebElement> allElements = driver.findElements(By.xpath("//*[@id=\"root-wrapper\"]/div/div/div[3]/div/div[4]/div[2]/div[3]/ul/li[1]/a/h2/text()")); 
for(int i=0; i <allElements.size(); i++) {
   allElements = driver.findElements(By.xpath("//*[@id=\"root-wrapper\"]/div/div/div[3]/div/div[4]/div[2]/div[3]/ul/li["+i+"]/a/h2/text()")); 
}

System.out.println(Integer.toString(allElements.size()));
   for (WebElement element: allElements) {
      System.out.println((element).getText());

Поэтому я хочу, чтобы это продолжалось до тех пор, пока не останется больше этих «элементов» (текста), а затем перечислю их для меня.

Любая помощь будет принята с благодарностью.

Я видел нечто похожее с href здесь: итерация в списке продуктов на нескольких страницах с селеном Java

Я собираюсь посмотреть, смогу ли я реализовать это с

driver.findElements(By.className(".product-name *then enter a blank variable here*" );

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вы можете создать Список с нужными элементами, вызывающими WebDriverWait для видимости всех элементов и извлечь необходимый текст вцикл, и вы можете использовать следующее решение:

  • Блок кода:

    driver.get("https://global.prana.com/women/clothing/tops.html#page=1");
    List<WebElement> allElements = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//h2[@class='product-name']")));
    for (WebElement element: allElements)
          System.out.println((element).getText());
    
  • Консольный вывод:

    FILLARY TOP
    REMI WAFFLE PULLOVER
    SHEA WAFFLE HOODIE
    SHELTON TOP
    PRAIRIE GROVE SWEATER
    PERCY TOP
    CHARLEY TOP
    ASTER TUNIC
    ASTER TUNIC PLUS
    FOUNDATION TURTLENECK
    FOUNDATION V-NECK PLUS
    FOUNDATION WRAP
    COZY UP T-SHIRT
    FOUNDATION WRAP PLUS
    FOUNDATION LONG SLEEVE CREW
    FOUNDATION LONG SLEEVE TUNIC
    SEABORD LONG SLEEVE TOP
    SEABORD SHORT SLEEVE TOP
    FOUNDATION SHORT SLEEVE V-NECK
    BACALL TOP
    PUREST TANK
    AZUL TOP
    SHILOH TOP
    
0 голосов
/ 30 ноября 2018

text() в XPath используется для соответствия TextNode.Помимо TextNode в HTML есть ElementNode и AttributeNode.

Но для селена он может только найти / вернуть ElementNode, вы можете использовать отображаемый текст TextNode в XPath, чтобы он соответствовал желаемому ElementNode, но не можете попросить селен вернуть TextNode.

Поэтомуудалите text() в конце вашего xpath, затем вызовите getText() api WebElement, чтобы получить текст элемента.

...