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

Публикации vitorg

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


#132339 Подгрузка файла без input'а

Отправлено автор: vitorg 18 июля 2014 - 07:22 в Selenium - Functional Testing

Расхайдить и так всем понятно, а вот заэфпячить слышу в первый раз :)



#132269 Подгрузка файла без input'а

Отправлено автор: vitorg 16 июля 2014 - 20:46 в Selenium - Functional Testing

Сейчас используем первый вариант совместно с xvfb, соответственно проблемы одновременных нажатий нет.



#128994 Выбор из выпадающего списка

Отправлено автор: vitorg 03 апреля 2014 - 09:16 в Selenium - Functional Testing

Как я уже говорил, в данном конкретном примере разница скорее идейная, если придерживаться вашей идеи, то писать надо //select/option - тоже будет выбран первый элемент, но только в результате особенности работы Selenium с локаторами, я бы на месте Selenium для таких случаев выкидывал исключение типа MoreThanOneElementMatchedException и отправлял бы всех в сад :) Но в других ситуациях использование подобных конструкций может привести к неожиданному и неочевидному результату.




#128986 Выбор из выпадающего списка

Отправлено автор: vitorg 03 апреля 2014 - 08:38 в Selenium - Functional Testing

По спецификации select может содержать 2 типа тегов: <!ELEMENT SELECT - - (OPTGROUP|OPTION)+, не думаю, что есть законный способ поместить <input type=hidden/> внутрь select, но допускаю, что там могут оказаться и другие теги типа meta, script и т.п.




#128957 Выбор из выпадающего списка

Отправлено автор: vitorg 02 апреля 2014 - 15:13 в Selenium - Functional Testing

