2015-02-17 160 views
3

工作代碼1:Selenium:如何通過部分href查找元素?

Driver.Instance.FindElement(By.XPath("//a[contains(@href,'" + PartialLinkHref + "')]")); 

工作代碼2:

ReadOnlyCollection<IWebElement> linkList = Driver.Instance.FindElements(By.TagName("a")); 
for (int i = 0; i < linkList.Count ; i++) 
{ 
    if (linkList[1].GetAttribute("href").Contains(PartialLinkHref)) 
    { 
      element.SetElement(linkList[i]); 
      return element; 
      break; 
    } 
} 
+0

什麼是'PartialLinkHref'? – SiKing 2015-02-17 23:50:21

+1

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2015-02-18 00:03:25

回答

2

與您最初選擇的問題是,你錯過了前面的//的選擇器。 //告訴XPath搜索整個html樹。

這應該做的伎倆:

Driver.Instance.FindElement(By.XPath("//a[contains(@href, 'long')]")) 

如果你想找到一個元素的兒童,使用.//代替,例如

var element = Driver.Instance.FindElement("..some selector..") 
var link = element.FindElement(".//a[contains(@href, 'long')]")) 

如果你想找到一個包含文本,而不是由href屬性的鏈接,你可以使用

Driver.Instance.FindElement(By.XPath("//a[contains(text(), 'long')]")) 
1

我不認爲這個問題是你的選擇,我認爲這是你試圖返回FindElements結果的對象至。

在c#中,FindElements返回一個ReadOnlyCollection<IWebElement>對象,而不是List對象。如果你改變你的linkList定義,它應該工作:

ReadOnlyCollection<IWebElement> linkList = Driver.Instance.FindElements(By.TagName("a")); 

您可能還需要添加此using

using System.Collections.ObjectModel; 
相關問題