Selenium WebDriver доступ к подэлементу - PullRequest
5 голосов
/ 12 января 2012

У меня есть div с уникальным идентификатором. Под этим div находится группа span элементов, которые имеют className=foo. Есть несколько span элементов с className=foo, но они уникальны для каждого div (если это понятно). Таким образом, мой код Selenium сначала получает уникальный div в качестве веб-элемента, затем пытается взять этот элемент и получить по имени класса span примерно так

element = sDriver.findElement(By.id("c_"+cID)); 
String sTest = element.findElement(By.className("actions")).getText();

Во второй строке каждый раз выдается исключение

org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
Command duration or timeout: 22 milliseconds

Не понимаю ли я, как получить это span из-под уникального div?

Ответы [ 2 ]

7 голосов
/ 12 января 2012

Нет, у вас есть доступ к диапазону, но проблема в том, что Dom изменился, поскольку StaleReferenceException примерно равен (см. StaleReferenceException )

Это может быть вызвано тем, что страница не загруженаполностью, когда код запускается или изменяется, когда код выполняется.Вы можете попытаться немного подождать элемент или перехватить исключение StaleReferenceException и попытаться снова найти div и span.

1 голос
/ 02 декабря 2013

Мое решение не изящное, но оно работает как швейцарские часы (в моей ситуации, конечно). Поэтому мой код вызывает родительский элемент в цикле и ищет в нем различные дочерние элементы. Ничего не изменилось - только простые запросы и исключение стало происходить. Так! Я добавил команду Thread.Sleep (2000) перед каждым поиском родительского элемента, и это решило проблему. Не элегантно, но работает каждый раз с минимальным кодом для последующей отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...