2016-03-10 128 views
0

我有問題運行下面的代碼來點擊一個按鈕。Selenium c#:無法點擊按鈕

當我作爲調試運行,並逐步通過,我可以找到按鈕,並沒有任何問題點擊它。但在實際運行過程中,無法點擊按鈕。

有什麼建議嗎?

new SelectElement(Driver.FindElement(By.Name("searchType"))).SelectByText("Location"); 
new SelectElement(Driver.FindElement(By.Id("Location"))).SelectByText("Brentwood"); 
Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); 
var button = Driver.FindElement(By.ClassName("btn-go")); 
button.Click(); 
+0

爲什麼你以編程方式點擊按鈕?難道你不能把代碼從按鈕事件處理程序移動到一個方法,而是調用它? – Alex

+0

@Alex問題是關於使用硒的自動化。 –

+0

@Alex。我試圖把按鈕放入一個單獨的方法,但它仍然無法正常工作。 – Dulku

回答

0

從5增加你的時間縮短至約40下面的代碼: -

Driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(40)); 

您可以使用WebDriverWait也該元素。請參考下鏈接相同: -

http://watirmelon.com/2014/01/29/waiting-in-c-webdriver/

希望它會幫助你:)

0
private WebDriverWait wait; 
wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15)); 

new SelectElement(Driver.FindElement(By.Name("searchType"))).SelectByText("Location"); 
new SelectElement(Driver.FindElement(By.Id("Location"))).SelectByText("Brentwood"); 


wait.Until(driver1 => (driver.FindElement(By.ClassName("btn-go")))); 
Driver.FindElement(By.ClassName("btn-go")).Click(); 
0

嘗試使用顯式等待。在這個例子中,它會在投擲Timeout Exception之前等待60秒。但是如果在60秒之前找到元素,它將返回相同的結果。

 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); 

     new SelectElement(driver.FindElement(By.Name("searchType"))).SelectByText("Location"); 
     new SelectElement(driver.FindElement(By.Id("Location"))).SelectByText("Brentwood"); 


     IWebElement button = wait.Until<IWebElement>((d) => { return driver.FindElement(By.ClassName("btn-go")); }); 

     button.Click();