MiniTest::Unit::TestCase 函数

MiniTest::Unit::TestCase Functions

我正在学习 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?、验证和 close_alert_and_get_its_text.. 实际上这些代码是从 selenium [=21] 导出的=] 到 Ruby/Test::Unit/Webdriver。我想使用 Watir-webdriver 作为我的工具。有人可以告诉我这些功能如何与 watir-webdriver 一起使用,或者我如何重用它们...提前致谢。

Watir 已经为您尝试做的事情提供了方法。与 selenium 不同,Watir 使用基于 HTML 和浏览器 DOM 的对象模型。所以正常的模式是按照 browser.object(:how => "what).method 的方式做事这允许(无论如何我认为)一种更合适的 OOP 风格,你问对象关于他们自己 "hey text_box, are you present?" 而不是问一个对象关于另一个对象 "hey browser, is there a text_box present?",或者告诉他们对自己采取行动 browser.button(:text => 'click me!').click(发生的事情是我们使用浏览器的 .button 方法,returns 一个按钮对象,然后我们调用按钮对象的 .click方法)

所以像 'element_present?' 和 'alert_present" 这样的东西就变成了你通过适当的对象调用的 .present? 方法。大多数对象都有你期望的所有方法,都是通用的html 元素,以及具有 .set 方法的表单输入等特定对象,请参阅 docs on .check_box for an example

.present? returns 真元素存在且可见

例如,如果有人试图在不同意您的条款和条件的情况下继续操作时出现警告文本,您可以使用如下代码验证此信息:

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

另请查看 .when_present 装饰器。在尝试对对象执行操作之前等待 JS 代码呈现对象时,像这样使用它而不是固定睡眠:

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

.exists? returns 如果元素存在于 DOM

中则为真

alert object 有一些方法可以对警报执行您想要的操作,例如捕获警报文本和响应警报。它还支持上述方法。这将允许你做这样的事情假设脚本期望出现警报的时刻:

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

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