2012-08-13 41 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. 

希望有所帮助。