簡體   English   中英

Selenium Webdriver + Ruby正則表達式:我可以將regex與find_element一起使用嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM