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

Публикации leipreachan

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



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

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

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


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



#127246 Обновление DOM

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

Подскажите, пожалуйста, как обновить DOM, без перезагрузки страницы, при помощи Selenium?

начнём с начала - а вам для чего?




#127276 Обновление DOM

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

Вопрос решен.

Всплывающее окно оказалось просто новым элемент в HTML-тэге исходной страницы.

Для обращения к элементу появившегося окна необходимо выполнить (XPath изменен на корректный):

time.sleep(10)
driver.find_element_by_xpath("//div[@class='nameId']/div[@sbisname='Ok']/div").click();

За решение спасибо Petrov.Sergey

 

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

Всплывающее окно - это новое окно браузера. Вы говорили о каком-то popup, реализованном через вёрстку :)




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

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

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

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



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

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

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

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



#128189 PHPUnit + Selenium Grid: Какой должен быть шаблон теста чтобы запускат

Отправлено автор: leipreachan 13 марта 2014 - 08:00 в Selenium - Functional Testing

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

в phpunit реализация параллельного запуска тестов ложится на плечи разработчика, selenium и grid тут не при чём.




#128144 PHPUnit + Selenium Grid: Какой должен быть шаблон теста чтобы запускат

Отправлено автор: leipreachan 12 марта 2014 - 14:28 в Selenium - Functional Testing

Использую Selenium Grid с PHPUnit. Подскажите, какой должен быть шаблон теста, чтобы одновременно запускать несколько тестов ?

поясните, что вы имеете в виду? какой шаблон теста?

в чём проблема запускать несколько тестов?




#128195 PHPUnit + Selenium Grid: Какой должен быть шаблон теста чтобы запускат

Отправлено автор: leipreachan 13 марта 2014 - 08:34 в Selenium - Functional Testing

а как тест должен выглядеть сам, который выполняется одновременно в нескольких браузерах ?

 

формально, любой тест можно запустить на любом браузере. если ваше приложение работает одинаково во всех браузерах, то он и проходить везде будет.




#128269 PHPUnit + Selenium Grid: Какой должен быть шаблон теста чтобы запускат

Отправлено автор: leipreachan 14 марта 2014 - 11:02 в Selenium - Functional Testing

В описании обещали

-browser < params > Если параметр -browser не задан, узел запустится с пятью экземплярами Firefox, пятью Chrome и одним Internet Explorer (предполагается, что это Windows-машина). Для задания различных типов браузеров можно несколько раз указать этот параметр в одной строке.

да, он именно такое количество сессий будет обслуживать

не путайте "возможность обслужить" selenium-ом и то, как вы тесты будете запускать.




#128220 PHPUnit + Selenium Grid: Какой должен быть шаблон теста чтобы запускат

Отправлено автор: leipreachan 13 марта 2014 - 14:11 в Selenium - Functional Testing

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

запускайте четыре теста одновременно на разных браузерах.

phpunit преполагает, что вы будете делать именно так




#127302 Разрыв соединения с сервером

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

barancev

Не помогает. У меня предполагается 100000 запросов. Сначала сервер позволил сделать примерно 2000 запросов, затем 400, теперь каждые 200 запросов рвется соединение.

 

bash-скрипт + curl, вот ваше решение. Не нужен вам Селениум, скорее всего




#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) есть инструмент, который позволяет подсветить изменившиеся элементы. Попробуйте посмотреть, где происходят изменения.



#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'). Тогда, в общем-то, загрузку страницы можно не ждать, а сразу проверять наличие элементов на странице и работать с ними при появлении. Но и в этом варианте есть свои подводные камни - Например, когда обновляешь страницу, ищешь элементы, находишь их, но находишь их на СТАРОЙ странице, которая еще не обновилась, то есть ты не знаешь с какой страницы нашел элемент со старой, или с уже новой, так как не знаешь загрузилась ли уже страница. По крайней мере, я не нашел способа проверки загрузилась ли уже страница в этом режиме. Может кто-нить знает способ?
Вот я и подумал, что может быть можно было б менять в процессе работы этот параметр, чтобы, когда надо работать в "нестабильном" режиме, а когда надо - в нормальном

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



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



#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. Да, но тогда поле со значением капчи у вас сброситься должно. Кука измениться должна. Да что угодно =)



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

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

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

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



#126990 Передача значения переменой a функцию

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

 

Нечего в sendKeys интеджер пхать :-)

:rofl:

А слона-то я и не приметил.

Вообще странно, IDE обычно пишет чёрным по-жёлтому:

140213_17645dda.png

Перевод: метод sendKeys(CharSequence...) у типа WebElement не поддерживает аргументы (int)

 

Я думал, там какой-то Exception вываливается.

 

Топик-стартеру:

Решение элементарно

void log_out2(int num) throws Exception
{
	//////////*************///////////////////////
	driver.findElement(By.id("username")).clear();
	driver.findElement(By.id("username")).sendKeys("" + num);
	//////////**************///////////////////
 
}

 

driver.findElement(By.id("username")).sendKeys("" + num);

так нельзя делать, ай-ай-ай!!!

