goBack()

Чтобы сделать в браузере “шаг назад”, надо написать команду:

execute script
window.history.back()

Это кажется раздражающе неочевидным, но это же обычный JavaScript. А там есть много всякого, если знать, что искать. Например:

  • window.history.back()
  • window.history.forward()

и много еще чего.

Categories: Мелочи, JavaScript

Selenium IDE снова в строю

1 September 2018 Leave a comment

Установить https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/

Разработка https://github.com/SeleniumHQ/selenium-ide

Firefox 61. Но есть и для Chrome.

Очевидно, что придётся заново перещупывать все команды.

Ну, и как всегда

Screenshot_20180901_234404

What’s new:

SIDE Runner

Can now run project files headlessly in command line

run

Use the run command to call tests from within tests.

link locator

link is deprecated in favor of linkText and partialLinkText, more info here.

Control Flow commands

You can now use conditional logic in your tests with commands if, else if, else, end, while, times, do, and repeat if.

assert and verify commands

Use the assert and verify commands to check the value of a variable against an expected value.

Categories: Мелочи

Firefox 54, а там посмотрим

19 September 2017 Leave a comment

Ну…

Firefox 55 and Selenium IDE

The bad news: from Firefox 55 onwards, Selenium IDE will no longer work.

The reasons for this are complex, but boil down to two main causes:

Browsers are complicated pieces of software that are constantly evolving. Mozilla has been working hard to make Firefox faster and more stable, while still retaining the flexibility and ease of extension that we’ve come to know and love. As part of that process, Firefox is switching extensions from the original “XPI” format, to a newer, more widely adopted “Web Extension” mechanism.

The Selenium project lacks someone with the time and energy to move the IDE forwards to take advantage of the new technologies.

Ну, ок, я пока притормозил обновления Firefox, №54 работает норм.

Удаление children pages в Confluence

10 October 2016 Leave a comment

Под родительской страницей 50 штук дочерних. Массовое удаление в силу ряда причин недоступно. Если удалить только родительскую страницу, дочерние останутся. Хочется экстерминировать всё семейство, но для этого надо заходить на каждую подстраницу и “убивать” ее персонально.

Название каждой подстраницы уникально, поэтому кликать по ссылке вроде бы затруднительно.

Но нет.

<tr>
    <td>label</td>
    <td>s</td>
    <td></td>
</tr>
<!--open next children page-->
<tr>
    <td>clickAndWait</td>
    <td>//div[@id='page-children' and @class='pageSectionBody children-loaded']/span[@class='child-display']/a</td>
    <td></td>
</tr>
<!--delete page-->
<tr>
    <td>click</td>
    <td>//a[@id='action-menu-link']/span/span</td>
    <td></td>
</tr>
<tr>
    <td>clickAndWait</td>
    <td>css=#action-remove-content-link &gt; span</td>
    <td></td>
</tr>
<tr>
    <td>clickAndWait</td>
    <td>id=confirm</td>
    <td></td>
</tr>
<tr>
    <td>gotolabel</td>
    <td>s</td>
    <td></td>
</tr>

Make it so.

Categories: Мелочи

Вырви историю из гугла

9 December 2014 2 comments

Skype:

— Привет! Ты уже удалил историю своих запросов из Гугла?

— Чего?

— В сша все нехило трекается. Например, я тут страховку для машины искал. Так мне домой стала почта приходить с предложениями. И я стал замечать какие уникальные finger prints собирает мой интернет банкинг. Это удобно отчасти, но неудобно, например, при поиске авиабилетов. Тебе увеличивают стоимость билета если ты часто ищешь. Поэтому я написал extension, который чистит твою google history с http://history.google.com У меня там сейчас 13000 запросов.

— [открыл, глянул, офигел] Нда, у меня там 6119 запросов…

— Дать тебе моего чистильщика?

— Я это и сам могу. [кляц-кляц] Готово. Четыре строчки. Понеслось, история отмирает на моих глазах 🙂

— А почему у тебя аж четыре строки? У меня их только три.

if (document.querySelectorAll(“input[name=del]”))
{ document.querySelector(“span.kd-button”).click();
document.querySelector(“input.kd-button”).click(); }

— Ну, у меня попроще, бесконечный цикл в Selenium IDE:

label | start
click | id=selector_top
clickAndWait | name=btnD
gotolabel | start

Categories: Мелочи

Внезапно вываливающийся список

1 September 2014 24 comments

Ну, предположим такую ситуацию: на чекауте предоставляем пользователю все адреса его города, чтобы не путался. Но адреса эти ровно в 00.00 превращаются спрятаны в отдельном списке, который подгружается на страницу только при необходимости.

И чтобы вообще огорчить тестировщиков — список этот появляется под полем адреса только при наборе текста, а Selenium IDE такие мансы очень не любит.

Но ведь тестировщики сами могут кого угодно огорчить.

Итак, у нас есть поле ввода с id=billing_full_address, при наборе текста туда должен подтянуться целый список адресов, а затем в выпадающем списке с адресами надо будет кликнуть по тестовому адресу ‘1 Darling Mills Road, ALBION PARK  NSW  2527‘.

01-09-2014 - 17-32-18

Алгоритм:

  • впишем в этом поле начало адреса, который нужно будет получить в списке всех адресов,
  • эмулируем нажатие клавиш (можно даже передавать нажатие определенных клавиш, есть в сети полная таблица кодов),
  • дожидаемся появления ссылки с нужным адресом,
  • кликнем по ссылке с нужным адресом.
