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

Публикации leipreachan

94 публикаций создано leipreachan (учитываются публикации только с 28 апреля 2023)



#124418 Кто как борется со "смертью" браузера

Отправлено автор: leipreachan 27 ноября 2013 - 11:22 в Selenium - Functional Testing

после обновления на последнии версии всего симптомы остались, но теперь вместо "It may have died..." появляется no such element. Эту ошибку убрали? Теперь непонятно возникла ошибка или же это лажа с тестами


Может быть, это Stalled element?
Т.е. у вас DOM перерисовался и браузер потерял ссылку на этот элемент? Браузер-то при этой ошибке ещё живой?



#124487 Кто как борется со "смертью" браузера

Отправлено автор: leipreachan 28 ноября 2013 - 11:43 в Selenium - Functional Testing

я посмотрю, но там 90% элементов статичны и не меняются

попробуйте обернуть в try{}catch() ожидание элемента с небольшой задержкой, а всё это - в цикл. Если это stalled element, то проблема решится.
к тому же, вы уверены, что абсолютно ничего нет в логах ни драйвера, ни selenium-server? иногда там интересные вещи показыаются..



#124488 Автотестирование установки плагина в браузер

Отправлено автор: leipreachan 28 ноября 2013 - 11:50 в Selenium - Functional Testing

Управление расширения браузера никак не реализовано в Selenium, т.к. это не его задача.
Его задача - эмуляция работы пользователя на каком-нибудь сайте.
Посмотрите в сторону роботов (autoit, например. Под маком слышал про Automator)



#124498 Кто как борется со "смертью" браузера

Отправлено автор: leipreachan 28 ноября 2013 - 13:46 в Selenium - Functional Testing

мм, об этом я забыл...
Я удалил прошлый лог файл, а новых фейлов не было и он не создался..

ну, тогда не забудьте туда глянуть в следующий раз.



#124564 Обновил selenium-standalone, перестали регистрироваться ноды

Отправлено автор: leipreachan 29 ноября 2013 - 12:30 в Selenium - Functional Testing

Всем привет!

Буквально еще вчера использовал selenium-server-standalone-2.31.0, сегодня решил обновиться до последней версии 2.37.0. Хаб запустился, а вот ноды никак не могу зарегистрироваться на хабе, причем в логе хаба пишет, что они зарегены. Попробовал запустить 31-ю версию, все подключилось мгновенно. Что изменилось в 37-й версии?

в 34й изменился механизм выдачи id сессии.
Ноды и грид одной версии?



#124565 Selenium WebDriver,JUnit и Assert.isTrue - зачем ?

Отправлено автор: leipreachan 29 ноября 2013 - 12:34 в Selenium - Functional Testing

Ладно,перефразирую - какой ассерт использовать для проверки существования вэб элемента и его атрибута/атрибутов(комбинированное условие) ?

Честно говоря, Java-драйвер я немного подзабыл, а на JUnit не писал - только testng. Но логика везде одинаковая.
Там, предполагаю, есть assertTrue и всё.
Реализуйте assertElementPresent и assertElementVisible
первый будет
просто проверять, что у драйвер вернул element (тот же assertTrue)
а второй даже проще:
assertTrue(element.displayed(), message)

в селениде, как я понимаю, так и сделано.



#124893 Selenium не находит локаторы

Отправлено автор: leipreachan 09 декабря 2013 - 15:09 в Selenium - Functional Testing

Спасибо друзья за помощь.Заработало... :clapping:/>
Версию фаерфокса оставил последнию (25.0.1), а вот версию WebDrivera пришлось понизить до 2.31.
Использовал FirefoxDriver , так как HtmlUnitDriver не заработал...Следовательно вопрос - для чего он нужен?

для страниц без множества ajax. Статику с его помощью легко и быстро можно проверять



#124894 Обновил selenium-standalone, перестали регистрироваться ноды

Отправлено автор: leipreachan 09 декабря 2013 - 15:11 в Selenium - Functional Testing



Всем привет!

Буквально еще вчера использовал selenium-server-standalone-2.31.0, сегодня решил обновиться до последней версии 2.37.0. Хаб запустился, а вот ноды никак не могу зарегистрироваться на хабе, причем в логе хаба пишет, что они зарегены. Попробовал запустить 31-ю версию, все подключилось мгновенно. Что изменилось в 37-й версии?

в 34й изменился механизм выдачи id сессии.
Ноды и грид одной версии?

Да, конечно. Хаб и ноды всё 37-ой версии. И как теперь быть?



если ещё актуально: какая OS? возможно, проблема в брандмауэре?



