2010-01-05 38 views
1

我想獲得所有divs/links/..的xpath計數,這些divs/links/..的文本與一些正則表達式匹配。例如:selenium:是否有可能在selenium定位器中使用正則表達式

<span> day 2 night </span> 
<span> day 4 night </span> 
<span> day 17 night</span> 

我想能夠調用:

sel.get_xpath_count('regexp:day \d night') 

,並使其返回2.(當然,這是一個簡單的例子,我想用各種常規表達式)

這是可能的,以及如何做到這一點?

回答

2

使用dom=協議,它允許您使用JavaScript。和Javascript有正則表達式:

# sorry, example in Perl: 
$sel->get(qq{dom=(function(){ 
    var x = document.getElementsByTagName('span'); 
    var result = []; 
    for (var i=0;i<x.length;i++) { 
     var txt = x[i].innerHTML; 
     if (txt.match(/day \d night/)) { 
      result.push(x[i]); 
     } 
    } 
    return result; 
})()}); 
2

正則表達式是隻在XPath的2.如果提供的XPath 2是在你使用的瀏覽器可用,那麼下面應該工作:

get_xpath_count("xpath=//div*[matches(text(), \"day \\d night\")]"); 

然而,我相信將XPath烘焙到Selenium中的Javascript實現實現了XPath 1.0。因此,編寫一個小的Javascript函數來獲取頁面中的所有元素,並在Javascript中使用正則表達式可能會更容易,並且只需使用此函數返回匹配數。然後你可以使用get_eval來調用這個Javascript函數。

0

您還可以得到HTML頁面的源代碼或innerHTML的(通過DOM定位器)父/根元素,然後通過你的編程語言轉換成XML作爲DOM對象。從那裏開始,您可以像使用XPath(版本1或2)那樣處理DOM,以獲得您想要的內容。然後,您可以將結果(例如計數)與Selenium一起傳遞以執行某些操作。

使用這種方法,您只受到編程語言提供的任何限制。

相關問題