В Watir, как я могу взаимодействовать с элементом, который изначально «скрыт»? - PullRequest
2 голосов
/ 01 марта 2011

Я пытаюсь протестировать страницу, содержащую элемент, который при первом открытии страницы имеет атрибут style = display: none;. В Firefox, когда тест взаимодействует со страницей (на данный момент два текстовых поля), кнопка включена и может быть нажата программно. В IE8, однако, кнопка не может быть нажата, если страница взаимодействовала с тестом, даже если я пытаюсь вручную щелкнуть по ней. Вот как выглядит код:

<a tabindex="21" onclick="if(!allow_submit() || nextStepLocked()){return false;};; new Ajax.Request(saveInfo); return false;" id="nextStepButton" href="#" class="nextButton" style="display: none;">
    <img src="/btn_next_step.png" alt="Btn_next_step">
</a>
<img style="" src="/btn_next_step.png?" id="hiddenNextStepButton" class="nextButton" alt="Btn_next_step">

Есть похожий блок на странице, который ведет к этому, и я смог щелкнуть по нему точно с кодом browser.image(:alt => "Btn_next_step").click. Я также заметил, что когда изображение переключается из состояния, в котором нельзя щелкнуть мышью, в состояние, в котором можно нажать, оно перемещается на несколько пикселей вверх; если я запускаю в коде кликабельное состояние, происходит то же движение, но кнопка не становится кликабельной.

До сих пор я пытался использовать AutoIt для имитации действий, обычно выполняемых на странице, и я также пробовал много разных способов взаимодействия с изображением, таких как ссылки на разные индексы, одновременное использование нескольких методов идентификации и т.д. на. Я даже пытался возиться в irb, но безрезультатно.

Обновление:

Я проверил поля ввода, и они действительно реагируют на события onchange, но только для заглавных букв первой буквы введенного вами текста. Поскольку кнопка, кажется, работает, если я делаю что-либо на странице, я просмотрел весь источник и нашел следующее в конце страницы:

<script>
    document.onkeydown=function(e){
        accession_hotkeys(e);
    };
</script>

Хотя я не уверен, как правильно запустить это событие. Похоже, выполнение этого на каком-либо конкретном элементе не имеет никакого эффекта.

Ответы [ 4 ]

1 голос
/ 02 марта 2011

Вместо того, чтобы пытаться выяснить, какой javascript вы должны вызывать или какие настройки вам нужно манипулировать, я бы посоветовал попытаться выяснить, что нужно для того, чтобы это произошло «естественно», когда человек взаимодействует с сайтом.Внимательно изучите HTML для ваших полей ввода, чтобы увидеть, не подключены ли они для запуска сценариев javascript при возникновении некоторых событий (я подозреваю «onchange»)

Firewatir и Watir не являются производными от общихкодовая база (больше похожая на сортировку после факта), и вполне возможно, что firewatir отключает эти события, когда поле установлено, а watir - нет.Другая возможность заключается в том, что код firewatir может быть достаточно медленным, чтобы при нажатии кнопки кнопка на стороне клиента смогла изменить состояние кнопки, хотя это еще не произошло на стороне IE.

Что может потребоваться, чтобы вы инициировали конкретное событие для элемента ввода после того, как вы установили значение так, как вы этого хотите.Опять же, я подозреваю, что это будет «onchange», но не могу быть уверен, не увидев ваш html.

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

Обычно я устраняю неполадки, подобные этой, используя сеанс IRB, так как он позволяет мне делать такие вещи, как заданные значения, запускать события, в своем собственном темпе, и я могу проверять состояние страницы после того, как я все сделал,Например, запустить событие в элементе и посмотреть, как страница «реагирует» по очереди.(что просто сложно сделать на «скорости скрипта»).Также, если что-то работает в IRB, но не в том случае, когда точно такой же код выполняется в виде скрипта, проблема почти всегда заключается в том, что скрипты делают вещи «слишком быстро», и вам нужно вставить несколько задержек, чтобы код на стороне клиента мог выполнятьэто вещь между конкретными шагами сценария.

1 голос
/ 02 марта 2011

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

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

0 голосов
/ 26 марта 2011

Еще один выстрел в темноте, поскольку он, похоже, ищет какое-либо событие «нажатия клавиши» на всем документе ... Интересно, сработает ли

browser.fireEvent(onkeydown)

?

0 голосов
/ 02 марта 2011

Полагаю, вам нужно найти, какое событие JavaScript нужно запустить: Как узнать, какие события JavaScript сработали?

...