#124900 Ability to fetch slotCounts from /grid/api/hub

Отправлено автор: leipreachan 09 декабря 2013 - 16:22 в Selenium - Functional Testing

Привет

в ченджлогу для версии 36 интересная вещь упомянута:
* Added ability to fetch slotCounts from /grid/api/hub. The resource
looks like this:
{ "slotCounts": { "total": 20, "free": 8 } }
* Added ability to fetch newSessionRequestCount from the
/grid/api/hub resource.


Кроме того, вот такая штука в HubStatusServlet.java:
/**
* API to query the hub config remotely.
*
* use the API by sending a GET to grid/api/hub/
* with the content of the request in JSON,specifying the
* parameters you're interesting in, for instance, to get
* the timeout of the hub and the registered servlets :
*
* {"configuration":
* [
* "timeout",
* "servlets"
* ]
* }
*
* if no param is specified, all params known to the hub are returned.
*
* {"configuration": [] }
*
*/




Только у меня ничего не получается.
Какой реквест надо сформировать, кто-нибудь знает?

Запускаю сервер

java -jar selenium-server-2.37.0.jar -role hub -hubConfig hub.json -servlets org.openqa.grid.web.servlet.HubStatusServlet

кидаю GET:

http://localhost:5555/grid/api/hub/ - возвращается конфигурация.
А как запросить свободные слоты-то? Что я ни кидаю - всегда возвращается полная конфигурация.

Заранее спасибо



#124941 Selenium IDE и Documentum

Отправлено автор: leipreachan 10 декабря 2013 - 14:18 в Selenium - Functional Testing

Привет всем, я совершенно новый пользователю Selenium IDE и пытаюсь использовать его с EMC Documentum 5.3. Пытаюсь записать сценарии в firefox и получаю "Элемент не найден", ошибки. Записываются только первые несколько команд (при входе в Систему), далее при кликании по кнопкам, дереву, ссылкам действия не записываются. При ручной записи команд также ошибки. При этом если записываю сценарии с какого-либо сайта (ya.ru, google.com), все ок. Может ли кто-нибудь дать толковые советы, как-что сделать, чтобы сценарии на документуме заработали? Или примеры сценариев, статьи?

скорее всего, после клика по какому-нибудь элементу происходит частичная перерисовка страницы (через AJAX).
Попробуй перед первой ошибкой (что там? клик по элементу или ввод текста?) добавить waitforelementpresent этого же элемента.



#124975 Изменение профиля в процессе работы.

Отправлено автор: leipreachan 11 декабря 2013 - 08:37 в Selenium - Functional Testing

Добрый день, уважаемые!
Подскажите, пожалуйста, возможно ли изменение параметров загруженного профиля ФФ уже в процессе работы? То есть браузер запустился с одним профилем, а в потом, в процессе, потребовалось его изменить. Возможен ли такой маневр?

эээ.. а у живого пользователя как это планируется делать? через about:config?
пожалуй, проще всего будет перекинуть сессию на новый браузер (скопировать куки, например)



#125003 Изменение профиля в процессе работы.

Отправлено автор: leipreachan 12 декабря 2013 - 07:34 в Selenium - Functional Testing



Добрый день, уважаемые!
Подскажите, пожалуйста, возможно ли изменение параметров загруженного профиля ФФ уже в процессе работы? То есть браузер запустился с одним профилем, а в потом, в процессе, потребовалось его изменить. Возможен ли такой маневр?

Нет, так сделать нельзя. А для чего вам понадобилось менять профиль во время работы? Какую проблему вы хотите решить таким способом?


Понимаю, что, наверное, этот вопрос прозвучал немного странно.
Попробую вкратце объяснить. Пользуюсь Python и FireFox
В Селениум Вебдрайвере есть такой момент, что после get, click, refresh - он ждет загрузки страницы и ни на что при этом не реагирует боле, пока не загрузит. Выйти из этого процесса можно установив set_page_load_timeout. Но! встречаются такие моменты (после click, например иногда) когда Селениум не понимает, что произошел тот самый клик и надо ждать загрузки страницы. При этом программа выполняется дальше, но при любом обращении к вебдрайверу происходит остановка и ожидание загрузки страницы. Но страница, бывает так, что вообще не загружается и висит, а в данной ситуации уже таймаут на загрузку страницы не срабатывает. В итоге получаем полное зависание.
Против всего этого непотребства нашел один вариант - использовать хитрую загрузку профиля с set_preference('webdriver.load.strategy','unstable'). Тогда, в общем-то, загрузку страницы можно не ждать, а сразу проверять наличие элементов на странице и работать с ними при появлении. Но и в этом варианте есть свои подводные камни - Например, когда обновляешь страницу, ищешь элементы, находишь их, но находишь их на СТАРОЙ странице, которая еще не обновилась, то есть ты не знаешь с какой страницы нашел элемент со старой, или с уже новой, так как не знаешь загрузилась ли уже страница. По крайней мере, я не нашел способа проверки загрузилась ли уже страница в этом режиме. Может кто-нить знает способ?
Вот я и подумал, что может быть можно было б менять в процессе работы этот параметр, чтобы, когда надо работать в "нестабильном" режиме, а когда надо - в нормальном

