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

Публикации leipreachan

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



#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




#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




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

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

barancev

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

 

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




#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, реализованном через вёрстку :)




#127248 Selenium + PHP + ?

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

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

 

 

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

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

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




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

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

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

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




#127207 Запуска Selenium'a из сайта или есть готовые framework?

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

Для нашей команды в teamcity я настроил билды с возможностью указание группы тестов (указывается в аннотации). Так получается более гибко, чем VisualPHPUnit. Последний подходит в том случае, если команда оч. небольшая и нет вероятности, что кто-то забьёт селениум-ферму.  К тому же, отсутствуют стандартные плюшки всех CI-серверов (статистика и т.п.)




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

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




#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 я не знаю.




#127124 Запуска Selenium'a из сайта или есть готовые framework?

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

Так это виртуалки. А где дистрибы ?

Уважаемый, это уже вам следует искать в google.com




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

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

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

<select/>

или

<ul><li /> </ul>

?

 

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




#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  не принято, т.к. такой код "плохо пахнет" =)




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

}




#126983 Запуска Selenium'a из сайта или есть готовые framework?

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

 

 

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


 

 

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


 

Дайте,пожалйста, ссылку на сие творение ?

 

 

еле нашёл о нем упоминание

 

http://www.methodsan...ols.php?bromine

 

 

(искать тут http://web.archive.o...q.org/projects)

 

вообще, потом, похоже, его идеи фукидид (thucydides) перехватил.




#126960 Запуска Selenium'a из сайта или есть готовые framework?

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

Sauce Labsи Nerrvana - по функциональности подобное им, но чтобы я мог установить на свой хост

 

Вам для этого ещё свою серверную стойку надо будет завести.




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

 

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




#126954 Запуска Selenium'a из сайта или есть готовые framework?

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

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

Он для любого языка

ищите по ключевым словам Continious Integration server

их много - teamcity, jenkins, hudson, travis и другие.

 

 

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

 

вот, например, "на почитать"

http://www.browserst...ous-integration




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

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

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

 

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

 

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

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

 

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




#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 после окончания загрузки, смотреть её состояние, искать элемент и т.п.




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




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




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

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

 

 

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

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

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

 

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

 

 

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

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




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