Освободить линки!

На проекте преодолена очень тяжелая и напряженная ситуация с линками, наглухо “закрытыми” по гребанным сео-требованиям.

Это было что-то с чем-то для чего-то без чего-то. Something and a half, wow!

По невнятным нуждам оптимизации, линки на некоторые внутренние разделы сайта должны быть “закрыты” для гуглоботов, но должны оставаться работоспособными для гуглолюдей.

Внешне такой линк выглядит как недоразумительное недоразумение: в статусной строке он указывает на ту страницу, на которой мы уже находимся.

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

Толку нет только от правой кнопки – если через правую сказать “Открыть линк в новой вкладке/новом окне”, то в новой вкладке будет открыта точно та же страница, на которой мы уже были.

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

Стали выяснять.

Такие линки программисты автоматически строят замысловатым образом:

<a id=”ArtLink_5738_03f3c0″ href=”” class=”linklike community-item community-section”></a>

Тутошний id собирается из трех частей:

  • ArtLink – постоянная часть, указывает на то, что линк мудреный.
  • _5738 – постоянная часть, указывает на область из БД, в которой хранится нужный нам линк. “ArtLink_5738” можно считать постоянным значением.
  • _03f3c0 – хз зачем сгенерированный “информационный мусор”, после каждой перезагрузки составляется заново.
  • href – пустой, как разбитое окно.
  • class – содержит указание на общий класс, который помечает линки как закрытые и в нашем случае – указывает на принадлежность линка к семейству “community-item”
  • community-section –  уникальный класс, который тоже всегда остается постоянным значением.

Программист клялся мамой, что все работает после срабатывания MouseUp. Мол, как только кнопка мыши освобождается, система сама подставляет в href линка нужное значение из БД.

Мы поняли.

Но растолковать это дело для Selenium оказалось невозможной задачей. Разные копья сломались на этом пути. Выяснили то, что прекрасно знает Selenium и про MouseUp, и про MouseDown, и даже может их комбинировать последовательно, но ничего из этого не помогало нам колдовское зелье программистское побороть…

Итоговое решение:

  • кликать по таким линкам не будем.
  • Selenium будет проверять только фактическое наличие линков, ака Элементов – verifyElementPresent.
  • в случае нужды открыть нужную страницу, следует открывать ее напрямую, чего нам очень не хотелось, по понятным каждому ученику Баранцева причинам.

Но это же грустно…

Хз, когда и как приходит озарение в отравленный селениумом мозг, но решение нашлось.

MouseUp, говорите?

Нате!

  1. уточнить нужный элемент линка по первичным XPath признакам
  2. применить к этому элементу mouseUp. Система реагирует, и меняет содержимое тэга href: <a id=”ArtLink_5738_03f3c0″ href=”http://ourstore.com/community/&#8221; class=”linklike community-item community-section”></a>
  3. применить к этому элементу старый и добрый clickAndWait.
  4. ????? (ждем загрузку)
  5. PROFIT!

Ввиду того, что придется это дело делать неоднократно, сперва сохраняем элемент в переменную:

<tr>
<td>storeExpression</td>
<td>//*[contains(@class,’community-section’)] </td>
<td>clickLinkBlinHere</td>
</tr>

Затем делаем два последовательных шага (вынесены в отдельный метод):

<tr>
<td>mouseUp</td>
<td>${clickLinkBlinHere}</td>
<td></td>
</tr>
<tr>
<td>clickAndWait</td>
<td>${clickLinkBlinHere}</td>
<td></td>
</tr>

Бинго-бонго!

One thought on “Освободить линки!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s