Вот... Сумбурно получилось :) Надеюсь, Вы что-нибудь поняли из моего потока сознания :)
Или я сам все усложняю и есть нормальные способы решения?



Вы пытаетесь решить проблему не тем способом. Вам нужно научиться определять изменение страницы, ведь так?
Попробуйте рассуждать логически - как вы сам определяете, что она загрузилась? По изменению какого-то текста? По появлению элемента? По исчезновению элемента?
Вот от этого и надо писать тест.



#125035 Изменение профиля в процессе работы.

Отправлено автор: leipreachan 13 декабря 2013 - 07:38 в Selenium - Functional Testing


Вы пытаетесь решить проблему не тем способом. Вам нужно научиться определять изменение страницы, ведь так?
Попробуйте рассуждать логически - как вы сам определяете, что она загрузилась? По изменению какого-то текста? По появлению элемента? По исчезновению элемента?
Вот от этого и надо писать тест.

Все так, за исключением одного "но". Приведу пример, чтоб понятней было:
Есть страница с капчей. я ввожу капчу и начинаю анализировать появилась ли следующая страница по появлению соответствующих элементов.
Но! Капчу можно решить неправильно и загружается не новая, а та же самая страница с капчей. И вот, все в шоке :)
Приходится еще и мониторить не появились ли те же элементы, что и на странице капчи. То есть, например, будем отслеживать - не появилась ли опять капча. Все бы хорошо, но вступает в силу очередной закон подлости :)
Прикол в том, что когда начинает грузиться страница, то старая еще не пропала, а некоторое время еще висит и Селениум может, как ни странно, с этой страницей работать. И как результат, он находит капчу, но не новую, а старую, и считает, что... да что угодно считает, но считает он это неправильно.
Это только лишь один из примеров тупиковых ситуаций.
Да, кстати, в цикле пробовал анализировать не пропал ли элемент (в нашем случае капча) в промежутке между сменами страниц и только потом запускать процедуру анализа какая страница загрузилась. Но и тут очередной прикол. Иногда, следующая страница появляется практически без паузы. То есть висит еще видимая старая, при этом грузится новая в фоне.. и в какой-то момент бах! - и отрисовалась новая. И Селениум не успевает отследить пропадание, и мы повисаем в бесконечном цикле. Ну, конечно, не бесконечном - из него выходим по прошествии какого-то времени, но все это время мы висим и гоняем впустую процессорное время :)


по пунктам:
1) страница с капчей не выдаёт сообщение "вы неправильно ввели капчу"? Это странно. Если выдаёт - можете на это ориентироваться. Если не выдаёт - следует подумать над этим, т.к. я бы сам удивился, если бы мне ничего не говорили, а просто перезагружали страницу.
2) Ориентируйтесь на src картинки с капчей. Перед вводом значения запоминайте её id, что угодно (обычно у неё адрес что-то вроде captcha.php?id=dkfjgkjdshf). Потом проверяйте, что он изменился. Или у вас капча имеет вид captcha.php ?
3) Если уж совсем туго, можете воспользоваться JS: добавляйте через document.body.addChildren какой-нибудь невидимый input type="hidden". Наверное, даже, его лучше прибавлять к футеру. Как только он исчезнет - страница начала перезагрузку.
4) Да, анализ "исчезновение - появление" может быть забагованным. Им пользоваться нужно оочень осторожно. Хороший JS-код может поменять DOM страницы достаточно быстро и селениум ничего не может с этим поделать.
тупиковых ситуаций не бывает =)

В firebug (и в стандартных девтулз Firefox) есть инструмент, который позволяет подсветить изменившиеся элементы. Попробуйте посмотреть, где происходят изменения.



#125041 Изменение профиля в процессе работы.

Отправлено автор: leipreachan 13 декабря 2013 - 08:48 в Selenium - Functional Testing


