t.me/atinfo_chat Telegram группа по автоматизации тестирования

Переход по ссылкам на странице результата поиска

Теги: #<Tag:0x00007f7486c9f598> #<Tag:0x00007f7486c9f4d0> #<Tag:0x00007f7486c9f390> #<Tag:0x00007f7486c9f2c8>

Суть задачи такая, хочу выполнить переход по ссылкам на странице результата гугл поиска.
Скрипт заходит на страницу гугла выполняет поиск по запросу “test”, переходит на первую ссылку и возвращается на станицу результата поиска, а при попытке перейти на следующую страницу фэйлиться с ошибкой “element is not attached to the page document” .
почитал поискал, говорят нужно добавить ожидалку. Добавил, но все равно результат тот же
Подскажите пожалуйста где накосячил и что делаю не так
Код

@Test
public void MainTest() {
WebElement searchfield = driver.findElement(By.id(“lst-ib”));
searchfield.sendKeys(“test”);
searchfield.submit();

	List<WebElement> resultLinks = driver.findElements(By.xpath(".//*[@id='rso']//h3/a"));
	for (WebElement element : resultLinks) {

		new WebDriverWait(driver, 10)
				.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='rso']//h3/a")));

		element.click();

		driver.navigate().back();
	}

}

ошибка вот такая org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

Когда вы перешли по ссылке и вернулись - все ваши resultsLinks “потухли”.
Ищите их снова, перед тем как кликнуть, и кликайте по элементу по его индексу в массиве.

@Mes можешь подсказать как это реализовать в коде?

Java я не знаю.
Вот псевдокод

List<WebElement> resultLinks = driver.findElements(By.xpath(".//*[@id='rso']//h3/a"));
int resultLinksLength = resultLinks.length(); // знаем, сколько всего элементов на 1 странице

for (int i = 1; i <= resultLinksLength; i++) { // бежим по циклу
    new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='rso']//h3/a"))); 

    List<WebElement> resultLinks = driver.findElements(By.xpath(".//*[@id='rso']//h3/a")); // получаем снова список вебэлементов
    resultLinks[i].click(); // кликаем на нужный по индексу
    // что-то делаем
    driver.navigate().back();
}

Как-то так. Пишу с телефона.

1 Симпатия

или открывать новый таб по каждой из ссылок … just my two cents

@Mes Спасибо большое, все получилось