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

Публикации leipreachan

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



#128308 Ожидание появления элемента

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

На сайте имеется кнопка, при нажатии на которую появляется pop-up с выпадающим списком, на который необходимо нажать.

Тем не менее, иногда браузер не успевает отобразить выпадающий список и генерируется ошибка. WaitElement() и Thread.sleep() по какой-то причине иногда не помогают.

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

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

 

popup с выпадающим списком? это отдельное окно в IE или это какой-то элемент сайта, который маскируется под обычный попап?




#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? возможно, проблема в брандмауэре?



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

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

Всем привет!

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

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



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




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




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




#127586 Selenium+PHPUnit как обращаться к своему курсору мыши из селениума

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

 

 

вот мне нужно реализовать такую команду

dragAndDropToObject ( locatorOfObjectToBeDragged,locatorOfDragDestinationObject ) 
можете пример привести как конкретно, потому что при наведении на ту форму мышью, её курсор изменён на свой?

 

А какая разница, как выглядит курсор мыши? В смысле, как, по-вашему, зависят действия:
1) найти первый объект по локатору
2) найти второй объект по локатору
3) схватить мышью первый объект
4) переместить курсор мыши на второй объект
5) отпустить мышь
от формы курсора мыши?

Вообще, форма курсора мыши - лишь визуализация. Сама "мышь" в понимании ОС - это точка, бегающая по экрану.

P.S. А Вы в курсе, что при наведении мышки на кнопку курсор один, при наведении мышки на ссылку курсор другой, а просто так курсор может быть третьим? И как в таком случае кликать по ссылкам и кнопочкам - проблемы возникают?

 

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

 

 

1) мы тут не телепаты :) мы не видим, что кроется под вашей фразой "не получается просто так взять и схватить объект и перетащить". Что получается? какие JS ошибки? Что говорит selenium RC по этому поводу? Пробовали то же самое на Webdriver сделать? А какой браузер? А какая версия?

2) С листбоксом отдельный вопрос. Что это? html-элемент select? или что-то своё, внутрипроектное?

 

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




#127501 Selenium+PHPUnit как обращаться к своему курсору мыши из селениума

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

Если в коде был изменён курсор мыши на свой, то как к нему обращаться из селениума?
attachicon.gifcursor.png

через javascript




#127450 Selenium+PHPUnit свежая документация

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

phpunit.de




#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"  у элемента можно было убрать =)




#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 делает то, что вы ему скажете. И возвращает ответ :)




#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/ - возвращается конфигурация.
А как запросить свободные слоты-то? Что я ни кидаю - всегда возвращается полная конфигурация.

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



#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-а, то это тоже решение =)




#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.

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




#129715 Запуск тестов в одном браузере

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

Всем добрый день!!!

Вопрос такого плана(С#).

Вообщем есть несколько тестов.

Gо окончанию теста браузер закрывается и снова идет запуск.

Как реализовать, чтоб прошли все тесты и браузер был закрыт только после окончания последнего теста.

Спасибо!!!

 

Обычно тестовый фреймворк закрывает сессию (и браузер) в tearDown() методе (или его аналоге)

 

Вам следует переопределить tearDown(), чтобы сессия не закрывалась автоматически, а закрывалась только, например, в tearDownAfterClass().

Разумеется, в setUp() методе следует проверять наличие активной сессии.

 

У меня так и реализовано.

 

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




#127248 Selenium + PHP + ?

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

Хотелось бы узнать сколько людей юзает такую связку? У скольких  все тесты запускаются, без долгого мозгоё..тва? Как по мне, пока php официально не будет поддерживаться Selenium, писать тесты в такой связке точно не в удовольствие, а тем более для начинающих автоматизаторов. Большинство новичков привлекает эта связка только потому что php легок в обучении...

 

 

В чем проблема лично у вас при написании тестов на php? (если в компании всё пишется на php)

Что вам нужно от официальной поддержки? Биндинги? JsonWired protocol - это официально поддерживаемая часть Selenium.

А из компаний, который используют php + selenium я вам назову, например, Facebook




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

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

Уважаемый,

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

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

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

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

 

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




#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




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

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

 

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

 

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

 

 

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

 

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

 

 

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

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

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




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

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

 

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

 

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

 

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

 

 

 

 

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




#127413 [Selenium+PHPUnit]

Отправлено автор: leipreachan 24 февраля 2014 - 10:40 в Selenium - Functional Testing

<?php
class Example extends PHPUnit_Extensions_SeleniumTestCase
{
  protected function setUp()
  {
    $this->setBrowser('firefox');
    $this->setBrowserUrl("https://www.google.ru/");
  }

  public function testMyTestCase()
  {
    $this->open("/");
    $this->type("id=gbqfq", "hello");
    $this->click("id=gbqfb");
    $this->waitForPageToLoad("10000");
    $this->click("id=hdtb_tls");
  }
}
?>

Почему то на строке

$this->waitForPageToLoad("10000");

выдаёт ошибку

 

E

Time: 18.26 seconds, Memory: 2.50Mb

There was 1 error:

1) Example::testMyTestCase

Invalid response while accessing the Selenium Server at 'http://localhost:4444/s
elenium-server/driver/': Timed out after 10000ms

C:\Users\tester\Downloads\php-webdriver-master\name.php:15
C:\Users\tester\Downloads\php-webdriver-master\name.php:15

Caused by
RuntimeException: Invalid response while accessing the Selenium Server at 'http:
//localhost:4444/selenium-server/driver/': Timed out after 10000ms

C:\Users\tester\Downloads\php-webdriver-master\name.php:15
C:\Users\tester\Downloads\php-webdriver-master\name.php:15

FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
 

 

хотя страница уже загрузилась.
Почему не может выполнить следующую строку ?

 

 

последуйте советам выше, а ещё даже не начинайте писать тесты с использованием selenium RC, пишите сразу на Webdriver.

 

для этого начните использовать PHPUnit_Extensions_Selenium2TestCase, а не Selenium




#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 тут не при чём.