2017-02-15 4 views
0

Я тестирую страницу, где div перезагружается с формой, содержащей несколько текстовых полей и кнопок. Однако после перезагрузки div webdriver не может найти какой-либо элемент на экране. Я пробовал разные ожидания, но он никогда не находит элементов. Однако, когда я пытаюсь найти элемент, который не изменился (т. Е. Верхний элемент навигации), он находит это в порядке.Веб-редактор Selenium Chrome не может найти элементы после перезагрузки содержимого.

 Driver.Instance.FindElement(By.Id("igtxttxt_CAge")).Click(); 
     var wait = new WebDriverWait(Driver.Instance, TimeSpan.FromSeconds(10)); 
     wait.Until(d => d.SwitchTo().ActiveElement().GetAttribute("id") == "igtxttxt_CAge"); 

Есть ли что-то, что я могу сделать, когда обновляется содержимое div?

Ошибка не получил:

такого элемента: Не удается найти элемент: { "метод": "ID", "селектор": "igtxttxt_CAge"}

(Информация о сессии: хром = 56.0.2924.76)

(информация Driver: chromedriver = 2.27.440174

+0

Не уверен, если это ваша проблема, но убедитесь, что всегда вернуться к началу страницы перед поиском элемента или переключением на новый кадр. driver.switchTo(). DefaultContent(); – HedonicHedgehog

+0

@HedonicHedgehog - Я пробовал это. Тот же результат. Но хорошо знать. – webdad3

ответ

0

Я нашел ответ на этот вопрос. Я не понял, пока не посмотрел содержимое HTML, содержащееся в том, что загруженная мной страница загружалась в iFrame.

После того, как я добавил этот код:

Driver.Instance.SwitchTo().Frame("frame_Calculator"); 

Тогда остальная часть моего кода работал, как и ожидалось:

 Driver.Instance.FindElement(By.Id("igtxttxt_CAge")).Click(); 
     ((IJavaScriptExecutor)Driver.Instance).ExecuteScript("$('#igtxttxt_CAge').trigger('focus')"); 
0

В йо ur данный сценарий, я думаю, fluentwait лучше, чем webdriverwait. Вы можете попробовать следующий код. Он будет игнорировать все такие element not found exception s, пока ждет webdriver.

FluentWait fluentWait = new FluentWait<>(webDriver) { 
    .withTimeout(30, TimeUnit.SECONDS) 
    .pollingEvery(200, TimeUnit.MILLISECONDS); 
    .ignoring(NoSuchElementException.class, TimeoutException.class) 
    .ignoring(StaleElementReferenceException.class); 
} 

И вы можете использовать его до тех пор, пока ваш элемент не станет доступен или не будет доступен.

fluentWait.until(ExpectedConditions.visibilityOf(By.Id("igtxttxt_CAge"))); 
fluentWait.until(ExpectedConditions.elementToBeClickable(By.Id("igtxttxt_CAge"))); 

Надеюсь, это поможет. вот difference между webdriverwait и fluentwait.