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

Публикации leipreachan

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



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

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




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




#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

 

 

 

 

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




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

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

Уважаемый,

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

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

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

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

 

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




#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

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




#127176 Не выбирается елемент из dropdown -а при использовании Firefox driver

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

 

Погодите, у вас там

<select/>

или

<ul><li /> </ul>

?

 

Нет ли там хитрости с наведением, фокусировкой, магией JS с навешиванием обработчиков?

<ul><li /> </ul> , магия JS присутствует у нас в компании повсеместно ;) ; возможно что то из того что вы описали присутствует...сейчас не могу сказать с уверенностью.

Но когда Firefox driver кликает по нему, анимация наведения на элемент отсутствует.

 

 

вероятно, у вас событие как-то не так обрабатывается. Либо onMouseOver, либо click

рекомендую прямо в JS-коде влепить отладочные сообщение и во время выполения теста посмотреть, что там всё-таки происходит

как второй вариант - попробуйте кликать (или вызывать mouseOver) по элементу прямо через JS.

Лично мне это помогает найти тот элемент, который "ведёт себя не так".




#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




#127123 Не выбирается елемент из dropdown -а при использовании Firefox driver

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

Погодите, у вас там

<select/>

или

<ul><li /> </ul>

?

 

Нет ли там хитрости с наведением, фокусировкой, магией JS с навешиванием обработчиков?




#127248 Selenium + PHP + ?

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

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

 

 

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

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

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




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




#128905 Связка WebDriver + TestNG + Bamboo

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

 

К чему теория, просто запустите Bamboo и вперёд!

Появятся проблемы -- приходите и задавайте вопросы :)

Появился вопрос - хочу запускать webdriver тесты на отдельной машине. Опыта с Bamboo нет. Девы на днях переведут проект на Bamboo, следующим шагом будет попробовать запускать unit тесты и ui тесты. UI тесты (Selenium Webdriver) пока запускаю у себя на машине с командной строки при помощи maven. В какую сторону копать? С чего вообще начать? Bamboo должен удалённо запускать тесты на отдельной машине и получать оттуда результаты. 

 

Bamboo, по моему личному мнению - крайне глючная вещь. Лучше Jenkins используйте.




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




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

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




#128923 Связка WebDriver + TestNG + Bamboo

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

Тут требование клиента, так что...

соболезную =)




#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




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

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

phpunit.de




#128930 Зависимые тесты

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

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

 

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

 

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




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




#128903 Зависимые тесты

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

их независимость позволяет реализовать две вещи:

1) параллельный запуск тестов

2) падение одной компоненты не будет останавливать работу всего набора.




#126955 Обход StaleElementReferenceError: el is not attached в js

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

 

Если "исключение не перехватывается" это либо ошибка в Java (что маловероятно :)), либо ошибка в Вашем коде -- скорее всего исключение возникает не там, где Вы его пытаетесь перехватывать. Покажите полный stacktrace, может быть это добавит ясности, где оно возникает.

Потерзал наших java скриптеров и они ответили то же что и вы :) ('скорее всего исключение возникает не там, где Вы его пытаетесь перехватывать').

error нужно перехватывать в error callback -e:

driver.wait(function() {
        return driver.findElement(target).click().then(
            function(click) { return true },
            function(err)   { return false }
        );
}, 10000);

В порядке эксперимента разделите получение элемента (где и вылетает это исключение) от клика по нему. Оберните в try{} catch {} именно findElement.

 

кстати, элемент у вас, случайно, не двигается во время клика?




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

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

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



#127125 Обход StaleElementReferenceError: el is not attached в js

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

 

В порядке эксперимента разделите получение элемента (где и вылетает это исключение) от клика по нему. Оберните в try{} catch {} именно findElement.

 

кстати, элемент у вас, случайно, не двигается во время клика?

 

 

Вылетало именно при попытке .click(), елемент передобавлялся в DOM из за чего и вылетала ошибка.

try...catch не подходит для ассинхронного кода. Ошибка приходит именно в этот error callback , function(err) где мы и обрабатываем полученную ошибку.

 

Сейчас в этом коде при любой ошибке просто возвращаеться false в wait и wait пытается еще раз попробовать найти елемент и сделать клик.

 

 

Можно написать как то так, что бы перехватывать именно нужную ошибку.

    driver.wait(function() {
        return driver.findElement(target).click().then(
            function(click) { return true },
            function(err) { 
                if (err = StaleElementReferenceError) {
                    return false;
                } else {
                    throw err;
                }
            }
        );
    }, 10000);

 

 

ээ

для асинхронного - не подходит, но ведь findElement и click должны выполняться последовательно.   а, понял о чём вы. wait асинхронный.

 

Вы написали именно то, что я и имел в виду. Более удобного способа обходить StaleElementException я не знаю.




#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, то он и будет на локалхосте