如果不工作
If else not working
我遇到了这个问题,我尝试更改条件并添加其他选项,但我仍然遇到同样的错误。有人可以帮助我吗?非常感谢!
这是我的代码:
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.038568 秒内完成,0.0035 runs/s,0.0000 assertions/s。
1 次运行,0 次断言,0 次失败,0 次错误,0 次跳过
User1@DOCUMENTATIONS /c/testing
$
尝试在您的情况下添加此方法..
- 存在吗? – Returns这个元素是否真的存在。
- 在吗? – Returns 如果元素存在并且在
第
页
- 可见? – 如果任何父元素不可见,那么我们就不能写
到元素。确定这一点的唯一可靠方法是迭代
向上 DOM 元素树检查每个元素以确保它是
可见。
ruby IF 语句希望您在其后跟一些 return 真或假的东西。如果您不这样做,If 将 'punt' 并将任何 returned 非空、零或 'false' 视为 TRUE。您正在调用的方法将 return 对象的句柄不正确或错误,因此 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 将被 return 编辑的(实际上为空的)对象视为 'true',即使该对象不存在于 dom 中也是如此。您需要添加 .exists?方法,然后我们返回 true 或 false,你可以看到现在条件响应正如我们预期的那样,给定对象的存在或不存在。
我遇到了这个问题,我尝试更改条件并添加其他选项,但我仍然遇到同样的错误。有人可以帮助我吗?非常感谢!
这是我的代码:
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.038568 秒内完成,0.0035 runs/s,0.0000 assertions/s。
1 次运行,0 次断言,0 次失败,0 次错误,0 次跳过
User1@DOCUMENTATIONS /c/testing $
尝试在您的情况下添加此方法..
- 存在吗? – Returns这个元素是否真的存在。
- 在吗? – Returns 如果元素存在并且在 第 页
- 可见? – 如果任何父元素不可见,那么我们就不能写 到元素。确定这一点的唯一可靠方法是迭代 向上 DOM 元素树检查每个元素以确保它是 可见。
ruby IF 语句希望您在其后跟一些 return 真或假的东西。如果您不这样做,If 将 'punt' 并将任何 returned 非空、零或 'false' 视为 TRUE。您正在调用的方法将 return 对象的句柄不正确或错误,因此 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 将被 return 编辑的(实际上为空的)对象视为 'true',即使该对象不存在于 dom 中也是如此。您需要添加 .exists?方法,然后我们返回 true 或 false,你可以看到现在条件响应正如我们预期的那样,给定对象的存在或不存在。