2015-02-16 3 views
-1

Я изучаю watir-webdriver. И у меня есть этот код:MiniTest :: Unit :: Функции TestCase

require 'watir-webdriver' 
require 'minitest/autorun' 


class Login < MiniTest::Unit::TestCase 

    def test_in() 



     browser =Watir::Browser.new 
     browser.goto 'just testing' 
     accept_next_alert=true 


       browser.text_field(:name => 'username').set('admin') 
       browser.text_field(:name => 'password').set('admin') 
       browser.button(:name => 'login').click 


      sleep 3 
      browser.link(:text => 'Dashboard').click 
      browser.link(:href => '/user/').click 

      sleep 5 
      browser.button(:class => 'btn btn-add').click 


    end 

    def element_present?(how, what) 
    text_field(how, what) 
    true 
    rescue Watir::Browser::Error::NoSuchElementError 
    false 
    end 

    def alert_present?() 
    switch_to.alert 
    true 
    rescue Watir::Browser::Error::NoSuchElementError 
    false 
    end 

    def verify(&blk) 
    yield 
    rescue MiniTest::Unit::AssertionFailedError => ex 
    @verification_errors << ex 
    end 

    def close_alert_and_get_its_text(how, what) 
    alert = switch_to().alert() 
    alert_text = alert.text 
    if (@accept_next_alert) then 
     alert.accept() 
    else 
     alert.dismiss() 
    end 
    alert_text 
    ensure 
    @accept_next_alert = true 
    end 

end 

init1=Login 

Я просто перепутать с этими 4 другими функциями: element_present ?, alert_present ?, проверить, и close_alert_and_get_its_text .. На самом деле эти коды экспортируются из селена IDE для Ruby/Test :: Unit/WebDriver. И я хочу использовать Watir-webdriver в качестве своего инструмента. Может кто-нибудь сказать мне, как эти функции работают с watir-webdriver или как я могу их повторно использовать ... Спасибо заранее.

ответ

2

У Ватира уже есть методы для вещей, которые вы пытаетесь сделать. В отличие от селена, Watir использует объектную модель, основанную на HTML и браузере DOM. Таким образом, нормальный шаблон - делать вещи по строкам browser.object(:how => "what).method Это позволяет (что я считаю в любом случае) более правильным стилем ООП, где вы спрашиваете объекты о себе «hey text_box, вы присутствуете?». вместо того, чтобы просить один объект о другом объекте «Эй, браузер, есть ли текстовый ящик?» или сказать им действовать на себя ala browser.button(:text => 'click me!').click (что происходит, мы используем метод .button для браузера, который возвращает объект кнопки, тогда мы вызывают метод кнопки .click объекта кнопки)

Итак, такие вещи, как 'element_present?' и «alert_present» просто стать .present? вызываемого методом с помощью соответствующего объекта. Большинство объектов имеют все методы, которые вы ожидаете, как для общих HTML элементов, а также конкретные объекты, такие как формы входов, имеющих .set метод см docs on .check_box for an example

.present? возвращает истинный элемент существует и видно

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

assert browser.div(:class => 'toc_warning').present?

Также посмотрите на .when_present decorator. Используйте его, как это вместо фиксированных Снов при ожидании JS кода, чтобы сделать объект, прежде чем пытаться действовать на объекте:

browser.link(:text => 'Dashboard').when_present.click 

.exists? возвращает истину, если элемент существует в DOM

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

alert_text = browser.alert.when_present.text 
browser.alert.ok #or use .close instead of .ok depending 

Что касается способа проверки, Watir действительно о вождении браузера, он не пытается быть тестом так что у него нет таких методов. Ожидается, что вы будете использовать что-то вроде rSpec, Cucumber, MiniTest и т. Д. И использовать любой стиль утверждения, типичный для вашего выбора фреймворка. Поскольку большинство из них заботятся об ошибках reportng, даже отслеживают стеки, когда утверждения терпят неудачу, у меня никогда не было необходимости в обертке вокруг этого материала. Но если вам нужна такая вещь, идите за ней, код, который у вас был выше, кажется на правильном пути для такого рода вещей.

Смежные вопросы