【问题标题】:Unable to locate element using regex无法使用正则表达式定位元素
【发布时间】:2016-03-10 16:22:40
【问题描述】:
require 'rubygems'
require 'watir-webdriver'
require 'watir'
require 'rspec'
require 'cucumber'
require 'selenium-webdriver'

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

Unable to locate element

黄瓜水(步骤)

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

并在 refresh 时更改。见下面的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">

【问题讨论】:

  • 你是double_click'ing text_field?你的正则表达式定位器不应该更像text_field(:id =&gt; /numberfield-\d\d\d\d-inputEl/)吗?
  • 为了扩展@orde 所说的内容,您传递的是字符串(即完全匹配的文本)而不是正则表达式(即模式或部分匹配)。
  • 双击只是为了看看它是否到达那么远并单击了该字段,感谢您的反馈。认为我可以解决问题。

标签: regex cucumber watir


【解决方案1】:

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

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

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

没有看到更多的 html,我不确定该输入字段的独特之处,但可能对您有用的示例包括

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

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

(注意:我有点作弊,因为答案已经在问题的 cmets 中了,但是我想提出几点,这让我们有一个可以接受的答案,这对任何有类似的问题)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多