2012-08-13 30 views
0

所以我一直試圖解決這個問題好幾個小時。我不知道我做錯了什麼。讓Java Webdriver的「向下箭頭」動作起作用

這是一個我正在尋找的字段是<input type="text" id="id_attendees" name="attendees">。當我輸入時,會創建一個js下拉列表。當我按下鍵盤上的向下箭頭時,它工作正常,並選擇最佳選擇。當我在IDE中執行keyDown --- id=id_attendees --- \40時,它工作正常,並且也選擇了該選項。

我不能讓它做同樣在Java中的webdriver雖然

Actions actionObject = new Actions(driver); 
actionObject.sendKeys(Keys.ARROW_DOWN); 

^不起作用。

driver.findElement(By.id("id_attendees")).sendKeys(Keys.ARROW_DOWN); 

^不起作用

我試圖Keys.DOWN在這兩種情況下,那也不行。我創建了一個文字String altm = "\u0040";,所有這些都是輸入一個@符號。

我也嘗試了一堆其他的東西以及沒有任何工作。我不知道我錯過了什麼。

編輯1:

@Roddy謝謝! - 鑑於鏈接我補充說,做工作(進口DefaultSelenium和WebDriverBackedSelenium後,以下

DefaultSelenium sel = new WebDriverBackedSelenium(driver,vars.siteurl); 
sel.fireEvent("//input[@id='id_attendees']", "keydown"); 

編輯2: - > DOH不工作我有過激顯然

+1

可能與正在填充/創建下拉列表的JavaScript並沒有被您的輸入觸發(因此沒有任何東西向下箭頭* *)。可能想看看[這個問題] (http://stackoverflow.com/questions/9202061/test-autocomplete-with-selenium-webdriver)。 – 2012-08-13 20:05:51

+0

謝謝!這至少能夠起作用,下次必須牢記在心。從程序員的角度來看,你對於如何避免它有什麼想法嗎? – StanM 2012-08-13 20:13:45

+0

一般來說,如果您正在測試的是某種JavaScript功能,那麼您需要確認測試邏輯實際上首先觸發JavaScript。驗證,回調,自動完成和表單通常是可能發生此類事情的地方,所以通過一個JS來看看它是如何被觸發並相應地制定測試通常是一個好主意。 – 2012-08-13 20:20:31

回答

0

。一段時間腳本需要一些時間來加載列表,以便需要添加的等待,

WebElement ar=driver.findElement(By.id("id_attendees")); 
Thread.sleep(1000); 
ar.sendKeys(Keys.ARROW_DOWN); 
0

我覺得你的操作使用是不完全正確。

該實現是一個構建器模式。調用sendKeys不發送該事件,它只在您致電執行時纔會觸發事件。請注意,返回值sendKeys是一個操作實例。

Actions actionObject = new Actions(driver); 
actionObject = actionObject.sendKeys(Keys.ARROW_DOWN); //ASSIGN the return or you lose this event. 
actionObject.perform(); //Should do what you want. Note that this will reset the builder. 

希望有所幫助。