2014-01-09 84 views
1

我試圖自動化一個場景,我將鼠標移到一個元素上,然後單擊該子菜單中的另一個元素。我正在使用CSS選擇器並對IE webdriver進行測試。Selenium不會點擊菜單元素,即使它存在

我們的軟件提供4種不同的語言來瀏覽。我的代碼適用於所有3,除1之外。因此,代碼是通用的,不會因任何一種語言而改變。 CSS選擇器是相同的,它可以分爲4種語言中的3種。我測試了20次,3種語言通過100%失敗=總是失敗。

當我做的element.getText() =對失敗的人,我可以看到我在正確的元素。文本是它應該的。當我做element.click(),我無處可去。 我試過action.moveToElement.click(),doubleClicking它。它適用於其他3種語言,但不適用於失敗的語言。所以我非常積極,我的代碼沒問題。如果我手動執行,沒有問題,我只能使用IE驅動程序查看它。

我如何固定它:

作爲工作的時候,我正在讀元素的位置,然後再用java.Robot實際鼠標移動到我的子菜單項,然後單擊它。現在它可以工作,但我仍然想明白爲什麼我遇到了這個問題。

有沒有其他人經歷過這個?

我真的不喜歡我的解決方案,因爲現在如果IE瀏覽器在第二臺顯示器上打開並且我的X和Y位置與主顯示器相關時我的測試失敗。

我很想添加html,但它很複雜,頁面將其作爲html並不顯示它。

我對那部分它有代碼:

element = wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("span[widgetid=\"app_schedulesAndPlanningApp\"].dijit.dijitReset.dijitButton"))); 

action.moveToElement(element, 1, 1).perform(); 

try { 
    robot = new Robot(); 
    element = driver.findElement(By.cssSelector("div.appSubMenu ul li.subApp:nth-child(4)")); 
    location = element.getLocation(); 
    robot.mouseMove(location.getX() + 20, location.getY() + 80); 
    robot.mousePress(InputEvent.BUTTON1_MASK); 
    robot.mouseRelease(InputEvent.BUTTON1_MASK); 
} 

你在哪裏看到我的機器人用來做element.click();

+0

似乎很奇怪。你介意添加一個HTML片段+你正在使用的選擇器嗎? –

+0

什麼也奇怪的是,在另一種情況下,我使用這個:\t \t元=等待 \t \t \t \t。直到(ExpectedConditions.presenceOfElementLocated(通過 \t \t \t \t \t \t .cssSelector(「跨度[爲widgetid = \ 「app_schedulesAndPlanningApp \」] dijit.dijitReset.dijitButton「)))。 \t \t action.moveToElement(element)。執行(); \t \t元素= wait.until(ExpectedConditions.presenceOfElementLocated(通過 \t \t \t \t .cssSelector( 「div.appSubMenu UL李:第n個孩子(5)」))); \t \t element.click(); 所以它幾乎是相同的菜單,只是不同的子菜單項和這個代碼爲每個語言工作100% – Gino

+0

粘貼HTML(編輯問題時),選擇它並點擊'代碼示例'按鈕,應格式化它,被展示。另外,失敗的測試給出了什麼錯誤? –

回答

-1

我在使用IE webdriver的時候遇到了類似的問題。我的代碼工作在Firefox下拉下來,但在IE事件失敗,雖然webdriver指向正確的元素。

我的解決方案是在點擊下拉菜單後,使用Thread.Sleep(100);進行第二次等待。像這樣的東西。

Click on Menu or dorpdown box element 
Thread.sleep(100); //in milliseconds 
Click on dropdown element form menu or dorpdown 

希望這會解決您的問題與IE瀏覽器。

+0

我可以看到使用其他3種語言的元素,當我得到按鈕的名稱 - 它應該是。它與睡眠時間無關..謝謝各位 – Gino

1

我的經驗是.click()方法並不總是可靠的。您可以嘗試設置一個方法,重新嘗試您的.click()操作,直到它實際工作。這對我有效。

+1

謝謝,這是一個非常好的主意,但我已經在做它。我正在重試5次。我想我會讓這一個去..就像我告訴,我知道我發現的元素,我已經重試點擊它,但仍然沒有結果只有這一頁只有西班牙語。 – Gino