2012-11-18 87 views
3

我使用硒網格(在4個瀏覽器上運行測試:FF13,FF16,IE9和鉻,每個瀏覽器是在不同的機器上) 在相關部分測試中,我發現一個可點擊的元素,點擊它 在FF13,IE9和Chrome它工作得很好:。元素被發現並得到了點擊 在FF16中,元素被發現和webdriver的「索賠」,它點擊它,但按鈕的動作(改變表的佈局在頁面上)不會發生硒webdriver - 點擊()成功,但實際上並沒有發生

注:我使用的版本2.25 感謝, Tizki

+0

你有一段代碼,我們可以重現此? – Arran

+0

您是否有可能觸及類似[此Selenium bug](http://code.google.com/p/selenium/issues/detail?id=3602)?屏幕邊緣是否存在有問題的元素,並與狀態欄/滾動條/任何內容重疊? –

+0

我忘了提,該應用程序是基於GWT。我試圖點擊的按鈕是一個帶有靜態ID的div。我使用element = driver.findElement(By.id(「button-id」)); element.click();我不認爲元素ID重疊,至少它看起來不是這樣。 –

回答

2

嗯......我會用像JS注入作弊(如果支持的jQuery包含)。例如

String cssSelector="...blablabla...."; 
    JavascriptExecutor js = (JavascriptExecutor) driver; 
    StringBuilder stringBuilder = new StringBuilder(); 
    stringBuilder.append("var x=$(\'"+cssSelector+"\');"); 
    stringBuilder.append("x.click()"); 
    js.executeScript(stringBuilder.toString()); 

第二個方法(解決方案): 試圖找到你的元素點擊使用使用document.getElementsByTagName DOM模型 - 這將返回找到元素的數組,你可以使用命令行的Firefox很容易找到需要的元素。 所以你的元素如:

document.getElementsByTagName[n] 

哪裏是N - 你的元素中找到陣列的順序document.getElementsByTagName

下面方法的代碼,我帶參數標記名使用 - 你尋找你的元素標籤的名稱通過和argNum是一個數字,你應該從陣列document.getElementsByTagName的整個長度減去得到n的 - 你的元素的順序:

public void jsDirectClickUsingDOM_GEBTagName(String tagName,int argNum) throws IOException { 
     JavascriptExecutor js = (JavascriptExecutor) driver; 
     StringBuilder stringBuilder = new StringBuilder(); 
stringBuilder.append("document.getElementsByTagName(\'"+tagName+"\')[document.getElementsByTagName(\'"+tagName+"\').length-"+argNum+"].click()"); 
     js.executeScript(stringBuilder.toString()); 
    } 

這應該反正工作。希望對你來說很清楚:)

+0

不錯的工作:) – Anuragh27crony

+0

感謝您的答案,我試過你的解決方案,但它仍然無法使用FF16,在我看來像一個webdriver問題。 –

0

我認爲存在兼容性問題webdriverFF16。由於相同的原因,我堅持使用FF 13.0.1。順便說一下,我找不到Firefox和webdriver之間的任何兼容性矩陣,但是經過多次試圖在不同版本的Firefox上運行測試,我決定堅持一個真正有效的方法。

相關問題