MiniTest :: Unit :: TestCase函数

时间:2015-02-16 03:26:57

标签: ruby selenium-webdriver watir watir-webdriver

我正在学习watir-webdriver。我有这段代码:

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?,verify和close_alert_and_get_its_text。实际上这些代码正从selenium IDE导出到Ruby / Test :: Unit / Webdriver。我想用Watir-webdriver作为我的工具。有人可以告诉我这些函数如何与watir-webdriver一起使用或者我如何重用它们...在此先感谢。

1 个答案:

答案 0 :(得分:2)

Watir已经有了你想要做的事情的方法。与selenium不同,Watir使用基于HTML和浏览器DOM的对象模型。所以正常的模式是按照browser.object(:how => "what).method的方式做事。这允许(我认为无论如何)一个更合适的OOP风格,你问对象自己“嘿text_box,你在场吗?”而不是向一个对象询问另一个对象“嘿浏览器,是否存在text_box?”,或者告诉他们自己动作ala browser.button(:text => 'click me!').click(发生了什么事情我们使用浏览器的.button方法,返回一个按钮对象,然后我们调用按钮对象的.click方法)

像'element_present?'这样的东西并且'alert_present'只是通过适当的对象调用的.present?方法。大多数对象具有您期望的所有方法,对于通用html元素,以及具有.set方法的表单输入等特定对象,请参阅{{ 3}}

docs on .check_box for an example返回true元素存在且可见

例如,如果您在未同意条款和条件的情况下尝试继续操作时出现警告文本,则可以使用以下代码对此进行验证:

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

还可以查看.when_present装饰器。在尝试对对象执行操作之前等待JS代码呈现对象时,请使用此方法而不是固定休眠:

browser.link(:text => 'Dashboard').when_present.click
如果元素存在于DOM

中,则

.present?返回true

.exists?有方法可以通过捕获警报文本和响应警报等警报来执行您想要的操作。它也支持上述方法。这将允许您执行类似这样的操作,假设脚本期望出现警报的时刻:

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

至于验证方法,watir实际上是关于驱动浏览器,它不是试图成为一个测试框架,所以没有那种方法。期望您可以使用类似rSpec,Cucumber,MiniTest等的东西,并使用任何类型的断言,这是您选择的框架。由于大多数人负责报告错误,甚至堆栈跟踪,当断言失败时,我从来不需要包装那些东西。但是,如果你需要这样的东西,那就去吧,你上面的代码似乎在正确的轨道上。