所以我已经试着解决这个问题好几个小时了。我不知道我做错了什么。
这是一个我正在查找的提前输入字段,它是<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);
^不起作用
我试过钥匙。在这两种情况下,这都不起作用。我创建了一个文字String altm = "\u0040";
,只需键入@
符号。
我也尝试了很多其他的方法,但都没有效果。我不知道我错过了什么。
编辑1:
@Roddy谢谢!-考虑到这个链接,我添加了以下功能(在导入DefaultSelenium和WebDriverBackedSelenius之后)。
DefaultSelenium sel = new WebDriverBackedSelenium(driver,vars.siteurl);
sel.fireEvent("//input[@id='id_attendees']", "keydown");
编辑2:-->DOH不起作用。很明显,我太热情了。
3条答案
按热度按时间kkbh8khc1#
一些时间脚本需要一些时间来加载列表,因此需要添加等待,
wsxa1bj12#
我认为你使用动作不太正确。
实现是一个构建器模式。调用sendKeys不会发送事件,它只会在调用perform时暂存要触发的事件。请注意,sendKeys的返回值是Actions示例。
希望有帮助。
5uzkadbs3#
对于Actions类,在定义了它将为您做什么之后,您需要首先构建()它。所以在你的情况下会是这样的:
当您希望脚本执行该操作时,需要执行()。您可以在build()方法之后直接链接它(例如,如果您只使用一次),或者在需要时在代码中稍后链接它,如下所示:
或
祝你好运