Итерация в списке продуктов из нескольких страниц с селеном 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 ответ
Решение
Основная логика будет:
- Перейти на первую страницу списка продуктов.
- Возьмите все ссылки на товары. Перейдите на каждую страницу продукта и делайте вещи.
- Вернитесь на страницу со списком товаров и нажмите "Далее".
Вы будете повторять 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