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

Фотография

Тесты падают изза реализации выхода из системы


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

#1 VASya

VASya

    Опытный участник

  • Members
  • PipPipPipPip
  • 364 сообщений


Отправлено 04 февраля 2014 - 13:28

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

//элемент на кот наводится мышка
@FindBy(id = "userActions")
private WebElement userActionsGroup;


@FindBy(id = "tm-logoff")
private WebElement logoffLink;


public LoginPage clickLogoutLink() {
WebElement element = wait.until(elementPresentWithAtribute("id", "userActions"));
new Actions(driver).moveToElement(userActionsGroup).perform();
if (logoffLink.isDisplayed()) {
logoffLink.click(); 
}
return pages.loginPage;
}


private ExpectedCondition<WebElement> elementPresentWithAtribute(final String argname,
final String argvalue) {
return new ExpectedCondition<WebElement>(){
@Override
public WebElement apply (WebDriver driver){
String selector = "*[" + argname + "='" + argvalue + "']"; 
return driver.findElement(By.cssSelector(selector));
}
};
}
почемуто отрабатывает через раз.

  • 0

#2 VASya

VASya

    Опытный участник

  • Members
  • PipPipPipPip
  • 364 сообщений


Отправлено 04 февраля 2014 - 13:53

вариант 

public LoginPage clickLogoutLink() {


new Actions(driver).moveToElement(userActionsGroup).perform();
WebElement element = wait.until(elementPresentWithAtribute("id", "tm-logoff"));
if (logoffLink.isDisplayed()) {
driver.findElement(By.id("tm-logoff")).click();


return pages.loginPage;
}
else {
clickLogoutLink();
return pages.loginPage;
}
}
также отрабатывает через раз

  • 0

#3 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 04 февраля 2014 - 14:23

 

 

Selenium - Functional Testing
Задавая вопрос, пожалуйста, указывайте следующую информацию:
-- к какому из инструментов семейства Selenium относится ваш вопрос -- WebDriver, RC, IDE, Grid
-- какую версию Selenium вы используете
-- в каком браузере у вас возникают проблема (включая версию браузера)

Кроме того, вы гораздо быстрее получите ответ на свой вопрос, если вместо длинного путанного описания просто укажете:
-- фрагмент исполняемого кода, в котором у вас возникает ошибка
-- детальное сообщение об ошибке (stacktrace)
-- ссылку на страницу, на которой этот фрагмент кода можно выполнить и тем самым воспроизвести вашу проблему.

Пожалуйста, уточните, в какой строчке падает, с какой ошибкой падает и в каком браузере тестируете?

Плюс, используйте, пожалуйста, возможности форматирования кода (тэг < code > или соответствующая кнопочка в панели инструментов)


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#4 VASya

VASya

    Опытный участник

  • Members
  • PipPipPipPip
  • 364 сообщений


Отправлено 05 февраля 2014 - 07:12

WebDriver, 

Selenium 2.39

FF26, тесты также запускаются в Сhrome 32, IE 8-11

 

 

в тесте нужно войти-выйти 2 раза под разными пользователями.
первый раз срабатывает, во второй - даже меню не раскрывает

 

org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
Command duration or timeout: 61.17 seconds
For documentation on this error, please visit: http://seleniumhq.or..._reference.html
Build info: version: '2.39.0', revision: '14fa800511cc5d66d426e08b0b2ab926c7ed7398', time: '2013-12-16 13:18:38'
System info: host: 'sbt-spb-silkin', ip: '10.25.12.218', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_40'
Session ID: d81203a8-8543-4ba6-a7c1-b7b8ad29e0f7
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, browserConnectionEnabled=true, webStorageEnabled=true, nativeEvents=false, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=27.0}]
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:193)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
at org.openqa.selenium.remote.RemoteExecuteMethod.execute(RemoteExecuteMethod.java:34)
at org.openqa.selenium.remote.RemoteMouse.mouseMove(RemoteMouse.java:88)
at org.openqa.selenium.interactions.MoveMouseAction.perform(MoveMouseAction.java:35)
at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:31)
at org.openqa.selenium.interactions.Actions.perform(Actions.java:364)

  • 0

#5 leipreachan

leipreachan

    Активный участник

  • Members
  • PipPip
  • 95 сообщений
  • Город:Москва

Отправлено 05 февраля 2014 - 08:08

опять StaleElement =)

обычно это значит, что у вас перерисовывается DOM-дерево и элементы "мигнули" на страницы (удалились, потом опять добавились)

 

из комментария не очень очевидно, на какой строке падает. На клике или wait?

попробуйте вот этот кусок:

<code>

WebElement element = wait.until(elementPresentWithAtribute("id", "tm-logoff"));
if (logoffLink.isDisplayed()) {
driver.findElement(By.id("tm-logoff")).click();


return pages.loginPage;
}

</code>

Вытащить в отдельный метод и обернуть в try{}catch{} по StaleElementReferenceException и выполнять его раза три-четыре.

Лично мне такой хак помогал.

Кроме того, возможно, вы обращаетесь, всё-таки, к неправильному элементу. В Firebug  есть возможность подсвечивать элементы, которые появляются на странице. Убедитесь, что нужный вам элемент не "перепоявялется"


  • 0

#6 VASya

VASya

    Опытный участник

  • Members
  • PipPipPipPip
  • 364 сообщений


Отправлено 05 февраля 2014 - 10:44

опять StaleElement =)

обычно это значит, что у вас перерисовывается DOM-дерево и элементы "мигнули" на страницы (удалились, потом опять добавились)

 

из комментария не очень очевидно, на какой строке падает. На клике или wait?

попробуйте вот этот кусок:

<code>

WebElement element = wait.until(elementPresentWithAtribute("id", "tm-logoff"));
if (logoffLink.isDisplayed()) {
driver.findElement(By.id("tm-logoff")).click();


return pages.loginPage;
}

</code>

Вытащить в отдельный метод и обернуть в try{}catch{} по StaleElementReferenceException и выполнять его раза три-четыре.

Лично мне такой хак помогал.

Кроме того, возможно, вы обращаетесь, всё-таки, к неправильному элементу. В Firebug  есть возможность подсвечивать элементы, которые появляются на странице. Убедитесь, что нужный вам элемент не "перепоявялется"

 

Падает на 

new Actions(driver).moveToElement(userActionsGroup).perform();

ибо, как уже говорилось, даже меню не раскрывает


  • 0

#7 leipreachan

leipreachan

    Активный участник

  • Members
  • PipPip
  • 95 сообщений
  • Город:Москва

Отправлено 05 февраля 2014 - 12:41

 

опять StaleElement =)

обычно это значит, что у вас перерисовывается DOM-дерево и элементы "мигнули" на страницы (удалились, потом опять добавились)

 

из комментария не очень очевидно, на какой строке падает. На клике или wait?

попробуйте вот этот кусок:

<code>

WebElement element = wait.until(elementPresentWithAtribute("id", "tm-logoff"));
if (logoffLink.isDisplayed()) {
driver.findElement(By.id("tm-logoff")).click();


return pages.loginPage;
}

</code>

Вытащить в отдельный метод и обернуть в try{}catch{} по StaleElementReferenceException и выполнять его раза три-четыре.

Лично мне такой хак помогал.

Кроме того, возможно, вы обращаетесь, всё-таки, к неправильному элементу. В Firebug  есть возможность подсвечивать элементы, которые появляются на странице. Убедитесь, что нужный вам элемент не "перепоявялется"

 

Падает на 

new Actions(driver).moveToElement(userActionsGroup).perform();

ибо, как уже говорилось, даже меню не раскрывает

 

 

1) говорилось "почемуто отрабатывает через раз."

что конкретно - вы нигде не написали.

 

2) Попробуйте элемент не задавать через аннотацию, а искать непосредственно перед выполнением нужного вам кода. Как я уже говорил, возможно, происходит полное перестраивание DOM-дерева - никто не знает, что за JS-движок у вас на сайте. StaleElementException указывает в 90% случаев именно на это - DOM поменялся и элемента с таким же внутренним идентификатором (не css / xpath локатором, а именно внутренним идентификатором в движке браузера) уже нет.


  • 0


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

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