2013-04-11 64 views
0

我在C#中使用Selenium Webdriver 2.30。我很感激,如果有人能告訴我如何在以下結構中點擊鏈接(id =「e」)。使用Selenium Webdriver在dl,dt中查找元素C#

<frame name = "a"> 
    #document 
     <html> 
      <head></head> 
      <body> 
       <div id = "b"> 
        <dl id= "c"> 
         <dt class = "d"> 
          <a href = "http://somewhere.com" id = "e" class> Go to somewhere</a> 
         </dt> 
         <dt> 
          <a href = "http://something.com" id = "f"> Find something </a> 
         </dt> 
        </dl> 
       </div> 
      </body> 
     </html>  
</frame> 

我試圖

selenium.SwitchTo().Frame("a"); 
selenium.FindElement(By.XPath("//a[@id=\"e\"]")).Click(); 

並試圖

selenium.SwitchTo().Frame("a"); 
selenium.FindElement(By.XPath("//div[@id='b']/dl[1]/dt[1]/a")).Click(); 

我也試過

selenium.SwitchTo().Frame("a"); 
selenium.FindElement(By.LinkText("Go to somewhere")).Click(); 

不幸的是,他們沒有工作。問題可能是因爲定義列表中的元素有些不同,但我還沒有弄清楚。

回答

0

拋出的異常消息在這裏可能很有用,如果可以的話可以發佈。

首先你需要確保它在正確的框架中。 嘗試調試以下內容並查看計數是否正確。

selenium.SwitchTo().Frame("a"); 
IList<IWebElement> dt = selenium.FindElements(By.XPath("//div[@id='b']//dt")); 

// alternative way 
selenium.SwitchTo().Frame(selenum.FindElement(By.CssSelector("frame[name='a']"))); 
IList<IWebElement> dt = selenium.FindElements(By.CssSelector("#b dt")); 

如果它在正確的幀中,使用Firebug來驗證xpath或cssSelector。我也會嘗試以下內容。記住要確保元素實際加載。 WebdriverWait可能是有用的。

selenium.FindElement(By.CssSelector("#e")).Click(); 
selenium.FindElement(By.CssSelector("dt.d>a")).Click(); 
selenium.FindElement(By.XPath("//a[text()='Go to somewhere']")).Click(); 
selenium.FindElement(By.XPath("(//dl[@id='c']/dt/a)[1]")).Click(); 
+0

感謝哥們。我的團隊領導幫助解決了這個問題。因爲在此之前我有另一個Swithto框架。所以它實際上在切換幀(「a」)時失敗了。該解決方案非常簡單,只需添加selenium.Navigate()。Refresh();切換到幀之前。根據我的理解,在切換到幀之後,除非您進行頁面刷新,否則webdriver將忽略其他幀。 – 2013-04-12 17:32:43

+1

不,'selenium.Navigate()。Refresh();'可以工作,但這不是處理這個問題的理想方法。如果你想跳出框架,你應該使用'selenium.SwitchTo()。DefaultContent()'[參見ITargetLocator.cs#67](https://code.google.com/p/selenium/source/browse/dotnet /src/WebDriver/ITargetLocator.cs#67)。這將讓webdriver切換回來,然後使用另一個'selenium.SwitchTo()。Frame();'。順便說一下,如果您發現它有幫助並解決了您的問題,請隨時選擇我的答案作爲已接受的答案。 – 2013-04-12 20:56:15

相關問題