Итерация в списке продуктов из нескольких страниц с селеном Java

Мне нужно пройти через список продуктов:

  • нажмите здесь
  • выполнить некоторые действия на странице продукта (эти действия просты и уже сделаны)
  • вернуться к списку, в котором я уже был
  • повторить для всех продуктов этой страницы

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

Это проблема: когда она достигает 10 элементов текущей страницы, я не представляю, как перейти на другую страницу и начать все заново.

Пример кода HTML:

<!DOCTYPE html> 
<html lang="pt-br">
  <head>
    <title>Produtos</title>
    <meta charset="utf-8">
  </head>
  <body>
<div class="srp-actions blue-button"><a class="primary-action-button label" href="">Produto 1</a></div>
<div class="srp-actions blue-button"><a class="primary-action-button label" href="">Produto 2</a></div>
<div class="srp-actions blue-button"><a class="primary-action-button label" href="">Produto 3</a></div>
<div class="srp-actions blue-button"><a class="primary-action-button label" href="">Produto 4</a></div>

    <br/>

<div id="pagination">
        <ul class="pagination">
        <li class="active">1</li>
        <li class="link"><a class="page-link" href="" title="Página 2">2</a></li>
        <li class="link"><a class="page-link" href="" title="Página 2">3</a></li>
        <li class="link"><a class="page-link" href="" title="Página 2">4</a></li>
        <li class="next"><a class="page-link" href="" rel="next" title="Avançar">next</a></li>
        </ul>
</div>
</body>
</html>

Код Java:

int size = driver.findElements(By.className("page-link")).size();
    System.out.println("Numero de paginas : " + size);
    for(int j = 1 ; j < size ; j++) {                
        if (j < 2) {// we don't need to navigate to the first page
            driver.findElement(By.linkText("Avançar >")).click(); // navigate to page number j
        }           

        String pagesearch = driver.getCurrentUrl();


    for(int i=1;i< links.size();i++){

    links= driver.findElements(By.linkText("Produto"));

    WebDriverWait wait3 = new WebDriverWait(driver, 30);
    wait3.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.linkText("Produto")));

    links.get(i).click();

    Thread.sleep(2000); 

1 ответ

Решение

Основная логика будет:

  1. Перейти на первую страницу списка продуктов.
  2. Возьмите все ссылки на товары. Перейдите на каждую страницу продукта и делайте вещи.
  3. Вернитесь на страницу со списком товаров и нажмите "Далее".

Вы будете повторять 2 и 3, пока не будет следующей ссылки.

String url = "http://www.example.com"; // the first page of the product list page
driver.get(url);
List<WebElement> next;
while (true)
{
    // wait for and get all the product links
    WebDriverWait wait = new WebDriverWait(driver, 10);
    List<WebElement> productLinks = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.linkText("Produto")));
    // loop through the product links
    for (WebElement productLink : productLinks)
    {
        driver.get(productLink.getAttribute("href")); // navigate to product page
        // do stuff on product page
    }

    // now we're done with all products on this page, go back to the product list page that we were last on
    driver.get(url);

    // look for a Next link
    next = driver.findElements(By.cssSelector("li.next"));
    if (next.isEmpty())
    {
        // Next link DOES NOT exist, exit loop
        break;
    }

    // Next link DOES exists, click it to go to the next page
    next.get(0).click();
    // may need to wait for page transition here
    url = driver.getCurrentUrl(); // store the current product list page
Другие вопросы по тегам