2

我正在尝试单击每个订单都会更改的元素,如下所示

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

4 回答 4

4

您不能像其他答案所示那样使用正则表达式。

相反,您可以使用漂亮的 CSS 选择器技巧:

@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 技巧的信息实用腰带!

于 2013-04-14T04:41:09.263 回答
2

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

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

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

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

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

于 2012-07-20T16:31:44.670 回答
0

你不能。

但是你应该这样做:

function hasClass(element, className) {
  var re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
  return re.test(element.className);
}
于 2012-07-20T16:30:41.187 回答
-1

这对我有用

@driver.find_element(:xpath, "//a[contains(@href, 'person')]").click
于 2015-06-03T15:00:05.037 回答