if (num!=null) {

 driver.findElement(By.id("username")).sendKeys(num.toString());

}




#127093 Передача значения переменой a функцию

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

 

driver.findElement(By.id("username")).sendKeys("" + num);

так нельзя делать, ай-ай-ай!!!

if (num!=null) {

 driver.findElement(By.id("username")).sendKeys(num.toString());

}

 

num не может быть равен null, потому что num объявлен как int - это не объект, а примитивный тип.

Если бы num был объявлен как объект Integer, тогда проверка на null нужна обязательно.

 

А вот Ваш код должен выдать ошибку IDE:

140213_17cd0479.png

 

 

 

вы правы насчёт ошибки IDE (пару лет уже на java не писал), общий смысл был в использовании toString() =)

 

Использовать конструкцию ""+int  не принято, т.к. такой код "плохо пахнет" =)




#128909 Selenium+PHPUnit: как одновременно запустить тест параллельно в разных

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

Не, Леприкон, тут другое, один тест одновременно на разных браузерах, хотя, вопрос сомнителен...

А там простое параллельное исполнение разных тестов.

для java это можно сделать через dataprovider (т.к. параллелить там проще), в пыхе - через кастомный скрипт. Вроде бы соус лаб как раз в скрипте и оставлял лазейку для опций. Но вы правы, вопрос незначительно отличается. Окей




#128904 Selenium+PHPUnit: как одновременно запустить тест параллельно в разных

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

 

Дайте угадаю, а браузеров должно быть очень (т.е. под сотню - две) много?

Один тест и разные браузеры googlechrome, ie, firefox

 

вы это уже третий или четвёртый раз спрашиваете, серьёзно.

Вам же дали даже пример кода на PHP, как это реализуется в sauce labs




#128068 как не ждать загрузку страницы и не падать с ошибкой?

Отправлено автор: leipreachan 11 марта 2014 - 14:25 в Selenium - Functional Testing

а чего нужно добиться и на каком инструменте/языке?

 

У меня php. Если метод open() (он же /url) всегда будет ждать загрузки страницы, то тупящий рисунок в футере автоматически замедляет тест.

Хочу иметь возможность самому определять то, что страничка загрузилась достаточно хорошо =)




#127628 Selenium RC + PHPUnit. Создание нового окна

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

Возникла с открытием нового окна.

Если я нахожусь на сайте с https, то команда

$this->openWindow('http://primer.ru', 'primer');
$this->selectWindow('primer');

выдает ошибка, что окна "primer" не существует. Хотя я вижу, что оно открыто. Таймауты не помогают. Также я пробовала выводить список открытых окон. Окна "primer" в этом списке не было, будто оно и не открывалось.

 

Как можно обойти это?

 

Более правильно будет:

$this->selectWindow('name=primer');

насколько я помню, openWindow именно имя окна задаёт




#127681 Selenium RC + PHPUnit. Создание нового окна

Отправлено автор: leipreachan 03 марта 2014 - 07:47 в Selenium - Functional Testing

 

 

Возникла с открытием нового окна.

Если я нахожусь на сайте с https, то команда

$this->openWindow('http://primer.ru', 'primer');
$this->selectWindow('primer');

выдает ошибка, что окна "primer" не существует. Хотя я вижу, что оно открыто. Таймауты не помогают. Также я пробовала выводить список открытых окон. Окна "primer" в этом списке не было, будто оно и не открывалось.

 

Как можно обойти это?

 

Более правильно будет:

$this->selectWindow('name=primer');

насколько я помню, openWindow именно имя окна задаёт

 

Нет, он именно окно создает с именем "primer". 

Но тут казус. Он вроде бы его создает, я его вижу открытым. НО! Сам селениум его не видит. Говорит, что нет такого окна, как бы я его не искала

 

ну так я вам и предлагаю обратиться к окну по имени

если вы используете Selenium RC,  а не webdriver, то selectWindow предполагает в качестве аргумента локатор в виде:

title=заголовок_окна

name=название_окна

var=переменная_окна

 

openWindow, насколько мне не изменяет память, создаёт именно окно с имененм, которое вы указываете вторым аргументом

 

тут вот: http://release.selen...va.lang.String)

ссылка на старое API для java. Но оно на 99% повторяет API для php, особенно в плане формата данных, попадающих на сервер. Так что попробуйте, всё-таки,

$this->selectWindow('name=primer');




#128065 как не ждать загрузку страницы и не падать с ошибкой?

Отправлено автор: leipreachan 11 марта 2014 - 14:17 в Selenium - Functional Testing

Привет

 

В jsonwiredprotocol есть метод /url, который позволяет перейти по известному адресу.

Для него через "/timeouts" выставляется таймаут на то, сколько мы будем ждать загрузки страницы.

 

Но проблема в том, что если на страничке тупит какой-нибудь малозначительный рисунок, то /url будет ждать загрузки по максимуму, а потом упадёт с ошибкой "Timed out waiting for page load"

 

Никто не придумал ничего лучше, кроме try{}catch{} ?




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

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

 

 

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

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

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

 

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

 

 

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

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




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

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

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

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

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