Selenium Webdriver+;Ruby正则表达式:我可以将正则表达式与find_元素一起使用吗?

Selenium Webdriver+;Ruby正则表达式:我可以将正则表达式与find_元素一起使用吗?,ruby,regex,webdriver,Ruby,Regex,Webdriver,我正在尝试单击一个元素,该元素会根据每个订单进行更改,如下所示 edit_div_123 edit_div_124 edit_div_xxx xxx = any three numbers 我尝试过使用regex,如下所示: @driver.find_element(:css, "#edit_order_#{\d*} > div.submit > button[name=\"commit\"]").click @driver.find_element(:xpath, "/

我正在尝试单击一个元素,该元素会根据每个订单进行更改,如下所示

edit_div_123

edit_div_124

edit_div_xxx

xxx = any three numbers
我尝试过使用regex,如下所示:

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

@driver.find_element(:xpath, "//*[(@id = "edit_order_#{\d*}")]//button").click  
这可能吗?还有其他方法吗?

不,你不能

但你应该这样做:

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

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

我认为WebDriver API不支持用正则表达式来定位元素。但是,只需使用普通XPath即可实现所需的功能,如下所示:

//*[starts-with(@id, 'edit_div_')]//button
解释:上面的xpath将尝试搜索所有
元素下的所有节点,这些元素的
id
属性以字符串
edit\u div\u


简而言之,您可以使用
starts-with()
xpath函数来匹配id格式为
edit\u div\u的元素,后跟任意数量的字符

您不能像其他答案所指出的那样使用Regexp

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

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

  • ^=指示查找值以您的条件开头的元素

  • *=表示应在元素值内的任何位置找到条件

  • $=指示在值的末尾查找条件为的元素

  • ~=允许您在实际值具有多个空格分隔的值列表时基于单个条件查找元素
看一看更多关于其他整洁CSS技巧的信息,你应该添加到你的实用腰带上

这对我有用

@driver.find_element(:xpath, "//a[contains(@href, 'person')]").click
这对我很有用(:xpath,“/*按钮[以(@id,'edit_div')]”开头)。单击