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

java
webdriver
selenium
testng
Теги: #<Tag:0x00007fedbbd85238> #<Tag:0x00007fedbbd85058> #<Tag:0x00007fedbbd84e78> #<Tag:0x00007fedbbd84928>

(Сергей Губа) #1

Суть задачи такая, хочу выполнить переход по ссылкам на странице результата гугл поиска.
Скрипт заходит на страницу гугла выполняет поиск по запросу “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


(Bolatbek) #2

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


(Сергей Губа) #3

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


(Bolatbek) #4

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();
}

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


(Сергей Кузьмин) #5

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


(Сергей Губа) #6

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