2012-07-26 81 views
32

我最近剛做的我硒IDE代碼硒網絡驅動器出口。我發現很多在IDE中工作的命令無法工作,或者硒驅動程序聲稱根本不支持。到目前爲止,我已經解決在同一時間小於理想的這些問題的一個...點擊命令的webdriver不起作用

目前我正在努力找出爲什麼點擊一個按鈕,而它在以前工作不與捲筒紙驅動器工作硒IDE。我的瀏覽器是FF 13,我的操作系統是Ubuntu。

代碼段

WebElement loginButton = driver.findElement(By.name("submit")); 
loginButton.click(); 

我以前試過

driver.findElement(By.name("submit")).click(); 

但上述行也失敗了。元素正在被選中,但它不會按我的意願登錄。我發現其他頁面有類似的問題,但他們的問題似乎與Internet Explorer不是Firefox。我甚至不想考慮IE會給我帶來的問題。

謝謝,

P.S. 在不丟失我寫的所有測試的情況下,從selenium IDE遷移到Selenium Webdriver的更好方法的提示也可以解決此問題。

+0

你嘗試'斷言loginButton.isDisplayed()(在我的環境對一個按鈕!); '?當你說click()操作失敗時 – 2012-07-26 21:28:33

+2

?你是否有任何錯誤或exceptions.Please張貼他們理解爲什麼click()操作失敗。 – 2012-07-26 23:46:50

回答

67

如果你肯定知道的元素存在,你可以試試這個模擬點擊 - 如果.Click()不工作

driver.findElement(By.name("submit")).sendKeys(Keys.Return); 

driver.findElement(By.name("submit")).sendKeys(Keys.Enter); 
+1

是不是Keys.Enter? – 2012-07-27 13:41:35

+0

@PavelJanicek任何一個將做的伎倆,但編輯顯示兩者;) – TheLifeOfSteve 2012-07-27 14:02:10

+3

哇。我不知道這個。 Upvote教我新東西:) – 2012-07-27 14:13:29

1

有什麼不對任一版本的代碼。無論是什麼原因造成的,都不是這樣。

你三倍檢查你的定位器?你的元素肯定有name = submit not id = submit?

2

感謝所有的答案大家!我找到了一個解決方案,結果我沒有在我的問題中提供足夠的代碼。

問題是不是畢竟與click()函數有關,而是與用於我的項目的cas認證相關。在Selenium IDE中,我的登錄測試對以下位置執行了一個「打開」命令,

/cas/login?service=https%1F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security 

工作正常。我將測試導出到自然保存該位置的Selenium webdriver。在硒的webdriver的命令是,

driver.get(baseUrl + "/cas/login?service=https%1A%2F%8FAPPNAME%2FMOREURL%2Fj_spring_cas_security"); 

至於原因,我還沒弄清楚失敗上面。當我把它改成,

driver.get(baseUrl + "MOREURL/"); 

的點擊命令突然開始工作......我將編輯這個答案,如果我能弄清楚到底爲什麼這是。

注:我擋住上面使用,以保護我公司產品的URL。

+0

你說它在IE瀏覽器上沒有在Firefox上失敗。你確定這種情況只是由位置引起的嗎? – 2014-01-26 03:46:51

+0

請編輯原始問題,而不是發佈更新作爲答案。 – 2017-03-27 07:08:07

1

我正在使用firefox和一些原因,它沒有采取點擊命令,雖然從過去2months它工作。 我的感覺是利用sendKeys和這個網頁解決了這個問題。現在,我使用的SendKeys(Keys.Enter)

5

一需要注意的主要問題是按鈕是否啓用。你仍然可以點擊它們,沒有任何東西會掉下來,元素在那裏,但它沒有準備好被點擊,所以只是沒有做任何事情。

我一直在使用webdriver,它使我花了大部分時間來弄清楚這一點!

下面的方法似乎是可靠地工作

private void TryClick(By selector) 
    { 
     var wait = WaitUpTo(TimeSpan.FromSeconds(10)); 
     var element = wait.Until(ExpectedConditions.ElementIsVisible((selector))); 

     //really important bit! 
     WaitUpTo(TimeSpan.FromSeconds(5)) 
      .Until(d => element.Enabled); 

     element.Click(); 
    } 

你使用它像

TryClick(By.XPath("//button[contains(.//*,'Some Text')]"));