我正在尝试点击每个订单更改的元素,如此
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
这可能吗?还有其他方法吗?
答案 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