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

Публикации leipreachan

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



#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 преполагает, что вы будете делать именно так




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

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

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

 

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




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

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

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

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




#128187 Тестовое задание на собеседование ufs-online.ru

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

 

1) Простите, но итерации без условия - вечный цикл.

Давайте говорить в рамках терминологии http://ru.wikipedia....рограммирование

 

Давайте. Вы сказали об "итерации". Приведите тогда определение итерации, в вики есть "цикл".

 

Мы точно об одном и том же говорим? Цикл почти везде можно реализовать через for(), while() и do{}while(). Каждый из этих циклов суть есть действия, которые повторяются до достижения какого-то условия. Не прямое IF, но, тем не менее, условие.

 

 


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

Опять не удачный пример - вполне себе нормальный тест:
1. Выберете журнал ХХХ
2. Проверьте что у данного журнала существуют подписки на месяц, полгода, года, десять лет
3. Нажмите на подписку на месяц
4. Проверьте что цена посчиталась правильно
5. Нажмите на подписку на полгода
6. Проверьте что цена посчиталась правильно
7. Нажмите на подписку на год
8. Проверьте что цена посчиталась правильно
9. Нажмите на подписку на десять лет
10. Проверьте что цена посчиталась правильно

Вполне себе ТК на 5 степов (остальные это верифаи). Городить тут циклы/хешмэпы/массивы/дата_провайдеры просто не к чему. Вы скажите, а если бы вариантов подписки было over 9000+? Тут классы эквивалентности в помощь, т.к. у этих over 9000+ верифаев КПД будет околонулевой.

 

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

Вообще, это уже становится похоже на спор "функциональное программирование vs ООП".

 

Если вы и правда сильно разделяете требования к коду тестов и page objects.. ну ок, что.

Для справки: в моих 300+ тестах на биллинг (т.е. интеграции с paypal, adyen, globalcollect, googlewallet и т.п.) 0 "for", 25 "if", 0 "findElements", но я, тем не менее, считаю, что ваше утверждение про 90% черезчур категоричным.




#128183 Тестовое задание на собеседование ufs-online.ru

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

 

 

 

а тот тест, который вы привели - да, это глупо. Но если залезть дальше такого примитивного теста (например, в интеграционные тесты) - там не обойтись без условий.

 

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

 

 

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

 

Кажется, вы мне пытаетесь доказать, что тесткейс не должен содержать ветвления, а что уж у него в API творится (в page objects или что вы там используете) - это к тесту не имеет отношения?

 

Право, мне интересно, если вы описываете интерфейс страницы, в которой есть обязательные элементы, то, например, метод validateMandatoryElements() у вас будет просто перечислением десяти элементов? Прямо вот в так вот:

selenium.isElementPresent('someElement1');
selenium.isElementPresent('someElement2');
selenium.isElementPresent('someElement3');
selenium.isElementPresent('someElement4');

?




#128181 Selenium Grid (parallel testing)

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

Проблема не в selenium grid, а в phpunit.

Чтобы добиться паралельного выполнения, каждый тест должен запускаться в отдельном потоке. Это очень красиво реализовано в testNG. В phpunit же есть аннотация @runTestsInSeparateProcesses или ключ --process-isolation . Но они не работаю. Себастьян Бергман(разработчик phpunit) обещает исправить этот баг в версии 4.x

Будем ждать, а пока ребята из saurcelabs нашли вот такой workaround.

Так же можно попробовать реализовать свое распределение тестов с помощью maven и/или других build тулов.

параллельте своими средствами. например, через ant

проблема запуска своими средствами в том, что накладные расходы очень высокие. но по-другому пока никак




#128149 Тестовое задание на собеседование ufs-online.ru

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

 

В топике речь о функциональном UI тестировании, поэтому fuzzy "за бортом".

 

 

 

А можно пример, когда нельзя однозначно определить элемент по локатору, а итерации среди кандидатов могут?

 

Я могу привести пример. A/B тестирование, например.

 

Если вы не можете повлиять на то, в какую фокус-группу попадает ваш тестовый пользователь, то вам нужно добавлять ветвление в тест (тесткейс / зависимый тест / или как вы их там группируете).

 

Вы наверное не то сообщение процитировали, так как вопрос про итерации, а ответ про ветвление. 

 

В случае А/В безусловно будут иметь место всяческие ухищрения (альтернативные локаторы/сценарии) - много чего можно наворотить, но не в виде


