Перейти к содержимому

Фотография

Как решить проблему с падением тестов в Selenium 2.4 под WD


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 defonus

defonus

    Новый участник

  • Members
  • Pip
  • 32 сообщений

Отправлено 24 августа 2011 - 07:09

Возникла проблема при запуске тестов на Selenium 2.4 под WebDriver. тесты с завидным постоянством падают с ошибкой аля "org.openqa.selenium.WebDriverException: Element is no longer valid (WARNING: The server did not provide any stacktrace information)". Погуглив наткнулся на пару отзывов в которых говорилось, что это баг 2.4 ... советовали откатиться до 2.3 либо ждать 2.5. Попробовал и 2.3 и 2.0 ... все тоже самое. Может кто нить сталкивался с такой проблемой и знает как ее разрешить? Под RC тесты не падают, следовательно вся проблема в WD. Похоже WD перестает видеть элемент после того как страница перегрузится/обновится =(
  • 0

#2 mikhail_rb

mikhail_rb

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Михаил Кутько
  • Город:Санкт-Петербург


Отправлено 24 августа 2011 - 08:13

Речь идет про IE?

У меня такая же проблема. Мои поиски показали, что надо смотреть в сторону настройки Security для IE или вообще его настройки. Но решить проблему не удалось :(
  • 0

#3 defonus

defonus

    Новый участник

  • Members
  • Pip
  • 32 сообщений

Отправлено 24 августа 2011 - 08:17

Да IE :( WD у нас используется только с IE. C RC+FF таких проблем нету
  • 0

#4 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 24 августа 2011 - 08:21

Конечно WD перестаёт видеть элемент, после того, как страница перегрузилась. Потому что DOM-дерево в браузере перестроилось. Поменялась страница -- делайте findElement заново.

RC таких проблем не имеет, потому что при выполнении каждой команды он всегда ищет элемент заново.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#5 defonus

defonus

    Новый участник

  • Members
  • Pip
  • 32 сообщений

Отправлено 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 :(

Буду признателен за помошь
  • 0

#6 mikhail_rb

mikhail_rb

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Михаил Кутько
  • Город:Санкт-Петербург


Отправлено 24 августа 2011 - 10:46

У меня ошибка, похожая на http://code.google.c.../detail?id=1374

Рекомендация:

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 ее нет?...
  • 0

#7 mikhail_rb

mikhail_rb

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Михаил Кутько
  • Город:Санкт-Петербург


Отправлено 24 августа 2011 - 11:08

Только вот я не могу у себя в IE8 найти этот Protected Mode :) Ее как-нибудь могут убирать админы или в IE8 ее нет?...


Protected Mode недоступен для IE на XP, если верить поисковику. Vista или выше нужна операционка..
  • 0

#8 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 24 августа 2011 - 11:48

Не путайте "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);

  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#9 defonus

defonus

    Новый участник

  • Members
  • Pip
  • 32 сообщений

Отправлено 29 августа 2011 - 08:47

Я все разрезолвив добавив waitForPageToLoad и после него заново findElement
  • 0

#10 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 29 августа 2011 - 12:56

Я все разрезолвив добавив waitForPageToLoad и после него заново findElement

Надеюсь, это шутка? У WebDriver нет метода waitForPageToLoad.

Если Вам нужно, чтобы метод findElement просто ждал появления элемента, используйте имплицитные ожидания:
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#11 mikhail_rb

mikhail_rb

    Новый участник

  • Members
  • Pip
  • 44 сообщений
  • ФИО:Михаил Кутько
  • Город:Санкт-Петербург


Отправлено 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'
  • 0

#12 defonus

defonus

    Новый участник

  • Members
  • Pip
  • 32 сообщений

Отправлено 30 августа 2011 - 13:15


Я все разрезолвив добавив waitForPageToLoad и после него заново findElement

Надеюсь, это шутка? У WebDriver нет метода waitForPageToLoad.

Если Вам нужно, чтобы метод findElement просто ждал появления элемента, используйте имплицитные ожидания:
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);


и переопределил и использовал com.thoughtworks.selenium.Selenium.waitForPageToLoad(String arg0)
в нем.
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных