Selenium Webdriver + Ruby正则表达式:我可以在find_element中使用正则表达式吗?

时间:2012-07-20 16:15:35

标签: ruby regex webdriver

我正在尝试点击每个订单更改的元素,如此

edit_div_123

edit_div_124

edit_div_xxx

xxx = any three numbers

我尝试过像这样使用正则表达式:

@driver.find_element(:css, "#edit_order_#{\d*} > div.submit > button[name=\"commit\"]").click 

@driver.find_element(:xpath, "//*[(@id = "edit_order_#{\d*}")]//button").click  

这可能吗?还有其他方法吗?

4 个答案:

答案 0 :(得分:2)

您没有提供任何正在处理的html片段。因此,我的答案仅仅基于提供问题的有限输入。

我认为WebDriver API不支持用于定位元素的正则表达式。但是,您可以使用简单的XPath实现您想要的功能,如下所示:

//*[starts-with(@id, 'edit_div_')]//button

解释:xpath以上将尝试搜索<button>属性以字符串id开头的所有元素下的所有edit_div_个节点

简而言之,您可以使用starts-with() xpath函数将id格式的元素匹配为edit_div_ followed by any number of characters

答案 1 :(得分:2)

您不能像其他答案所表明的那样使用Regexp。

相反,您可以使用漂亮的CSS Selector技巧:

@driver.find_element(:css, "[id^=\"edit_order_\"] > div.submit > button[name=\"commit\"]").click

使用:

  • ^ =表示查找值以条件开头的元素。

  • * =表示应在元素值

  • 内的任何位置找到标准
  • $ =表示在值的末尾找到符合条件的元素。

  • 〜=允许您在实际值具有多个以空格分隔的值列表时,根据单个条件查找元素。

请查看http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/以获取有关您应添加到实用程序带的其他巧妙CSS技巧的更多信息!

答案 2 :(得分:0)

不,你不能。

但你应该这样做:

function hasClass(element, className) {
  var re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
  return re.test(element.className);
}

答案 3 :(得分:0)

这对我有用

@driver.find_element(:xpath, "//a[contains(@href, 'person')]").click