使用ruby / watir中的变量选择元素

时间:2016-10-25 14:21:21

标签: ruby watir

我遇到的真正问题是网页中下拉列表的数量延迟。

我在剧本中使用的电话是: -

   clickOndropDown(":id","dropDownAutocomplete","ABC",@b)

,其中 1. clickOndropDown是调用的方法 2. id是元素选择器(可以是:id,xpath或:css [我的html代码中的不同选择器,用于不同的下拉框]来处理代码中的所有情况) 3. ABC是从下拉列表中选择的元素 4. @b是浏览器对象

函数定义如下:

    def clickOndropDown(identifier,selector,targetVal,br)

            begin
                puts "starting off"     # gets printed
                br.element("#{identifier}" => "#{selector}").fire_event :click #--- does not work--- 
                # br.element(:id => "#{selector}").fire_event :click           #--- works 
                puts "inside selector pass 1"

                br.element(:link, targetVal).fire_event :click  
               ...
               ...
               # rest of the code

它不会抛出任何异常。只需在选择语句之前执行push语句。

是否有#( - “#{identifier}”)的通配符处理程序,以便我可以编写一个代码来处理id,xpath或css

1 个答案:

答案 0 :(得分:0)

我很惊讶没有例外。我希望有MissingWayOfFindingObjectException

问题是标识符是String而不是Symbol。不起作用的行等同于:

br.element(":id" => "dropDownAutocomplete")

与...不同:

br.element(:id => "dropDownAutocomplete")

注意String":id"Symbol:id之间的差异。

您应该更改方法调用以发送Symbol并将方法更改为不再将其更改为String

def clickOndropDown(identifier,selector,targetVal,br)
  br.element(identifier => selector).fire_event :click
end

clickOndropDown(:id,"dropDownAutocomplete","ABC",@b)

如果你想拥有一个更通用的方法,最好让clickOndropDown接受Hash定位器。这将允许您接受多个定位标准。

def click_on_dropdown(br, target_val, locator)
  br.element(locator).fire_event :click
end

# Call for the original example
click_on_dropdown(@b, "ABC", id: "dropDownAutocomplete")

# Call with multiple selectors
click_on_dropdown(@b, "ABC", id: "dropDownAutocomplete", name: "name_value")