[英]Selenium Webdriver + Ruby regex: Can I use regex with find_element?
我正在嘗試單擊每個訂單都會改變的元素,如下所示
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
這可能嗎? 還有其他方法嗎?
您沒有提供任何正在使用的html片段。 因此,我的答案僅基於您所提問題的有限輸入。
我不認為WebDriver API支持正則表達式來查找元素。 但是,您可以僅使用普通XPath來實現所需的目標,如下所示:
//*[starts-with(@id, 'edit_div_')]//button
說明 :xpath上方將嘗試搜索其id
屬性以字符串edit_div_
開頭的所有元素下存在的所有<button>
節點
簡而言之,您可以使用starts-with()
xpath函數來匹配ID格式為edit_div_ followed by any number of characters
元素
您不能使用Regexp,就像其他答案指出的那樣。
相反,您可以使用一個漂亮的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技巧中的信息實用帶!
你不能。
但是您應該執行以下操作:
function hasClass(element, className) {
var re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
return re.test(element.className);
}
這對我有用
@driver.find_element(:xpath, "//a[contains(@href, 'person')]").click
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.