2012-07-20 109 views
2

我想點擊每每一個訂單,改變像這樣Selenium Webdriver + Ruby正則表達式:我可以用find_element使用正則表達式嗎?

edit_div_123

edit_div_124

edit_div_xxx

元素XXX =任意三個數字

我一直在使用正則表達式喜歡嘗試所以:

@ driver.find_element(:css,「#edit_order _#{\ d *}> d iv.submit> button [name = \「commit \」]「)。點擊

@ driver.find_element(:xpath,」// * [(@ id =「edit_order _#{\ d *}」)] //button")。點擊

這可能嗎?任何其他方式做到這一點?

回答

0

不,你不能。

但是,你應該做這樣的事情:

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

你沒有提供您正在使用的任何HTML片段。因此,我的回答只是基於提供您的問題的有限投入。

我不認爲WebDriver API支持定位元素的正則表達式。然而,你可以達到你想要使用只是簡單的XPath什麼如下:

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

說明:以上的XPath會嘗試搜索其id屬性的所有元素在目前所有<button>節點與字符串開始edit_div_

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

+0

這爲我工作(:XPath中, 「// *按鈕[開始,用(@id, 'edit_div _')]」)點擊。 – longJOURNEY 2015-06-03 14:57:00

2

您不能使用正則表達式,就像其他答案指出的那樣。

相反,你可以用一個漂亮的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技巧的更多信息,您應該將其添加到您的實用腰帶!

0

這爲我工作

@driver.find_element(:xpath, "//a[contains(@href, 'person')]").click