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

Ну…

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 работает норм.

Advertisements

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

Под родительской страницей 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: Мелочи

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

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: Мелочи

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

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

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

На 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 жизни

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

<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