使Java Webdriver“向下箭头”操作生效

vptzau2j  于 2022-10-22  发布在  Java
关注(0)|答案(3)|浏览(156)

所以我已经试着解决这个问题好几个小时了。我不知道我做错了什么。
这是一个我正在查找的提前输入字段,它是<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不起作用。很明显,我太热情了。

kkbh8khc

kkbh8khc1#

一些时间脚本需要一些时间来加载列表,因此需要添加等待,

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

wsxa1bj12#

我认为你使用动作不太正确。
实现是一个构建器模式。调用sendKeys不会发送事件,它只会在调用perform时暂存要触发的事件。请注意,sendKeys的返回值是Actions示例。

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.

希望有帮助。

5uzkadbs

5uzkadbs3#

对于Actions类,在定义了它将为您做什么之后,您需要首先构建()它。所以在你的情况下会是这样的:

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

当您希望脚本执行该操作时,需要执行()。您可以在build()方法之后直接链接它(例如,如果您只使用一次),或者在需要时在代码中稍后链接它,如下所示:

actionObject.sendKeys(Keys.ARROW_DOWN).build().perform();

actionObject.perform();

祝你好运

相关问题