Как решить проблему с падением тестов в Selenium 2.4 под WD
#1
Отправлено 24 августа 2011 - 07:09
#2
Отправлено 24 августа 2011 - 08:13
У меня такая же проблема. Мои поиски показали, что надо смотреть в сторону настройки Security для IE или вообще его настройки. Но решить проблему не удалось :(
#3
Отправлено 24 августа 2011 - 08:17
#4
Отправлено 24 августа 2011 - 08:21
RC таких проблем не имеет, потому что при выполнении каждой команды он всегда ищет элемент заново.
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#5
Отправлено 24 августа 2011 - 08:46
Конечно WD перестаёт видеть элемент, после того, как страница перегрузилась. Потому что DOM-дерево в браузере перестроилось. Поменялась страница -- делайте findElement заново.
RC таких проблем не имеет, потому что при выполнении каждой команды он всегда ищет элемент заново.
В том то и проблема, что эта ошибка появляется даже когда страница не перегружается. Вот пример метода (пытаемся селектнуть пока не селектнем :) ), в котором происходит падение
public boolean setSelected(String locatorName) { WebElement element = findElement(locatorName); if (driver.getClass().equals(InternetExplorerDriver.class)) { do { //sbrowser.wait(10000); element.sendKeys(Keys.SPACE); ATGLogger.info("Keys.SPACE"); element = findElement(locatorName); if(element==null){ break; } /*706*/ } while (!element.isSelected() && element.isEnabled()); } else { do { element.click(); } while (!element.isSelected() && element.isEnabled()); } return true; }
и сам стэк
Driver info: driver.version: BrowserWebDriver
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:131)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:105)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:407)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:213)
at org.openqa.selenium.remote.RemoteWebElement.isEnabled(RemoteWebElement.java:113)
at com.epam.tc.fitnesse.browser.BrowserWebDriver.setSelected(BrowserWebDriver.java:706)
не могу понять почему в 706 строке вызывается RemoteWebElement.isEnabled если сам element - org.openqa.selenium.WebElement :(
Буду признателен за помошь
#6
Отправлено 24 августа 2011 - 10:46
Рекомендация:
Please check your Protected Mode settings (Tools > Internet Options > Security tab). The value should be set to the same value (either on or off) for all zones.
Только вот я не могу у себя в IE8 найти этот Protected Mode :) Ее как-нибудь могут убирать админы или в IE8 ее нет?...
#7
Отправлено 24 августа 2011 - 11:08
Только вот я не могу у себя в IE8 найти этот Protected Mode :) Ее как-нибудь могут убирать админы или в IE8 ее нет?...
Protected Mode недоступен для IE на XP, если верить поисковику. Vista или выше нужна операционка..
#8
Отправлено 24 августа 2011 - 11:48
Что касается конкретно выпадающих списков, лучше для работы с ними использовать специальный класс org.openqa.selenium.support.ui.Select:
Select selection = new Select(driver.findElement(By.name("my_select"))); selection.selectByIndex(1); selection.selectByIndex(2);
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#9
Отправлено 29 августа 2011 - 08:47
#10
Отправлено 29 августа 2011 - 12:56
Надеюсь, это шутка? У WebDriver нет метода waitForPageToLoad.Я все разрезолвив добавив waitForPageToLoad и после него заново findElement
Если Вам нужно, чтобы метод findElement просто ждал появления элемента, используйте имплицитные ожидания:
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium
#11
Отправлено 30 августа 2011 - 11:43
Не путайте "Unable to find element" и "Element is no longer valid" -- второе означает, что элемент был, но после этого DOM перестроился и теперь того элемента больше нет. DOM может перестроиться и не только при загрузке новой страницы. Может быть у вас динамическое меню.
Что касается конкретно выпадающих списков, лучше для работы с ними использовать специальный класс org.openqa.selenium.support.ui.Select:Select selection = new Select(driver.findElement(By.name("my_select"))); selection.selectByIndex(1); selection.selectByIndex(2);
Все-таки я продолжаю настаивать, что ,возможно, проблема именно во второй части сообщения об ошибке: WARNING: The server did not provide any stacktrace information. Если это не так, то мне интересно, почему у меня не работает код из документации на WebDriver: пример, одифицированный под IE и даже с ожиданием.
@Test public void testUntitled() throws Exception { WebDriver driver = new InternetExplorerDriver(); driver.get("http://www.google.ru"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); WebElement element = driver.findElement(By.name("q")); element.sendKeys("Cheese!"); element.submit(); System.out.println("Page title is: " + driver.getTitle()); (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d) { return d.getTitle().toLowerCase().startsWith("cheese!"); } }); System.out.println("Page title is: " + driver.getTitle()); driver.quit(); }
Unable to find element with css selector == q (WARNING: The server did not provide any stacktrace information)
For documentation on this error, please visit: http://seleniumhq.or...ch_element.html
Build info: version: '2.4.0', revision: '13337', time: '2011-08-12 09:58:05'
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1', java.version: '1.6.0_25'
#12
Отправлено 30 августа 2011 - 13:15
Надеюсь, это шутка? У WebDriver нет метода waitForPageToLoad.
Я все разрезолвив добавив waitForPageToLoad и после него заново findElement
Если Вам нужно, чтобы метод findElement просто ждал появления элемента, используйте имплицитные ожидания:driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
и переопределил и использовал com.thoughtworks.selenium.Selenium.waitForPageToLoad(String arg0)
в нем.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных