Selenium - это бесплатное и очень удобное средство автоматизации веб приложений. Работает как библиотека на разных языках (Java, C#, Ruby, PHP, Perl, Python), подключаемая к вашему тестовому сьюту. Там большое количество атомарных методов, но для большего удобства постоянно приходится немного дорабатывать различными дополнительными методами.
Пожалуй правильнее всего с точки срезния разработки не встраивать такие методы в свои тестовые методы, т.к. они не связаны с логикой приложения, но используются в тестах, а унаследовать от основоного класса библиотеки Selenium и добавить такие дополнительные методы именно туда.
Приведу пару примеров, а заодно сохраню их у себя :)
public boolean waitForTextPresent(String textToWaitFor, int howLong) {
boolean resultFlag = false;
for (int second = 0; second <= howLong; second++) {
if (super.isTextPresent(textToWaitFor)) {
resultFlag = true;
break;
} else {
resultFlag = false;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return resultFlag;
}
Очень полезно, например, для проверки действий с сообщением об ошибке или наоборот об успешном завершении асинхронного процесса. Проверка происходит раз в секунду. Передаем текст, который ждем и максимальное время ожидания. Использованием isElementPresent можно добиться того же для любого элемента по XPath. Или isVisible если элемент есть, но должен показаться на странице. Или любой другой похожий is-метод.
Из такого метода потом можно собирать конструкции как clickAndWaitForElementPresent. Например,
public void clickElementWaitForElementPresent(String elementLocator, String elementLocatorToWaitFor) {
click(elementLocator);
pause(2048);//пауза плохая практика, но я ее здесь специалльно оставил, чтобы понимать, что иногда она нужна в ткаих случаях и нужно не забывать, что селениум с ожиданием может иногда сбоить
if (!waitForElementPresent(elementLocatorToWaitFor)){
logWarning("[clickElementWaitForElementPresent] - element "+ elementLocatorToWaitFor+" was not found]");
}
}
Есть также некоторые другие особенности, не связанные с AJAX. Метод Selenium isTextPresent() ищет, как ни странно :), только текст на странице. Т.е. все для text(). Соответственно если вы хотите убедится в том, что тест есть на странице и/или он есть также в input, то необходимо использовать другой метода. Потому что текст input контролов хранится как значение аттибута value и потому необходимо расширить метод для таких случаев.
Буду добавлять ещё ...
Пожалуй правильнее всего с точки срезния разработки не встраивать такие методы в свои тестовые методы, т.к. они не связаны с логикой приложения, но используются в тестах, а унаследовать от основоного класса библиотеки Selenium и добавить такие дополнительные методы именно туда.
Приведу пару примеров, а заодно сохраню их у себя :)
public boolean waitForTextPresent(String textToWaitFor, int howLong) {
boolean resultFlag = false;
for (int second = 0; second <= howLong; second++) {
if (super.isTextPresent(textToWaitFor)) {
resultFlag = true;
break;
} else {
resultFlag = false;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return resultFlag;
}
Очень полезно, например, для проверки действий с сообщением об ошибке или наоборот об успешном завершении асинхронного процесса. Проверка происходит раз в секунду. Передаем текст, который ждем и максимальное время ожидания. Использованием isElementPresent можно добиться того же для любого элемента по XPath. Или isVisible если элемент есть, но должен показаться на странице. Или любой другой похожий is-метод.
Из такого метода потом можно собирать конструкции как clickAndWaitForElementPresent. Например,
public void clickElementWaitForElementPresent(String elementLocator, String elementLocatorToWaitFor) {
click(elementLocator);
pause(2048);//пауза плохая практика, но я ее здесь специалльно оставил, чтобы понимать, что иногда она нужна в ткаих случаях и нужно не забывать, что селениум с ожиданием может иногда сбоить
if (!waitForElementPresent(elementLocatorToWaitFor)){
logWarning("[clickElementWaitForElementPresent] - element "+ elementLocatorToWaitFor+" was not found]");
}
}
Есть также некоторые другие особенности, не связанные с AJAX. Метод Selenium isTextPresent() ищет, как ни странно :), только текст на странице. Т.е. все для text(). Соответственно если вы хотите убедится в том, что тест есть на странице и/или он есть также в input, то необходимо использовать другой метода. Потому что текст input контролов хранится как значение аттибута value и потому необходимо расширить метод для таких случаев.
public bool isTextPresent(String text) {
return super.isTextPresent(text) || super.isElementPresent("//*contains(@value,'" + text + "')]"));
}
Буду добавлять ещё ...
Комментариев нет:
Отправить комментарий