我遇到的真正问题是网页中下拉列表的数量延迟。
我在剧本中使用的电话是: -
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
答案 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")