Как нажать на странную ссылку, выглядит как кнопка в Watir - PullRequest
2 голосов
/ 03 ноября 2011

Я хочу использовать Watir, чтобы щелкнуть ссылку, похожую на кнопку, прикрепленную к изображению.

Я использую следующий метод, но он не работает:

@browser.div(:id,"NetworkAnalysisTabPanel").div(:index,1).div(:index,1).ul(:index,1).li(:index,1).link(:index,2).click

Примечание:

@browser.div(:id,"NetworkAnalysisTabPanel").div(:index,1).div(:index,1).ul(:index,1).li(:index,1).link(:index,2).flash

работает нормально, но щелчок не работает в IE и FF

Ссылка выглядит так:

link

И HMTL вот так:

html

Примечание. Я могу нажать на элемент с помощью IDE Селен с методом clickAt

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Попробуйте это (не проверено):

browser.link(:class => "x-tab-strip-menu").click

Если вы можете прошить ссылку, но щелчок не делает то, что вы хотите, посмотрите это: Как узнать, какие события JavaScript сработали?

0 голосов
/ 03 ноября 2011

К вашему сведению, у вас есть ссылки, которые используют стандартные фоновые изображения, управляемые с помощью магии CSS, которые указывают класс ссылки, чтобы знать, какой фон установить. Вот откуда изображение и почему вы не видите его как часть ссылки в HTML.

В этом элементе управления каждая вкладка является элементом (li) элемента списка в неупорядоченном списке (ul), и каждый элемент списка имеет идентификатор, так что это самый простой способ определить, какую вкладку вы пытаетесь щелкнуть внутри.

Попробуйте определить вещи, начиная с LI, который является контейнером вкладок, так как в этом контейнере есть только один экземпляр каждой ссылки данного класса. Из 4 ссылок только одна без какого-либо простого идентификатора, и если вам нужно щелкнуть по той ссылке, которую вам нужно использовать: index, но для остальных 3 ссылок, использующих: class, должно работать. Это должно привести к тому, что код станет менее хрупким и может быть поврежден при изменении порядка вкладок или при рефакторинге страницы.

@browser.li(:id,"NetworkAnalysisTabPanel__ext-comp-1038").link(:class, "x-tab-strip-menu").click

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

@browser.li(:id,/NetworkAnalysisTabPanel__ext-comp-/).link(:class, "x-tab-strip-menu").click

Если вы можете надежно идентифицировать объект и использовать .flash, но .click, похоже, ничего не делает, вам, возможно, придется использовать .fire_event ('onclick') вместо этого или .click.

@browser.li(:id,/NetworkAnalysisTabPanel__ext-comp-/).link(:class, "x-tab-strip-menu").fire_event('onclick')

Если это не сработает, то вам нужно начать экспериментировать с вероятными событиями, которые может искать элемент управления (которые необязательно будут отображаться в HTML, кстати ... это может быть в javascript или CSS и т. Д.)

UPDATE Именно здесь жизненно важно иметь живой пример контроля, с которым мы можем взаимодействовать. В поисках названий классов я смог найти один здесь , и это позволило мне немного поиграть с ним, и я обнаружил, что он ищет новое обращение. так что на этом сайте это работает

browser.li(:id, 'TabPanel1__ctl07').link(:class, 'x-tab-strip-menu').fire_event('onmousedown')

Теперь, так как эти идентификаторы могут быть не лучшим идентификатором, немного больше копания (с использованием .text в li, содержащем части вкладки) нашли какой-то текст, который в таком меню должен быть уникальным .. ТАК, мы можем изменить это, чтобы сделать вещи более устойчивыми и понятными в отношении того, на какую вкладку я нажимаю (это также будет меньше подвержено разрыву, если вкладки изменятся вокруг.

browser.li(:text, 'Menu 1').link(:class, 'x-tab-strip-menu').fire_event('onmousedown')

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

...