如果不工作

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,你可以看到现在条件响应正如我们预期的那样,给定对象的存在或不存在。