2012-01-03 109 views
7

(我已經看了許多其他類似的帖子在SO和不幸沒能解決這個問題,所以這裏去...)硒的webdriver點擊()失敗,IE9

我使用硒WebDriver(C#實現,版本2.15)驅動一個相當簡單的網頁。該頁面包含一個表單,其中包含兩個用於輸入用戶名和密碼的<輸入>和一個用於提交表單的<輸入>。我可以成功輸入用戶名和密碼的值,但提交按鈕上的Click()調用似乎不起作用。

每其他建議,我曾嘗試以下技巧,沒有一個已經工作:

  • 更改窗口焦點currentWindowHandle
  • 點擊元素的父,那麼元素
  • 添加長時間隱含等待
  • 添加一個長時間的顯式等待(睡眠20秒)
  • 點擊一大堆時間元素
  • 使用提交(),而不是點擊()
  • 發送鍵「\ n」來元素(硒報告爲錯誤)

請注意,我已經驗證了<輸入>按鈕確實成功找到了,所以這似乎不成問題。

此外,請注意,我已驗證該按鈕的確在Selenium-land之外工作。也就是說,我可以瀏覽到該網站,輸入登錄憑據,然後單擊提交按鈕(並且它工作正常!)。

此外,請注意,這個問題是在IE瀏覽器。 Chrome和FF7不會出現這種情況。

這樣說,有沒有人有任何其他的想法?

回答

5

您的網站是否公開可供測試?你的IE zoom level是100%嗎?這是一個需要對本地的點擊事件從文檔here

瀏覽器縮放級別必須設置爲100%,使本機鼠標 事件可以設置爲正確的座標工作。

如果這不起作用,那麼它似乎是一個webdriver中的錯誤。你應該打開一個問題here

說了這些之後,您可能可以同時將Java腳本路由作爲臨時解決方案。類似的,

driver.navigate().to("javascript:document.getElementById('yoursubmitbutton').click()"); 
+0

如何設置IE縮放級別? – 2012-01-04 18:15:38

+0

是的,這確實是縮放級別。謝謝!雖然我確實需要一種以編程方式檢測和/或設置縮放級別的方法。我不能讓我的測試一直失敗...... – 2012-01-05 14:42:55

2

它看起來像它可能是一個問題其中發生鼠標點擊。我嘗試使用Selenium中的Actions機制來強制點擊鼠標點擊一個偏移量。它成功點擊元素:

new Actions(GuiOps.driver).MoveToElement(e).MoveByOffset(5,5).ClickAndHold().Release().Perform(); 
1

我有這個問題。我不記得在那裏我找到了解決的職位,但我發現,以下爲我工作:

上的按鈕:

var navButton = driver.FindElement(By.Id("NavButton")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", navButton); 

屢試不爽。

我在將點擊事件發送到表格行時也遇到問題。有時.Click()實際上會將事件發送到上面的行(我們有一個非常複雜的表結構,其中有一個隱藏的單選按鈕,它也不能用Selenium單擊)。上述hack不適用於可通過FindElement訪問的單元格。

最後,唯一有效的工作是選擇該行內的圖像併發送點擊。

var img = driver.FindElement(By.Id("fim{4C3DE9FA-45B0-40E0-BD95-9EE0374EA38A}")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", img); 

希望有所幫助。

-1

還有一個可能的解決方法可以像重複一下,如:

Btn.click(); 
Btn.click(); 

由於第1點擊剛剛設定對焦和:第二個執行真正的點擊。它爲我工作。

+2

這個問題在於,如果您使用多個瀏覽器進行測試,第一次點擊將執行一個操作,然後第二次點擊將引發異常因爲它找不到元素。 – boolean 2012-05-01 19:02:34

1

我在這裏看到了多種解決方案,但我想我會分享什麼對我有用,以防其他人在那裏需要不同的方法。我使用不同的方法

例如

btn.Sendkeys(Keys.Enter); 
0

使用FindElement(By.CSSSelector("'CSSPath'"))也有類似的問題,我的解決方案是爲點擊一樣簡單;如果你有任何CSS應用到按鈕,其更多的一致性,或者寫其他多條語句,以找到具有WebDriverWait方法的替代方法(如ID,標籤等)的方法

0

您可能需要將啓用本地事件當你在IE上運行它,並且如果你想在FF和Chrome中運行相同的代碼,那麼你需要在這些瀏覽器中啓用本地事件以「真實」。

當你設置你想要運行的瀏覽器時,你可以這樣做。

0

try代碼 -

driver.FindElement(By.Id("btn")).sendkeys("\n"); 
0

嘗試這個..
WebElement hiddenWebElement = d.findElement(By.xpath(xpath的));
((JavascriptExecutor)d).executeScript(「arguments [0] .click()」,hiddenWebElement);

0

以下爲我工作:

@FindBy(id = "submit_action") 
WebElement submitButton_; 
... 
public void clickSubmit() { 

    if (driver_ instanceof InternetExplorerDriver) { 
     ((JavascriptExecutor) driver_).executeScript("arguments[0].fireEvent('onclick');", submitButton_); 
    } 
    else { 
     submitButton_.click(); 
    } 
} 

由於fireEvent只支持IE因此替代。