2015-05-13 16 views
2

我有以下WebElements:查找WebElement與XPath使用正則表達式

<input id="" type="checkbox" value="/p1/foobar1" name="checkbox1" partition="p1" onclick=""/> 
<input id="" type="checkbox" value="/p1/foobar" name="checkbox2" partition="p1" onclick=""/> 
<input id="" type="checkbox" value="/p2/foobar2" name="checkbox3" partition="p2" onclick=""/> 

而且我想基於價值屬性來查找在上面的​​源代碼的第二個元素(一個用的/p1/foobar的值)在xpath中使用正則表達式。我試過以下內容:

driver.findElement(By.xpath("//input[matches(@value,'.*\\/foobar$')]")); 

但它會拋出一個InvalidSelectorException異常。我已經得到它與cssSelector像這樣...

driver.findElement(By.cssSelector(input[value$='\\/foobar'])); 

但我仍然好奇如何用xpath完成此操作。有什麼建議麼?

編輯:我還應該注意到,我希望能夠找到這個元素沒有最後一個斜線之前知道字符(又名/p1/

回答

3

嘗試

//input[@value='/p1/foobar'] 

如果你不知道什麼用,你不得不求助於功能開始:

//input[contains(@value, 'foobar') and substring-after(@value, 'foobar') = ''] 

這裏是一個 '小提琴'

<?xml version="1.0" encoding="UTF-8"?> 
<result> 
<input id="" name="checkbox1" onclick="" partition="p1" type="checkbox" value="/p1/foobar1"/> 
<input id="" name="checkbox2" onclick="" partition="p1" type="checkbox" value="/p1/foobar"/> 
<input id="" name="checkbox3" onclick="" partition="p2" type="checkbox" value="/p2/foobar2"/> 
</result> 

http://www.xpathtester.com/xpath/4dc56e27ca1674ea0b5b48357214b907

Can I use a Regex in an XPath expression?所述,XPath 1.0不支持正則表達式。

這裏有很多例子:

https://msdn.microsoft.com/en-us/library/ms256086(v=vs.110).aspx

這裏是一個XPath函數列表:

https://msdn.microsoft.com/en-us/library/ms256180(v=vs.110).aspx

+0

感謝您的回覆,但請參閱我的編輯。我試圖完成找到這個元素,而不知道最後一個斜槓之前的字符。 – user2150250

+0

@ user2150250確定已更新。 – Chloe

+1

很酷。子字符串+1在 – Saifur

0

使用XPath包含的功能。相當複雜。可能你不想走這條路。但是,這也可以

//input[contains(@value,'foo') and (not(contains(@value,'foobar1'))) and (not(contains(@value,'foobar2')))] 

*做保持複雜一點,我覺得CssSelector是此方案的最佳選擇。

+0

這不起作用,因爲其他元素屬性也包含「foobar」。 – Chloe

+0

克洛伊是正確的。這將找到第一個webelement,因爲它也包含'foobar',而不是第二個。 – user2150250

+0

@Chloe你是對的。編輯。謝謝 – Saifur

0

XPath不支持正則表達式。你將不得不求助於其他的XPath功能,爲您的例子中,你可以使用類似:

//input[ends-with(@value,'foobar')] 

有XPath函數here一個不錯的清單。

+1

之後'ends-with'是xpath版本2.0的一部分。硒是否支持? – Saifur

+0

是啊,似乎並沒有爲我工作,不幸的是。 – user2150250