Погодите, у вас там
<select/>
или
<ul><li /> </ul>
?
Нет ли там хитрости с наведением, фокусировкой, магией JS с навешиванием обработчиков?
94 публикаций создано leipreachan (учитываются публикации только с 27 сентября 2023)
Отправлено автор: leipreachan 17 февраля 2014 - 07:48 в Selenium - Functional Testing
Погодите, у вас там
<select/>
или
<ul><li /> </ul>
?
Нет ли там хитрости с наведением, фокусировкой, магией JS с навешиванием обработчиков?
Отправлено автор: leipreachan 18 февраля 2014 - 09:01 в Selenium - Functional Testing
Погодите, у вас там
<select/>
или
<ul><li /> </ul>
?
Нет ли там хитрости с наведением, фокусировкой, магией JS с навешиванием обработчиков?
<ul><li /> </ul> , магия JS присутствует у нас в компании повсеместно ;) ; возможно что то из того что вы описали присутствует...сейчас не могу сказать с уверенностью.
Но когда Firefox driver кликает по нему, анимация наведения на элемент отсутствует.
вероятно, у вас событие как-то не так обрабатывается. Либо onMouseOver, либо click
рекомендую прямо в JS-коде влепить отладочные сообщение и во время выполения теста посмотреть, что там всё-таки происходит
как второй вариант - попробуйте кликать (или вызывать mouseOver) по элементу прямо через JS.
Лично мне это помогает найти тот элемент, который "ведёт себя не так".
Отправлено автор: leipreachan 27 ноября 2013 - 11:22 в Selenium - Functional Testing
после обновления на последнии версии всего симптомы остались, но теперь вместо "It may have died..." появляется no such element. Эту ошибку убрали? Теперь непонятно возникла ошибка или же это лажа с тестами
Отправлено автор: leipreachan 28 ноября 2013 - 13:46 в Selenium - Functional Testing
ну, тогда не забудьте туда глянуть в следующий раз.мм, об этом я забыл...
Я удалил прошлый лог файл, а новых фейлов не было и он не создался..
Отправлено автор: leipreachan 28 ноября 2013 - 11:43 в Selenium - Functional Testing
попробуйте обернуть в try{}catch() ожидание элемента с небольшой задержкой, а всё это - в цикл. Если это stalled element, то проблема решится.я посмотрю, но там 90% элементов статичны и не меняются
Отправлено автор: leipreachan 18 марта 2014 - 07:19 в Selenium - Functional Testing
Здравствуйте,
возникла следующая проблема. Имеется в наличии много тестов, разных веб-приложений, которые запускаются автоматически при изменениях в системе (для этих целей используем Jenkins). К сожалению случается, что запускаются 2 теста в одно и то же время на одной и той же машине. И эти тесты друг у друга то и дело крадут фокус. Все бы ничего, но в наличие есть тесты, где при потере фокуса происходит к/л событие (где-то javascript, где-то ajax), из-за которого тест не проходит.
Не сталкивался ли кто с такой проблемой? И как она решается? К сожалению, распределить тесты полностью так, чтобы они бежали в разное время или на разных машинах, нет возможности.
Запускайте на разных машинах =)
или на одной, но используйте xvfb, если под линуксом.
Второй вариант: "исправлять" JS, чтобы элементы не реагировали на смену фокуса.
Отправлено автор: leipreachan 18 марта 2014 - 11:09 в Selenium - Functional Testing
leipreachan, cпасибо за ответ.
Тесты у нас на 4х машинах, все под линуксом. Но, к сожалению, тестов намного больше.
Инетересует именно к/л возможность удерживать фокус при помощи кода. Или единственный способ прямо "жестким" способом залазить в DOM страницы? Или, на крайний случай, может быть есть какая-то логика в том когда фокус перескакивает с теста на тест (пока мне кажется, что это происходит случайным образом)?
Используйте XVFB, если у вас всё под линуксом. Поднимите больше selenium-серверов и каждый с одним инстансом браузера
Логика переключения простая - каждое действие (кроме ожидания элемента) приводит к потере фокуса остальными окнами. С точки зрения OS невозможно держать два окна одновременно в фокусе =)
Отправлено автор: leipreachan 12 декабря 2013 - 07:34 в Selenium - Functional Testing
Нет, так сделать нельзя. А для чего вам понадобилось менять профиль во время работы? Какую проблему вы хотите решить таким способом?
Добрый день, уважаемые!
Подскажите, пожалуйста, возможно ли изменение параметров загруженного профиля ФФ уже в процессе работы? То есть браузер запустился с одним профилем, а в потом, в процессе, потребовалось его изменить. Возможен ли такой маневр?
Понимаю, что, наверное, этот вопрос прозвучал немного странно.
Попробую вкратце объяснить. Пользуюсь Python и FireFox
В Селениум Вебдрайвере есть такой момент, что после get, click, refresh - он ждет загрузки страницы и ни на что при этом не реагирует боле, пока не загрузит. Выйти из этого процесса можно установив set_page_load_timeout. Но! встречаются такие моменты (после click, например иногда) когда Селениум не понимает, что произошел тот самый клик и надо ждать загрузки страницы. При этом программа выполняется дальше, но при любом обращении к вебдрайверу происходит остановка и ожидание загрузки страницы. Но страница, бывает так, что вообще не загружается и висит, а в данной ситуации уже таймаут на загрузку страницы не срабатывает. В итоге получаем полное зависание.
Против всего этого непотребства нашел один вариант - использовать хитрую загрузку профиля с set_preference('webdriver.load.strategy','unstable'). Тогда, в общем-то, загрузку страницы можно не ждать, а сразу проверять наличие элементов на странице и работать с ними при появлении. Но и в этом варианте есть свои подводные камни - Например, когда обновляешь страницу, ищешь элементы, находишь их, но находишь их на СТАРОЙ странице, которая еще не обновилась, то есть ты не знаешь с какой страницы нашел элемент со старой, или с уже новой, так как не знаешь загрузилась ли уже страница. По крайней мере, я не нашел способа проверки загрузилась ли уже страница в этом режиме. Может кто-нить знает способ?
Вот я и подумал, что может быть можно было б менять в процессе работы этот параметр, чтобы, когда надо работать в "нестабильном" режиме, а когда надо - в нормальном
Вот... Сумбурно получилось :) Надеюсь, Вы что-нибудь поняли из моего потока сознания :)
Или я сам все усложняю и есть нормальные способы решения?
Отправлено автор: leipreachan 11 декабря 2013 - 08:37 в Selenium - Functional Testing
эээ.. а у живого пользователя как это планируется делать? через about:config?Добрый день, уважаемые!
Подскажите, пожалуйста, возможно ли изменение параметров загруженного профиля ФФ уже в процессе работы? То есть браузер запустился с одним профилем, а в потом, в процессе, потребовалось его изменить. Возможен ли такой маневр?
Отправлено автор: leipreachan 13 декабря 2013 - 07:38 в Selenium - Functional Testing
Все так, за исключением одного "но". Приведу пример, чтоб понятней было:
Вы пытаетесь решить проблему не тем способом. Вам нужно научиться определять изменение страницы, ведь так?
Попробуйте рассуждать логически - как вы сам определяете, что она загрузилась? По изменению какого-то текста? По появлению элемента? По исчезновению элемента?
Вот от этого и надо писать тест.
Есть страница с капчей. я ввожу капчу и начинаю анализировать появилась ли следующая страница по появлению соответствующих элементов.
Но! Капчу можно решить неправильно и загружается не новая, а та же самая страница с капчей. И вот, все в шоке :)
Приходится еще и мониторить не появились ли те же элементы, что и на странице капчи. То есть, например, будем отслеживать - не появилась ли опять капча. Все бы хорошо, но вступает в силу очередной закон подлости :)
Прикол в том, что когда начинает грузиться страница, то старая еще не пропала, а некоторое время еще висит и Селениум может, как ни странно, с этой страницей работать. И как результат, он находит капчу, но не новую, а старую, и считает, что... да что угодно считает, но считает он это неправильно.
Это только лишь один из примеров тупиковых ситуаций.
Да, кстати, в цикле пробовал анализировать не пропал ли элемент (в нашем случае капча) в промежутке между сменами страниц и только потом запускать процедуру анализа какая страница загрузилась. Но и тут очередной прикол. Иногда, следующая страница появляется практически без паузы. То есть висит еще видимая старая, при этом грузится новая в фоне.. и в какой-то момент бах! - и отрисовалась новая. И Селениум не успевает отследить пропадание, и мы повисаем в бесконечном цикле. Ну, конечно, не бесконечном - из него выходим по прошествии какого-то времени, но все это время мы висим и гоняем впустую процессорное время :)
Отправлено автор: 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. Интересная мысль, если будет туго - опробую :) Спасибо.
Да, тупиковых ситуаций, возможно и не бывает :) Но иногда просто не знаешь как из нее выкрутиться :) Может я и дошел бы сам до этого, но когда - черт его знает :) В данной ситуации (с капчей) я уже дошел до варианта сравнивать сами картинки - некрасиво, но вариант :)
Отправлено автор: leipreachan 28 ноября 2013 - 11:50 в Selenium - Functional Testing
Отправлено автор: leipreachan 20 февраля 2014 - 13:15 в Selenium - Functional Testing
Не помогает. У меня предполагается 100000 запросов. Сначала сервер позволил сделать примерно 2000 запросов, затем 400, теперь каждые 200 запросов рвется соединение.
bash-скрипт + curl, вот ваше решение. Не нужен вам Селениум, скорее всего
Отправлено автор: leipreachan 01 апреля 2014 - 15:08 в Selenium - Functional Testing
Не, Леприкон, тут другое, один тест одновременно на разных браузерах, хотя, вопрос сомнителен...
А там простое параллельное исполнение разных тестов.
для java это можно сделать через dataprovider (т.к. параллелить там проще), в пыхе - через кастомный скрипт. Вроде бы соус лаб как раз в скрипте и оставлял лазейку для опций. Но вы правы, вопрос незначительно отличается. Окей
Отправлено автор: leipreachan 01 апреля 2014 - 14:46 в Selenium - Functional Testing
Дайте угадаю, а браузеров должно быть очень (т.е. под сотню - две) много?
Один тест и разные браузеры googlechrome, ie, firefox
вы это уже третий или четвёртый раз спрашиваете, серьёзно.
Вам же дали даже пример кода на PHP, как это реализуется в sauce labs
Отправлено автор: leipreachan 03 апреля 2014 - 15:43 в Selenium - Functional Testing
тысячи их, а конкретно - это CI-системы. TeamCity, Jenkins, Bamboo, Travis, Cruisecontrol, Hudson и т.п.
Если вам нужно специально под Selenium - тогда либо нужна доработка в вашем фреймворке, либо специальный плагин для CI-сервера.
Отправлено автор: 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
Отправлено автор: leipreachan 14 марта 2014 - 11:02 в Selenium - Functional Testing
В описании обещали
-browser < params > Если параметр -browser не задан, узел запустится с пятью экземплярами Firefox, пятью Chrome и одним Internet Explorer (предполагается, что это Windows-машина). Для задания различных типов браузеров можно несколько раз указать этот параметр в одной строке.
да, он именно такое количество сессий будет обслуживать
не путайте "возможность обслужить" selenium-ом и то, как вы тесты будете запускать.
Отправлено автор: leipreachan 13 марта 2014 - 08:34 в Selenium - Functional Testing
а как тест должен выглядеть сам, который выполняется одновременно в нескольких браузерах ?
формально, любой тест можно запустить на любом браузере. если ваше приложение работает одинаково во всех браузерах, то он и проходить везде будет.
Отправлено автор: leipreachan 12 марта 2014 - 14:28 в Selenium - Functional Testing
Использую Selenium Grid с PHPUnit. Подскажите, какой должен быть шаблон теста, чтобы одновременно запускать несколько тестов ?
поясните, что вы имеете в виду? какой шаблон теста?
в чём проблема запускать несколько тестов?
Отправлено автор: leipreachan 13 марта 2014 - 08:00 в Selenium - Functional Testing
код теста, который выполняется параллельно для нескольких браузеров одновременно
в phpunit реализация параллельного запуска тестов ложится на плечи разработчика, selenium и grid тут не при чём.
Отправлено автор: leipreachan 13 марта 2014 - 14:11 в Selenium - Functional Testing
Я знаю что тест будет проходить везде, но мне нужно реализовать параллельный запуск одновременно в нескольких браузерах.
запускайте четыре теста одновременно на разных браузерах.
phpunit преполагает, что вы будете делать именно так
Отправлено автор: 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
Отправлено автор: leipreachan 06 марта 2014 - 09:24 в Selenium - Functional Testing
Уважаемый, Леприкон, большая просьба - поменьше оверквотинга.
или используйте browserproxymob, или заходите на страницу используя адрес вида
логин:пароль@server_name
если форум так настроен, что не может сам схлопывать длинные цитаты - это должно стать моей проблемой? Очень странно слышать подобный коммент на форуме инженеров по качеству.
Отправлено автор: leipreachan 06 марта 2014 - 13:37 в Selenium - Functional Testing
Уважаемый,
1) я знаю, что такое оверквоттинг и создаю его не злонамеренно, да, более того, даже не специально
2) я не нажимаю "Цитата", я нажимаю "Ответить". Вам прикрепить видеоролик с описанием проблемы?
Я ещё раз скажу, что вы пытаетесь заставить меня делать то, что должен делать сам форум - схлопывать длинные цитаты. А для мобильных устройств тема форума должна быть настроена ещё более грамотно.
А то получается сапожник без сапог какой-то.
вообще, я считаю, что оверквоттинг не лучше оффтопика.
Community Forum Software by IP.Board Русификация от IBResource
Лицензия зарегистрирована на: Software-Testing.Ru