2015-09-16 107 views
-1

我試圖讓這個按鈕,硒在C#硒找不到元素按鈕

<a id="1|0AqnCSdkjQ0|none" href="" target="_self" rel="nofollow" class="download_link 1">Download</a> 

我試着用id和class,但沒有奏效。

這裏是網頁: http://www.mp3juices.cc/ - >下一頁

+0

它生成的ID,所以我認爲它是不可能得到它 – user3181034

+0

我試過類「download_link 2」,我得到這個錯誤:化合物類名不支持。考慮搜索一個類名並過濾結果。 – user3181034

回答

1

您的代碼與「複合類」錯誤而失敗,因爲你,基本上,提出了兩個要求類名上。
該按鈕的類別爲download_link

如果你做了類似driver.findElements(By.className("download_link"))的事情,你會得到一個所有按鈕的列表,並得到你想要的。

(以上片段是Java,所以你可能要它適應C#)

+0

我確實是這樣的: ReadOnlyCollection links = driver.FindElements(By.ClassName(「download_link」)); links [0] .Click(); 得到此錯誤: 其他信息:索引超出範圍。必須是非負值且小於集合的大小 表示鏈接爲空 – user3181034

+1

您確定該按鈕在此執行點是否可見?此時可能沒有渲染按鈕。您可以在使用FindElements之前使用新的WebDriverWait(驅動程序,10).until(ExpectedConditions.visibilityOfElementLocated(By.className(「download_link」))。 –

0

,你可以使用它作爲一個解決方案

driver.findElement(By.xpath("//a[@class='download_link 1'] and contains(text(),'Download')")); 
+0

附加信息:無效的選擇器:找不到xpath表達式// a [@ class ='download_link 1']幷包含(text(),'Download'),因爲以下錯誤: – user3181034

+0

我在css類名中發現的內容不能有空格:) – user3181034

-1
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
     try 
     { 
      IWebElement myDynamicElement = wait.Until<IWebElement>((d) => 
      { 
       try 
       { 
        return d.FindElement(By.ClassName("dl_link 1")); 
       } 
       catch 
       { 
        return null; 
       } 
      }); 
     } 
     catch(Exception e) 
     { 

     } 


     ReadOnlyCollection<IWebElement> lists = driver.FindElements(By.ClassName("download_link")); 
     lists[0].Click(); 

*的代碼沒有經過優化,但它的效果很好。 (我正在使用的第一部分等待按鈕被加載)。

+0

您應該看看到['WebDriverWait'](https://selenium.googlecode.com/git/docs/api/dotnet/html/T_OpenQA_Selenium_Support_UI_WebDriverWait.htm),例如'wait.Until(ExpectedConditions.ElementExists(someElement));' – JeffC

0

你嘗試

driver.FindElement(By.CssSelector("a.download_link.2") 

當您嘗試使用「DOWNLOAD_LINK 2」您請求兩類名。您可以在CSS選擇器中指定兩個類名(或更多),並在它們之間放置一段時間。上面的CSS選擇器是這樣讀取的A標籤download_link2