type id=billing_full_address 1 Darling island
keyDown id=billing_full_address w
keyPress id=billing_full_address w
keyUp id=billing_full_address w
waitForElementPresent //a[contains(text(),’1 Darling Mills Road, ALBION PARK  NSW  2527′)]  
click //a[contains(text(),’1 Darling Mills Road, ALBION PARK  NSW  2527′)]  

Делов-то…

Moodle > Move down a topic

В Moodle топик надо скинуть в самый низ перечня тем (просто удалить невозможно). Для простоты переименую убиваемую тему в “deleted”.

Прежде всего – определяемая тема должна быть “подсвечена” как “текущая активная” (Highlight this topic as the current topic). Скрипт будет обрабатывать /li[@class=’section main clearfix current’], название темы вообще не имеет значения. Следовательно, тему придется сделать “видимой”, иначе сделать ей подсветку невозможно.

label go
clickAndWait //li[@class=’section main clearfix current’]/div[@class=’right side’]/a[@title=’Move down’]/
gotolabel go

Побегло до финиша. Когда тема окажется в самом низу, кнопка ‘Move down’ окажется нерабочей, скрипт остановится. Дописывать проверку наличия кнопки, и при ее отсутствии переходить к завершению скрипта считаю нецелесообразным.

В общем, скрипт нужно переделать, чтобы привязка происходила непосредственно к теме с определенным названием. Должно получиться что-то вроде //div[@class=’content’]/h3[contains(text(), ‘deleted’)]/../../div[@class=’content’]/../../li[@class=’section main clearfix current’]/div[@class=’right side’]/a[@title=’Move down’]/

Categories: Мелочи Tags:

И давай всех эндорсить

24 December 2012 4 comments

На LinkedIn есть прекрасная возможность тупо эндорсить (слово легко переводимое в приличном обществе, но блин!) всех в своем круге знакомств не глядя, нажатием на кнопку.

А после того, как заэндорсил знакомого, появляется предложение эндорсить (вот ведь слово блядское) сразу четверых знакомых, нажатием на кнопку ‘Endorse all 4″.

endorseThem

Кнопка эта хитрая: обычная команда click по ней не срабатывает.

Срабатывает следующий трюк:

listPagesInTableForSearchExpectedWord
label start
mouseDownAt css=button.btn-action.endorse-all-btn
click css=button.btn-action.endorse-all-btn
pause 1000
gotolabel start

Готово.

Можно эндорсить ВСЕХ своих знакомых, не глядя.

По завершению эндорсирования кнопка исчезнет ВНЕЗАПНО, поэтому стоит озаботиться тем, чтобы скрипт посредством постоянной проверки наличия кнопки завершил свою работу достойно.

Мелочи JavaScript жизни

12 June 2012 10 comments

Как выводить в алерте текст в двух уровнях?

<tr>
 <td>getEval</td>
 <td>alert(unescape('Первый ряд %0AВторой ряд'))</td>
 <td></td>
</tr>

Как сравнить между собой содержимое двух переменных?

Положить текст в две переменные (name1 & name2 в моем случае).
<td>assertEval</td>
<td>'${name1}'=='${name2}'</td>
<td>false</td>
</tr>

В переменную KTO_ZDES пришло какое-то буквенно-числовое значение (предположим, что туда может прийти или слово “Фирма”, или слово “Частное лицо”. Если пришло слово “Фирма”, тогда нужно выкинуть алерт со словом “Фирма”, иначе выкинуть алерт со словом “Частное лицо”.

<tr>
<td>storeEval</td>
<td>if (storedVars [‘KTO_ZDES’] == ‘Фирма’) {‘alertFirma’} else {‘alert4astnoeLitso’}</td>
<td>nextMove</td>
</tr>

Categories: Мелочи, JavaScript

О, хитрая дрянь! Клик по кнопке JQuery

21 May 2012 6 comments

В мире все ещё много дряни. Вот, например, кнопки, реализованные с помощью jQuery: курсором по ней кликать можно, а через Selenium – увы.

Кнопка, расположенная под текстовым полем, представляет из себя нечто вот такое:

<div  class=”judge”>
<button class=”win-button disabled“>
……….<span class=”out”><span class=”button”>Поделиться</span></span>
</button>

После того, как в текстовое поле комментария будет вписан какой-нибудь текст, локатор кнопки изменится:

<div  class=”judge”>
<button class=”win-button“>
……….<span><span>Поделиться</span></span>
</button>

В момент нажатия на кнопку локатор снова меняется:

<div  class=”judge”>
<button class=”win-button pushed“>
……….<span><span>Поделиться</span></span>
</button>

А когда кнопка будет “освобождена”, локатор вообще невообразимо превращается в

<div  class=”judge disabled“></div>

То есть, кнопка вообще исчезает. Коммент сделан, Рубикон брошен на игральный стол (все же знают, что такое кубик Рубикона, не так ли?!)

В общем, не в локаторах проблема. Проблема в том, что Selenium IDE для клика на такие нестандартные кнопки требуется нестандартный подход.

Секрет Дело в том, что эта кнопка реагирует на событие mouseUp и mouseDown.

Рассмотрим работу подобных неурядиц на живом примере: сегодня DOU.ua будет нашей подопытной крыской.

Read more…