无法使用正则表达式定位元素

时间:2016-03-10 16:22:41

标签: regex cucumber watir

require 'rubygems'
require 'watir-webdriver'
require 'watir'
require 'rspec'
require 'cucumber'
require 'selenium-webdriver'

我收到以下错误并想知道如何构造正确的(请参阅下面的错误)Watir语法来处理我的正则表达式以在字段中设置文本。元素是动态的。正则表达式只是丢弃四位数字并保持id的一致部分(见下文)。顺便说一下,因为元素Id本身是动态的,所以xpath或css选择方法都不起作用。

Unable to locate element

Cucumber watir(步骤)

browser.text_field(:id => '(id=numberfield-)\d\d\d\d(-inputEl').double_click # set '10'

刷新后的变化。见下面的html

HTML:

<input id="numberfield-2840-inputEl" data-ref="inputEl" type="text" role="spinbutton" size="1" name="Quantity" class="x-form-field x-form-text x-form-text-default " autocomplete="off" componentid="numberfield-2840">

2 个答案:

答案 0 :(得分:1)

您需要使用真正的正则表达式对象,而不是包含正则表达式表示法的字符串

browser.text_field(:id => /numberfield-\d\d\d\d-inputEl/)

但是,我要提醒你,通过正则表达式进行选择在webdriver中可能会有些慢,因此也可能在watir中。您可能希望使用input元素的另一个属性或CSS选择器。

没有看到更多的html我不确定该输入字段的唯一性,但可能适合您的示例包括

browser.text_field(:name => 'Quantity')
browser.text_field(:data_ref => 'inputEl')

最后一个是我经常使用的东西,因为watir支持任何自定义&#34;数据短划线&#34;属性,只需用短划线代替短划线,当使用它作为要查找的属性的标签时。

(注意:由于答案已经在问题的评论中,我有点作弊,但我想提出几点,这使我们得到一个接受的答案,这对于任何有类似问题的人)

答案 1 :(得分:0)

我会在名称上选择带有CSS选择器的字段:

browser.text_field(:css => "input[name='Quantity']")