public void test(){
  if (element1.exist()){
   button1.click();
}else{
   button2.click()
}
}

 

вроде бы, то процитировал, что хотел.

 

1) Простите, но итерации без условия - вечный цикл.

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

Вы можете сказать: "хха, тут нужно использовать датапровайдеры!", на что я вам отвечу: "хха, датапровайдеры не всегда можно использовать, если добрать до какого-нибудь раздела занимает, например, 40 секунд (тестом), а прокликать все варианты цен - десять.

Вы (я предполагаю, что вы так предложите), заявите: ну и что. Я их распараллелю и все тесты будут проходить в 45 секунд, просто в пять потоков. А я вам отвечу: а что если задача сложнее? если я не могу параллелить именно этот тест? Например, потому, что именно при переключении с одного периода подписки на другой уже неоднократно находили ошибку?

 

Мне кажется, вы слишком категорично говорите о том, что "нельзя использовать циклы и условия!!"

 

а тот тест, который вы привели - да, это глупо. Но если залезть дальше такого примитивного теста (например, в интеграционные тесты) - там не обойтись без условий.




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

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

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

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

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




#128129 Тестовое задание на собеседование ufs-online.ru

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

 

А почему, собственно, нельзя?
"Ввести любое значение из такого-то класса эквивалентности" -- уж так-то точно можно делать.

В теории и в примитивных случаях, либо в случаях когда нужна рандомизация - можно ("Введите имя пользователя из 8 букв").В остальных случаях вся эта не детерминированность кроме проблем "У меня все работает!" и т.д. никакой пользы не несет => вредна.

 

 

Раз вы настолько критичны, я вам предложу почитать про fuzzy testing. Автоматизация в этой методологии очень помогает.




#128128 Тестовое задание на собеседование ufs-online.ru

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

 

>> 2. Нет. Но есть xpath/css. Перебирать элементы в цикле, что бы вытащить какой либо аттрибут или текст, или их комбинацию - это ересь.

 

не стоит так однозначно судить. Быввают случаи...

А можно пример, когда нельзя однозначно определить элемент по локатору, а итерации среди кандидатов могут?

 

 

Я могу привести пример. A/B тестирование, например.

 

Если вы не можете повлиять на то, в какую фокус-группу попадает ваш тестовый пользователь, то вам нужно добавлять ветвление в тест (тесткейс / зависимый тест / или как вы их там группируете).




#128107 Не запускается node для selenium grid

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

 

java -jar selenium-server.jar -port 4544 -registerCycle 30000 -role node -hub http://localhost:5555/grid/register

А как он будет регистрировать что-то в localhost'e, если там ничего не лежит?

 

 

не очень понял вопроса.

Если вы сначала запустите grid, то он и будет на локалхосте




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

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

странные ошибки какие-то лезут.

Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Timed out waiting for page load.
Build info: version: '2.39.0', revision: 'ff23eac', time: '2013-12-16 16:11:15'
System info: host: 'selenium', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-51-generic', java.version: '1.7.0_11'
Driver info: driver.version: unknown
        at <anonymous class>.FirefoxDriver.prototype.get/<(file:///tmp/anonymous5033500997647426723webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:8728)
        at <anonymous class>.WebLoadingListener/e(file:///tmp/anonymous5033500997647426723webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:3333)
        at <anonymous class>.WebLoadingListener/<(file:///tmp/anonymous5033500997647426723webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:3340)
        at <anonymous class>.fxdriver.Timer.prototype.setTimeout/<.notify(file:///tmp/anonymous5033500997647426723webdriver-profile/extensions/fxdriver@googlecode.com/components/driver_component.js:396)




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

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

ага

есть ещё webdriver.load.strategy , надо туда посмотреть




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

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

Можно просто игнорировать (логировать конечно, но не падать) все эти исключения внутри WebDriver (или своей обёртки вокруг него) и просто пытаться пройти дальше, если тормозящий элемент был незначителен, то тест пройдёт, а если нет, то где-нибудь свалится.

 

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

 

ну, если не ошибаюсь, то можно удалять элемент джаваскриптом

 

как жеж я верну управление в поток теста, если страничка не загрузилась?=)

у меня синхронный php.




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

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

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

 

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

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




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

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

Привет

 

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

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

 

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

 

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




#128057 Не запускается node для selenium grid

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

grid:

java -jar selenium-server.jar -port 5555 -role hub

node:

java -jar selenium-server.jar -port 4544 -registerCycle 30000 -role node -hub http://localhost:5555/grid/register



#127914 Не работает идентификация пользователя

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

Уважаемый,

1) я знаю, что такое оверквоттинг и создаю его не злонамеренно, да, более того, даже не специально

2) я не нажимаю "Цитата", я нажимаю "Ответить". Вам прикрепить видеоролик с описанием проблемы?

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

А то получается сапожник без сапог какой-то.

 

вообще, я считаю, что оверквоттинг не лучше оффтопика.




#127900 Не работает идентификация пользователя

Отправлено автор: leipreachan 06 марта 2014 - 09:24 в Selenium - Functional Testing

 

Уважаемый, Леприкон, большая просьба - поменьше оверквотинга.

 

или используйте browserproxymob, или заходите на страницу используя адрес вида

 

логин:пароль@server_name

 

 

 

 

если форум так настроен, что не может сам схлопывать длинные цитаты - это должно стать моей проблемой? Очень странно слышать подобный коммент на форуме инженеров по качеству.




#127899 Не работает идентификация пользователя

Отправлено автор: leipreachan 06 марта 2014 - 09:23 в Selenium - Functional Testing

 

или заходите на страницу используя адрес вида

 

логин:пароль@server_name

 

 

не работает. Идентификация не запоминается.

 

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

 

 

https://github.com/l...rowsermob-proxy

удобнее всего использовать в java, но можно и в других языках (правда,тогда не весь функционал раскрывается).

Это прокси-сервер, который может подменять заголовки




#127852 Не работает идентификация пользователя

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

Задача:

    Есть TWiki страницы. В них нужно заменить слово1 на слово2. Сделать это надо на стороне клиента т.е. через web форму.

 

Проблема:

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

 

Открываю строницу в selenium webdriver. При попытке редактировать стриницу возникает запрос на идентификацию, с которым мне не удаются работать ни через селениум ни руками (работает только <ctrl+v> <ctrl+c> и смена фокуса мышкой). Поэтому хочу открыть страницу, один раз ввести пароль руками и все страницы открывать уже будучи идентифицированным (либо научиться работать с этой формой идентификации, но как не понимаю). Но этот редиска не запоминает меня, и запрашивает идентификацию каждый раз при октрытиb новой страницы (даже в одной сессии и в одной вкладке). Как его победить?

 

 

использую selenium-2.39.0 на линуксе, работаю через firefox

 

сервера запускаю так (пытался использовать профайл не помогло. возможно что-то делаю не то):

java -jar selenium-server-standalone-2.39.0.jar -firefoxProfileTemplate /home/msedov/.mozilla/firefox/e8bw0hxb.selenium -log selenium_server.log -debug &

 

код который на сочинял на python

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import StaleElementReferenceException
import time
import pickle

browser = webdriver.Firefox()

link_list = {}
cookies_list = {}

# click edit button in the main TestGroup page
browser.get('http://server_name/twiki/bin/view/TestGroup/WebHome')
print ("Title: '"+browser.title+"'")
element_edit_button = browser.find_element_by_xpath("/html/body/div[3]/div[2]/div/div/ul/li/a/b")
#element_edit_button.click()

try:
    element_edit_button.click()
except StaleElementReferenceException:
    print ("Exception during opening")

# тут появляется идентификационная форма, с которой мне не удается работать
# ввожу данные руками, использую <ctrl+c>, <ctrl+v>

element_edit_text = browser.find_element_by_xpath('//*[@id="topic"]')
print (element_edit_text.text)

element_cancel_button = browser.find_element_by_xpath('//*[@id="cancel"]')
try:
    element_cancel_button.click()
except StaleElementReferenceException:
    print ("Exception during canceling")

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

Отредактировать надо большое кол-во страниц, т.е. руками это делать не вариант.

 

Что я не учитываю? Как победить этого "злого монстра"? Буду рад любой помощи.

или используйте browserproxymob, или заходите на страницу используя адрес вида

 

логин:пароль@server_name




#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');




#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 именно имя окна задаёт




#127627 Selenium ест 1 гиг памяти и вылетает

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

Фантом, всё-таки, не очень стабильная штука. Попробуйте на обычном хроме гонять. Чуть больше накладные расходы, но есть мнение, что там с памятью лучше