Адаптация скрипта модального диалога к Firefox

#watir #autoit #firewatir

#watir #автоматический запуск #firewatir

Вопрос:

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

В ie я использую варианты приведенного ниже скрипта, но в Firefox он не работает. Есть ли альтернатива, которая будет работать как в ie, так и в Firefox?

 popup=Thread.new {
    autoit=WIN32OLE.new('AutoItX3.Control')
    ret=autoit.WinWait(title,"",60)
    if (ret==1)
        puts "There is popup."
        autoit.WinActivate(title)
        button.downcase!
        if button.eql?("ok") || button.eql?("yes") || button.eql?("continue")
            autoit.Send("{Enter}")
        else
            autoit.Send("{tab}")
            autoit.Send("{Enter}")
        end
    elsif (ret==0)
        puts "No popup, please check your code."
    end
}
at_exit { Thread.kill(popup) }
end

   button.click_no_wait

   check_for_popups("Message from webpage", "OK")    
  

Комментарии:

1. есть ли где-нибудь ссылка на страницу, которая показывала бы пример всплывающего окна, с которым вы столкнулись?

2. Извините. Я только что увидел этот ответ. Тип всплывающего окна, с которым я сталкиваюсь, похож на первое на этой странице ( wiki.openqa.org/display/WTR/JavaScript Pop Ups ). Где он подтверждает действие пользователя.

3. в свете этого я полностью пересмотрел предложенный ниже ответ

Ответ №1:

Учитывая, что вы говорите о диалоге, созданном на javascript, я действительно должен спросить, есть ли смысл в их фактическом тестировании?

В основном это сводится к тестированию функциональности браузера

Если вы говорите о типе всплывающих окон, описанных здесь http://wiki.openqa.org/display/WTR/JavaScript Pop Ups тогда я думаю, что первое решение по переопределению javascript вполне может быть вашим лучшим кроссплатформенным вариантом.

Проблема с подобными модальными диалогами заключается в том, что они в основном представляют собой пользовательский интерфейс, даже если это происходит на уровне ОС, он больше не находится внутри DOM браузера, и поэтому вам нужны инструменты, специфичные для ОС (например, зависящие от win32ole, такие как autoit), чтобы генерировать необходимое взаимодействие с собственным пользовательским интерфейсом и нажимать кнопки, отправлять нажатия клавиш и т.д. Я думаю, что большинство представленных решений должны работать с FF в Windows (с правильным переименованием ожидаемых заголовков окон и т.д.), Но не будут работать на Mac или * nix OS. Это означает, что вам нужно разное решение для каждой ОС, что является проблемой.

Возможно, было бы просто проще убедиться, что вы можете найти правильный материал, который запускал бы событие в HTML страницы, чтобы вы знали, что событие будет запущено, а затем переопределить вещи, чтобы этого не было. В конце концов, на самом деле не ваша задача проверять, что браузер выводит локальное диалоговое окно, когда что-то вроде alert('This is an alert box') вызывается в javascript. Вас беспокоит то, что в HTML данный элемент закодирован для запуска необходимого события, например, что с элементом связано что-то вроде этого onClick = 'javascript:x = confirm('Do you really want to do this');"

Ответ №2:

Я сталкиваюсь с аналогичной проблемой в Firefox (и мне действительно нужно протестировать в Firefox). Я вижу код, вызывающий Javascript, но когда я пытаюсь переопределить, как описано выше, ничего не происходит. Есть ли какой-либо обходной путь для этого? Ожидаемые обновления Watir? 😉

Комментарии:

1. Я не нашел отличного решения. Но то, что я сделал, это использовал инструкцию rescue. Таким образом, при сбое метода, который работает в Firefox, происходит сбой в IE, он переходит к тому, который работает в ie. Ниже приведены основные положения моего кода. begin b.startClicker(«OK») b.button(:id, «Кнопка для нажатия»).нажмите rescue NoMethodError b.execute_script(«window.confirm = function() {return true}») b.button(:id, «Кнопка для нажатия»).нажмите end завершить