по пунктам:
1) страница с капчей не выдаёт сообщение "вы неправильно ввели капчу"? Это странно. Если выдаёт - можете на это ориентироваться. Если не выдаёт - следует подумать над этим, т.к. я бы сам удивился, если бы мне ничего не говорили, а просто перезагружали страницу.
2) Ориентируйтесь на src картинки с капчей. Перед вводом значения запоминайте её id, что угодно (обычно у неё адрес что-то вроде captcha.php?id=dkfjgkjdshf). Потом проверяйте, что он изменился. Или у вас капча имеет вид captcha.php ?
3) Если уж совсем туго, можете воспользоваться JS: добавляйте через document.body.addChildren какой-нибудь невидимый input type="hidden". Наверное, даже, его лучше прибавлять к футеру. Как только он исчезнет - страница начала перезагрузку.
4) Да, анализ "исчезновение - появление" может быть забагованным. Им пользоваться нужно оочень осторожно. Хороший JS-код может поменять DOM страницы достаточно быстро и селениум ничего не может с этим поделать.
тупиковых ситуаций не бывает =)

В firebug (и в стандартных девтулз Firefox) есть инструмент, который позволяет подсветить изменившиеся элементы. Попробуйте посмотреть, где происходят изменения.


1. Выдает. Но можно ж ввести капчу и два и три раза неправильно, поэтому и это поле потом не меняется. Хотя там такой сайт, что чего угодно можно ждать :) Может и начальная страница подгрузиться внезапно :)
2. А вот за этот вариант большое спасибо! Что-то в голову не пришло сразу, что источник меняться может.
3. Интересная мысль, если будет туго - опробую :) Спасибо.

Да, тупиковых ситуаций, возможно и не бывает :) Но иногда просто не знаешь как из нее выкрутиться :) Может я и дошел бы сам до этого, но когда - черт его знает :) В данной ситуации (с капчей) я уже дошел до варианта сравнивать сами картинки - некрасиво, но вариант :)



сравнивать картинки - вполне себе решение, я его приберёг для следующего ответа, вы сами до него раньше добрались =)

1. Да, но тогда поле со значением капчи у вас сброситься должно. Кука измениться должна. Да что угодно =)



#126128 Ability to fetch slotCounts from /grid/api/hub

Отправлено автор: leipreachan 23 января 2014 - 13:46 в Selenium - Functional Testing

Как обычно, ответы на свои вопросы я нахожу сам.

 

Итак, если кому-то это интересно и человек забредёт в этот топик, то ответ ниже.

 

запускаем сервер:

$ java -jar selenium-server-2.37.0.jar -role hub -hubConfig hub.json -servlets org.openqa.grid.web.servlet.HubStatusServlet

и далее через cURL кидаем запрос:

$ сurl -XGET http://localhost:5555/grid/api/hub -d '{"configuration":["slotCounts"]}'

Через firefox / phpstorm / eclipse и т.п., через различные приблуды и расширения FF и Chrome этого не получается сделать, т.к. запрос нарушает RFC. Но curl делает то, что вы ему скажете. И возвращает ответ :)




#126488 Как изменить firefoxDriver.js

Отправлено автор: leipreachan 03 февраля 2014 - 09:49 в Selenium - Functional Testing

если хотите проставить куки на домене вида *.вашдомен.com из кода, который выполняется на вашдомен.com, только по-быстрому, то по-быстрому так не получится:) создайте пустую страницу на нужном домене и проставляйте куки на ней.

либо используйте готовый профиль

 

 

Здравствуйте!

 

Возник следующий вопрос: как изменить файл firefoxDriver.js? Не могу найти место, где он лежит. Или нужно качать исходники, в них менять этот файл и собирать из исходников?

Хочу удалить вот этот код:

if (currDomain.indexOf(cookie.domain) == -1) {  // Not quite right, but close enough
   throw new WebDriverError(ErrorCode.INVALID_COOKIE_DOMAIN,
       "You may only set cookies for the current domain");
 }

так как необходимо обойти валидацию домена во время установки cookies.

Спасибо за ответ!




#126489 Basic Authentication Window + WebDriver + Thucidides

Отправлено автор: leipreachan 03 февраля 2014 - 09:50 в Selenium - Functional Testing

для решения подобных проблем есть BrowserMobProxy




#126490 Как использовать PHPBrowserMobProxy

Отправлено автор: leipreachan 03 февраля 2014 - 09:53 в Selenium - Functional Testing

Вообще изменение реферера понадобилось, чтобы указать с какой страницы был произведен переход. 

