簡體   English   中英

Selenium C#-無法找到元素

[英]Selenium C# - Unable to find element

首先,我在Selenium IDE firefox插件中創建了一個代碼,該代碼正在從網站上抓取數據。 當然,它在IDE中可以正常工作。

我想從中抓取網址:

<div class="gs-per-result-labels" url="http://example.com/foo/bar"></div>

如HTML所示:

<tr>
    <td>open</td>
    <td>http://example.com</td>
    <td></td>
</tr>

<tr>
    <td>storeAttribute</td>
    <td>//div[@class='gs-per-result-labels']@url</td>
    <td>myValue</td>
</tr>

<tr>
    <td>echo</td>
    <td>${myValue}</td>
    <td></td>
 </tr>

兩條命令都正確執行, echo給出正確的值。 接下來,我將格式更改為C# / NUnit / WebDriver並將代碼復制到Visual Studio2015。添加了FirefoxDriverIWebDriver引用。 那是代碼:

private static IWebDriver driver;
static void Main(string[] args)
{
    driver = new FirefoxDriver();

    driver.Navigate().GoToUrl("http://example.com");
    Thread.Sleep(10000);
    string myValue = driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")).GetAttribute("url");
}

我還添加了“ Sleep ,以確保在抓取值時頁面已完全加載。 問題是我在FindElement函數上遇到錯誤,因為driver無法找到元素。 我想知道為什么會這樣。 一切似乎都一樣。 你有什么建議嗎?

我認為值得一提:我要抓取的內容是由php或javascript生成的(那是Google在“示例”頁面上的搜索結果,而不是Google)

最好的方法是檢查Xpath是否絕對正確。 您始終可以使用Firebug,或者如果您想以編程方式使用Firebug,則以下幾行應該會有所幫助

 List<WebElement> existList=driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']"));
 if(existList.size()>0){
    //SOPL("element present");
 }

我建議您使用顯式等待

 WebDriverWait wait=new WebDriverWait (driver,60);
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.XPath("//div[@class='gs-per-result-labels']")));
  string myValue = driver.FindElement(By.XPath("//div[@class='gs-per-result-labels']")).GetAttribute("url");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM