我正在学习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一起使用或者我如何重用它们...在此先感谢。
答案 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等的东西,并使用任何类型的断言,这是您选择的框架。由于大多数人负责报告错误,甚至堆栈跟踪,当断言失败时,我从来不需要包装那些东西。但是,如果你需要这样的东西,那就去吧,你上面的代码似乎在正确的轨道上。