Почему-то в селениуме, когда я, например, в гугле нажимаю на какую-нибудь ссылку, то она открывается не в соседней вкладке, а в отдельном окне, при чем в нем не сохраняется откуда был произведен переход. Как это обойти не получилось придумать.

target="_blank"  у элемента можно было убрать =)




#126511 Basic Authentication Window + WebDriver + Thucidides

Отправлено автор: leipreachan 03 февраля 2014 - 15:23 в Selenium - Functional Testing

и к тому же,в моем случае,как я понял, необходимо:When you set a proxy for any given driver, it is set only at the time WebDriver session is created; it cannot be changed at runtime. Even if you get the capabilities of the created session, you won't be able to change it. So the answer is, no, you must start a new session if you want to use different proxy settings.

 

поскольку у меня и url,pass and login различные

 

а мне надо,чтобы ,после нажатия на клик,просто открывалась нужная страница, буду признателенза пример или совет

 

спасибо

 

эм.. так инициализируйте два объекта BrowserMob. Первый для одной страницы, второй - для другой.




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

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

опять 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  есть возможность подсвечивать элементы, которые появляются на странице. Убедитесь, что нужный вам элемент не "перепоявялется"




#126587 Как использовать PHPBrowserMobProxy

Отправлено автор: leipreachan 05 февраля 2014 - 08:09 в Selenium - Functional Testing

 

 

Вообще изменение реферера понадобилось, чтобы указать с какой страницы был произведен переход. 

Почему-то в селениуме, когда я, например, в гугле нажимаю на какую-нибудь ссылку, то она открывается не в соседней вкладке, а в отдельном окне, при чем в нем не сохраняется откуда был произведен переход. Как это обойти не получилось придумать.

target="_blank"  у элемента можно было убрать =)

 

В том то и дело, что нельзя. Сайт сторонний 

 

 

Ну вы же на него заходите селениумом?

Так используйте setAttribute('target','')




#126588 Как изменить firefoxDriver.js

Отправлено автор: leipreachan 05 февраля 2014 - 08:12 в Selenium - Functional Testing

Вот так все работает:

>>> from selenium import webdriver
>>> ff = webdriver.Firefox()
>>> ff.add_cookie({'domain': 'localhost', 'name': 'test', 'value': 123})
>>> ff.get('http://localhost:8888/')

Кука установилась. Думаю, что и для других доменов все будет в порядке.

Если нужно (и можно) - могу выложить модифицированый webdriver.xpi

 

1) Вы можете ставить куки через JS - в тесте прямо модифицируете код страницы, добавляя к нему кусок JS, чтобы он ставил за вас нужные вам куки

2) Вы можете использовать BrowserMob, который будет встраивать JS ещё до селениума

 

с другой стороны, если вас устраивает перекомпиляция webdriver-а, то это тоже решение =)




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

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

 

опять 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 локатором, а именно внутренним идентификатором в движке браузера) уже нет.




#126689 Загрузка страницы в phantomjs

Отправлено автор: leipreachan 07 февраля 2014 - 07:32 в Selenium - Functional Testing

В Selenium 2 при использовании браузера Phantomjs, .get(url) не дожидается полной загрузки страницы и переходит к следующей строке кода. Сейчас проверяю видимость необходимых мне элементов перед тем как выполнить следующее действие. 

Можно ли проверить из теста, загрузилась страница или нет? На странице куча ajax.

 

UPD: также требуется после клика по элементу узнать подгрузился ли ajax - это возможно?

1) "Можно ли проверить из теста, загрузилась страница или нет? На странице куча ajax."

а что вы понимаете под "загрузилась"? все картинки и скрипты подгрузились? если они прописаны в исходниках страницы - селениум ждёт. А если есть какие-то события, отличные от onload, сгенерённые какой-то JS-магией, то их невозможно "просто так" получить.

 

2) Какой у вас js-фреймворк?

 

3) "также требуется после клика по элементу узнать подгрузился ли ajax - это возможно?" Решения для общего случая нет. Только для частных: искать переменную, которая меняется в JS после окончания загрузки, смотреть её состояние, искать элемент и т.п.




#126705 Проблемы с кодировкой при сборке на TeamCity

Отправлено автор: leipreachan 07 февраля 2014 - 11:50 в Selenium - Functional Testing

Добавил в настройках build step шаг build, и кириллица перестала работать. Ранее я собирал локально через eclipse, а черех TC только прогонял тесты - поэтому было все хорошо.

 

Кто - нибудь знает как правильно задать кодировку шагу build ?

 

пишу на java, соответственно собираю при помощи ant

причём тут селениум?

 

где и как перестала работать кириллица?