правильнее писать (//select/option)[1], а не //select/option[1]? При том, что наличие у select других чайлдов, отличных от option - это хак,баг и провокация. А при использовании сета есть вероятность "влететь" в совершенно другой селект.

 

Не думаю, что наличие у select других потомков отличных от option является хаком, даже наоборот, они там могут запросто оказаться и будут правы :D

 

Правильнее в данной ситуации исключительно потому, что (//select/option)[1] - это гарантированный возврат одного элемента, а //select/option[1] может вернуть любое количество элементов в зависимости от ситуации и от того как в будущем изменится вёрстка, т.е. это скорее идейно правильный подход, но результаты будут одинаковыми в данном примере. Если уж на то пошло, то и "[1]" в вашем варианте лишняя, первый элемент удачно выберется и так: //select/option... Но это исключительно удача :)

 

В реальной же ситуации надо конечно жёстко фиксировать select (по id или по привязке к форме в которой он находится и т.п.), а дальше уже выбирать конкретный option. Данный способ со скобками лично мне видится намного более однозначным и очевидным по принципу работы, плюс имеет меньше побочных эффектов.




#128934 Выбор из выпадающего списка

Отправлено автор: vitorg 02 апреля 2014 - 09:18 в Selenium - Functional Testing

Протестировал оба варианта на FF 28.0, среднее время поиска локатора составило 25 мс в обоих случаях (30 опытов на 100000 option'ах). Вы уверены, что на Opera использовали нативный XPath, какая версия? Думаю, что там далеко не всё так просто разворачивается и есть куча различных оптимизаций, работающих по-своему в каждом браузере, где-то будет быстрее один вариант, а где-то другой, ну и опять же от вёрстки всё сильно зависит.




#128913 Выбор ссылки

Отправлено автор: vitorg 01 апреля 2014 - 15:35 в Selenium - Functional Testing

Да, разницы почти нет, я скорее на автомате написал вариант со скобками как более однозначный.

 

Но если всё-таки хочется увидеть разницу, то она будет видна в этом примере:

<li><a></a></li>
<span><li><a></a></li></span>

(//li)[2]/a - отработает как и требуется

//li[2]/a - не найдёт локатор, т.к. не существует в документе такого li который бы являлся вторым потомком своего родителя.

 

В этом основная тонкость, что если первый вариант говорит - "найди мне второй li в документе и верни его прямого потомка a", то второй вариант говорит "найди мне такой li который является вторым потомком своего родителя и дай мне его прямого потомка a" - зачастую это совсем не то, что требуется, но исключительно по счастливому стечению обстоятельств такая конструкция тоже иногда работает.




#128912 Выбор из выпадающего списка

Отправлено автор: vitorg 01 апреля 2014 - 15:33 в Selenium - Functional Testing

оператор [] в xpath имеет больший приоритет, чем //

Вы меня опередили, спасибо за ссылку :)




#128911 Выбор из выпадающего списка

Отправлено автор: vitorg 01 апреля 2014 - 15:30 в Selenium - Functional Testing

Абсолютно не очевидно - как и ваш ответ с соседней теме.
Покажите разницу между (//select[@id='country']/option)[1] и //select[@id='country']/option[1].
Могу подсказать что эти варианты отличаются как минимум производительностью, а первый вариант имеет достаточно "подводных камней".

Здесь скорее второй вариант имеет много подводных камней, т.к. выбирается всё множество для которого справедливо "//select[@id='country']/option[1]" - option является первым, и только счастливое стечение обстоятельств приводит к правильному выбору элемента. В то же время первый вариант достаточно однозначен.

 

Если же исходить из предположения, что документ гарантированно валиден, то конечно же не может быть второго select с id=country и в этом случае локаторы взаимозаменяемы, но всё-таки не эквивалентны. В варианте без скобок наложились слишком много удачных моментов благодаря которым он работает, но стоит шевельнуть немного вёрстку и такие конструкции чёрту ногу свернут если тот начнёт разбираться почему же не работает локатор.

 

Про производительность не могу ничего сказать однозначно, т.к. не сравнивал, но всё-таки подозреваю, что первый вариант (со скобками) должен быть более производительным, т.к. оперирует меньшими объёмами данных.




#128894 Выбор ссылки

Отправлено автор: vitorg 01 апреля 2014 - 13:36 в Selenium - Functional Testing

Нет, я ничего не предполагаю, а ответил исключительно на поставленный вопрос, пример показывал только как именно обратиться ко второму элементу массива, но совершенно не учитывал все тонкости конкретной вёрстки и особенности работы команды разработчиков ТС, впрочем, ваш вариант с фейлом лишь один из возможных и заранее нельзя сказать что будет лучше, это уже задача самого ТС определиться с выбором надёжности локатора. Обычно можно однозначно зацепиться за более высокий в иерархии элемент и знать, что там будет только один список.




#128887 Выбор из выпадающего списка

Отправлено автор: vitorg 01 апреля 2014 - 13:04 в Selenium - Functional Testing

Обоснуйте

Это разве не очевидно? Ответил на ваш пример в соседней теме.



#128886 Выбор ссылки

Отправлено автор: vitorg 01 апреля 2014 - 13:01 в Selenium - Functional Testing


Фейл

<html>
<head/>
<body>
<div>
<li></li>
<li></li>
<li><a></a></li>
</div>
<div>
<li></li>
<li><a></a></li>
<li></li>
</div>
</body>
</html>
Что это значит? Если вы про фейл локатора (//li)[2]/a, то так и должно быть, локатор был не для этой разметки, а для приведённой в первом посте. В вашем случае он конечно ни с чем не совпадёт, т.к. его условие жёсткое - выбрать a во втором li, а во втором li нет a, на это и рассчитано. Хорошо не когда локатор совпал хоть с чем-то, а когда он совпал/не совпал именно с тем с чем требовалось.



#128878 Выбор ссылки

Отправлено автор: vitorg 01 апреля 2014 - 12:19 в Selenium - Functional Testing

(//li)[2]/a




#128876 Выбор из выпадающего списка

Отправлено автор: vitorg 01 апреля 2014 - 12:13 в Selenium - Functional Testing

Правильнее всё-таки (//select[@id='country']/option)[1].




#128875 Выбор ссылки

Отправлено автор: vitorg 01 апреля 2014 - 12:11 в Selenium - Functional Testing

(//li)[2]




#128600 Headless запуск Selenium WebDriver

Отправлено автор: vitorg 25 марта 2014 - 08:05 в Selenium - Functional Testing

Т.е. на самом деле встречали такую ситуацию когда WebKit'овый браузер (та же версия движка) отрабатывает без проблем, а PhantomJS не фурычит?




#128579 Headless запуск Selenium WebDriver

Отправлено автор: vitorg 24 марта 2014 - 14:21 в Selenium - Functional Testing

Скорее всего вам поможет http://phantomjs.org - для него и драйвер соответствующий есть.




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

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

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

 

Если серьёзно подойти к проблеме, то надо перегружать open() чем-то вроде open(myJavaScriptCode) где myJavaScriptCode будет сам решать достаточно ли загружена страница для продолжения теста.




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

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

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




#122280 Поделитесь опытом работы с данными для автотестов.

Отправлено автор: vitorg 30 сентября 2013 - 13:17 в Selenium - Functional Testing

А почему не хотите генерировать данные на лету? В таком случае заморочек с БД меньше, а покрытие больше. Единственным недостатком можно считать некоторое снижение воспроизводимости результатов.



#122005 Ожидание загрузки Ajax формы и элементов

Отправлено автор: vitorg 23 сентября 2013 - 08:15 в Selenium - Functional Testing

Вот здесь было примерно то, что вам нужно (но для Selenium 1.x): Selenium: ожидание завершения всех AJAX-запросов.
Второй ваш вариант правильный - возвращает количество активных AJAX-запросов.