2014-10-10 428 views
17

我正在嘗試查找帶有屬性的元素。那麼,我可以在Selenium中找到具有Id,tagName,Xpath和所有其他預定義方法的元素。但是,我正試圖編寫一個特定返回WebElement的方法,給定Attribute name和Value作爲輸入。按屬性查找元素

List<WebElement> elements = webDriver.findElements(By.tagName("Attribute Name")); 
for(WebElement element : elements){ 
    if(element.getText().equals("Value of Particular Attribute")){ 
     return element; 
    } 
    else{ 
     return null; 
    } 
} 

假設XPath是不是一種選擇,有沒有其他更好的方法來做到這一點?

+0

你可以添加的你試圖以匹配一個HTML例子嗎? – Richard 2014-10-10 16:48:10

+0

爲什麼XPath不起作用? – 2014-10-10 16:48:24

+0

你的問題似乎是關於匹配屬性,但你的例子是匹配元素的文本,與屬性無關。 – Richard 2014-10-10 16:48:59

回答

34

您可以輕鬆地使用CSS完成此任務。

其計算公式爲:

element[attribute='attribute-value'] 

所以,如果你有,

<a href="mysite.com"></a> 

可以使用找到它:

By.cssSelector("a[href='mysite.com']"); 

這個工程使用任何可能的屬性。這裏

本頁提供有關如何制定有效的CSS選擇好的信息,並匹配其屬性:http://ddavison.io/css/2014/02/18/effective-css-selectors.html

+0

element [attribute ='attribute-value']按預期工作,謝謝! – 2018-01-26 19:54:52

6

使用CSS選擇器來代替:

List<WebElement> elements = webDriver.findElements(By.cssSelector("*[attributeName='value']")); 

編輯:CSS選擇器,而不是XPath的

13

我不明白你的要求:

假設XPath是不是一個選項...

如果這只是一個不正確您的部分假設,那麼XPath是完美選項!

webDriver.findElements(By.xpath("//element[@attribute='value']")) 

當然,你需要更換elementattribute,並value與您的實際名稱。您還可以使用通配符找到「任何元素」:

webDriver.findElements(By.xpath("//*[@attribute='value']"))