Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

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

java
testng
selenium
webdriver
Теги: #<Tag:0x00007fedbc725db0> #<Tag:0x00007fedbc725c70> #<Tag:0x00007fedbc725b08> #<Tag:0x00007fedbc7259c8>

(Сергей Губа) #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 Спасибо большое, все получилось