让 Java Webdriver 'Down Arrow'操作正常工作



所以我已经尝试了几个小时来解决这个问题。我不知道我做错了什么。

这是我正在寻找的超前类型字段是<input type="text" id="id_attendees" name="attendees">。当我在那里输入时,会创建一个 js 下拉列表。当我按键盘上的向下箭头时,它可以正常工作并选择首选。当我在 IDE 中keyDown --- id=id_attendees --- 40时,它可以正常工作,还可以选择选项。

不过我无法让它在 Java 网络驱动程序中做同样的事情

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:--> 卫生部不起作用。我显然过分热心了。

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

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

我认为您对操作的使用不太正确。

实现是构建器模式。 调用 sendKeys 不会发送事件,它只会暂存调用 execute 时要触发的事件。 请注意,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.

希望有帮助。

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

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

当你希望你的脚本执行该操作时,你需要执行()它。你可以把它链接在你的 build() 方法之后(例如,如果你只使用它一次),或者稍后在你需要的时候在你的代码中,就像这样:

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

actionObject.perform();

祝你好运!

最新更新