我遇到了这个问题,我尝试改变条件并添加其他选项,但我仍然得到同样的错误..有人可以帮我吗?非常感谢!
这是我的代码:
require 'watir-webdriver'
require 'minitest/autorun'
require "win32ole"
class Login < Minitest::Unit::TestCase
$number_of_fails = 0
$number_of_success = 0
$fields = ["first_name", "middle_name", "last_name", "sss_number", "tin_number"]
# $to_enter = ["Helfe", "padayao", "Marquez", "1234rer", "9387373"]
def test_in()
@browser =Watir::Browser.new :firefox
@browser.goto 'http://gw01.nextix.org/login'
accept_next_alert=true
@browser.driver.manage.window.maximize
excel= WIN32OLE::new("excel.Application")
wrkbook=excel.Workbooks.Open("C:\\testing\\inputs.xlsx")
wrksheet = wrkbook.worksheets(1)
wrksheet.select
rows = 2
while rows <= 5
$username = wrksheet.cells(rows, "A").value
$password = wrksheet.cells(rows, "B").value
@browser.text_field(:name, "username").set($username)
sleep 3
@browser.text_field(:name, "password").set($password)
sleep 3
@browser.button(:name => 'login').click
sleep 3
rows = rows + 1
end
$Dashboard = @browser.link(:text, "Dashboard")
$Dashboard.exists?
$Dashboard.click
@browser.link(:text, "Users").click
@browser.button(:value,"Add New User").click
rows = 8
while rows <= 13
$fname = wrksheet.cells(rows, "A").value
$mname = wrksheet.cells(rows, "B").value
$lname = wrksheet.cells(rows, "C").value
$sss = wrksheet.cells(rows, "D").value
$tin = wrksheet.cells(rows, "E").value
@browser.text_field(:id, $fields[0]).set($fname)
sleep 5
@browser.text_field(:id, $fields[1]).set($mname)
sleep 5
@browser.text_field(:id, $fields[2]).set($lname)
sleep 5
@browser.text_field(:id, $fields[3]).set($sss)
sleep 5
@browser.text_field(:id, $fields[4]).set($tin)
@browser.send_keys :tab
rows += 1
for i in 0..4
if @browser.text_field(:id => $fields[i], :aria_invalid => "false")
$number_of_success = $number_of_success + 1
else
$number_of_fails = $number_of_fails + 1
end
end
end
puts "Number of Success: #{$number_of_success}"
puts "Number of Failures: #{$number_of_fails}"
end
end
结果:
User1@DOCUMENTATIONS /c/testing
$ ruby revised_login.rb
Warning: you should require 'minitest/autorun' instead.
Warning: or add 'gem "minitest"' before 'require "minitest/autorun"'
From:
c:/Ruby193/lib/ruby/1.9.1/minitest/autorun.rb:14:in `<top (required)>'
revised_login.rb:2:in `<main>'
MiniTest::Unit.autorun is now Minitest.autorun. From c:/Ruby193/lib/ruby/1.9.1/m
initest/autorun.rb:18:in `<top (required)>'
MiniTest::Unit::TestCase is now Minitest::Test. From revised_login.rb:5:in `<mai
n>'
Run options: --seed 13926
# Running:
Number of Success: 30
Number of Failures: 0
以287.038568s结束,0.0035次/秒,0.0000次断言/秒。
1次运行,0次断言,0次失败,0次错误,0次跳过
User1 @ DOCUMENTATIONS / c / testing $
答案 0 :(得分:2)
尝试在您的情况下添加此方法..
答案 1 :(得分:0)
ruby IF语句希望您使用返回True或False的内容。如果你不这样做,如果要进行'平底船'并将任何非空,零或'假'返回的东西视为真。您正在调用的方法将返回对象的句柄,而不是true或false,因此IF会将其视为“true”
为了证明这一点,使用irb创建一个watir浏览器对象,导航到一个网页,然后尝试以下(注意我所在的页面没有与选择标准匹配的文本字段)
irb(main):009:0> puts b.text_field(:aria_invalid => 'false')
#<Watir::TextField:0x00000001f042a8>
=> nil
irb(main):010:0> puts b.text_field(:aria_invalid => 'false').exists?
false
irb(main):011:0> puts "true" if b.text_field(:aria_invalid => 'false')
true
=> nil
irb(main):012:0> puts "false" unless b.text_field(:aria_invalid => 'false').exists?
false
=> nil
irb(main):016:0> puts b.text_field(:aria_invalid => 'false').exists? ? "true" : "false"
false
=> nil
你可以看到IF将(有效空的)对象视为'true',即使dom中不存在该对象。你需要添加.exists吗?方法,然后我们得到一个真或假,你可以看到现在条件响应我们所期望的对象的存在或不存在。