Selenium не видит елементов на странице


(saddy666@gmail.com) #1

При прогоне тестов селениум как то через раз находит элементны.бывает что поменяю тип локатора и начинает находить а потом опять не находит.это как играть в рулетку =\

для ожидания прогрузки страницы пользую   driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

думаю не одна с этим сталкивалась.если есть какие то идеи или предложения в решении проблемы буду рада послушать


(Denis Veselovskiy) #2

ну для начала проверь что этот элемент вообще появляется
сделай что то наподобии

while (selenium.isElementPresent("tvou_element")) {

 тут ожидание в 1 сек ...

}

и смотриш - если он и за 30 сек не появится - значит его там нету
а если появится, тебе просто надо или сделать конструкцию на ожидание появления элемента или твой таймаут увеличить временно с 10 до 30 к примеру

 


(d3unka) #3

На абстрактном примере тяжело разробраться. Было бы отлично, если взглянуть на сам код. Потому что implicitlyWait должен ждать 10 секунд. Есть еще вариант ожидания через WebDriverWait объект.

{syntaxhighlighter brush: bash;fontsize: 100; first-line: 1; }WebDriver driver = new FirefoxDriver();
driver.get("http://somedomain/url_that_delays_loading");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(new ExpectedCondition<WebElement>(){
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("myDynamicElement"));
}});{/syntaxhighlighter}

 


(saddy666@gmail.com) #4

я абослютно уверена в наличии элемента на странице.говорю же что находит его через раз

то есть Firepath его находит и IDE его находит просто по клику на кнопку Find а на странице его нет??

я не понимаю что за нестабильность.раз нашел , раз не нашел.в одном тесте нашел в другом абсолютно аналогичном не нашел


(d3unka) #5

Попробуйте пройти тест в пошаговором режиме Debug и разобраться где именно проблема.


(saddy666@gmail.com) #6

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


(Mykhailo Poliarush) #7

я могу сказать, что в таком режиме, конечно тяжело чем-то помочь.

мои догадки будут такие, что приложение ведет себя по разному, в каких-то ситуациях, может быть на визуальном уровне не отличается, а вот на уровне кода, может отличаться.

можно попробовать тогда сохранять весь html при прогоне теста и сравнивать содержимое на наличии нужных елементов.


(d3unka) #8

Если бы вы могли прикрепить вырезки из кода, Так будет проще разобраться в чем проблема. У меня еще такое подозрение, что где-то не так сконфигурированы методы запуска тестов в setUp и останова в tearDown()


(ivanidzzza) #9

проблема решена? у меня сейчас точно такая же ситуация


(Taras) #10

Значит, во первих, все тести должни запускаться webDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

Во вторих, может елементи динамические и формируються каким то ajax-ом?

Мне помагает вот такое

 

WebDriverWait wait = new WebDriverWait(webDriver, 15);
wait.until(ExpectedConditions..... бла бла бла елементо-манипуляции);
 

(Mykhailo Poliarush) #11

не знаю

но если такая же проблема, тогда нужны детали, чтобы разбираться


(ivanidzzza) #12

Спасибо за ответ.

такой вариант я еще не пробовала.

Рааскажите про  webDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

как вы его используете? только один раз после создания профиля или еще как-то? (в инете видела варианты использования буквально перед каждым FindElement)


(Taras) #13

нет, просто перед запуском каждого теста.

 

 

@BeforeClass
public void init() throws Exception {
 
webDriver = WebDriverFactory.getInstance(true, browser.getName(), username, password);    //инициализация вебдрайвера
webDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);  //то о чем Ви спрашиваете
webDriver.get(websiteUrl);  //начинаем автоматизацию
 
}

(Mykhailo Poliarush) #14

это называется неявные ожидания

в общих, случаях они задаются один раз для всего выполнения после создания экземпляра драйвера

но выможете вызывать неявные ожидания когда вам удобно и каких угодно участках кода


(qaleader) #15

У меня точно такая же проблема, наблюдается в браузере Firefox 17-й версии, но если запускать на 9-й то все в порядке.  Вот сейчас у меня дилема, первый вариант - ипользовать старую версию браузер, второй - ХЗ что делать и как убрать эту рандомность.


(ivanidzzza) #16

Привет, локально для себя я проблему решила (ттт)

 с использованием wait  и перегрузкой метода FindElement

подробнее http://stackoverflow.com/questions/6992993/selenium-c-sharp-webdriver-wait-until-element-is-present

всем спасибо за помощь!

 


(Александр Таранков) #17

Я переместил(а) сообщение в новую тему: Webdriver не находит элемент страницы по xpath