如果不工作

时间:2015-02-16 02:38:29

标签: ruby watir watir-webdriver

我遇到了这个问题,我尝试改变条件并添加其他选项,但我仍然得到同样的错误..有人可以帮我吗?非常感谢!

这是我的代码:

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 $

2 个答案:

答案 0 :(得分:2)

尝试在您的情况下添加此方法..

  • 存在? - 返回此元素是否实际存在。
  • 本? - 如果元素存在且在元素上可见,则返回true 页
  • 可见? - 如果任何父元素不可见,那么我们就不能写了 对元素。确定这一点的唯一可靠方法是迭代 DOM元素树检查每个元素以确保它 可见。

答案 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吗?方法,然后我们得到一个真或假,你可以看到现在条件响应我们所期望的对象的存在或不存在。

相关问题