2017-04-02 147 views
-2

我在Selenium遇到了麻煩。我正在嘗試打開Goog​​le並搜索Selenium。然後打開出現在第一頁,所以我這樣做:硒C#無法找到元素

driver.FindElement(By.XPath("//*@id=\"rso\"]/div/div/div[1]/div/h3/a")).Click();

不過,這並不與XPath打開第一個網址。它說:Unable to locate element 你能幫我嗎?先謝謝你!

回答

1

您的XPath語法是錯誤的,*符號後面應該有一個括號。

相對的xpath:(// DIV [@ ID = 'IRES'] // DIV [@類= 'SRG'] // H3 [@類= 'R']/a)的[1]

建議使用相對xpath,因爲如果頁面的html獲得更改,則絕對xpath將失敗

在單擊元素之前,請提供Explicit等待。

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
    wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("(//div[@id='ires']//div[@class='srg']//h3[@class='r']/a)[1]"))).Click(); 

試試吧,讓我知道它是否適合你。

+1

它做到了!非常感謝你......我也試着用明確的等待和隱含的等待,但沒有奏效。你的方式是完美的。再次感謝你!!! –

+0

@Akarsh,當你的'html'被改變時,這個上面的答案將不起作用,所以按照我的意見,你應該使用'relative xpath',而不是'absolute xpath'。 –

+0

@JainishKapadia用相對xpath更新了答案。謝謝 – Akarsh

1

嘗試等待,直到生成的鏈接和點擊:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); 
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@class=\"rc\"]/h3/a"))).Click();