【发布时间】:2012-08-10 02:24:57
【问题描述】:
所以我已经尝试了几个小时来解决这个问题。我不知道我做错了什么。
这是我正在查看的类型提前字段是<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。显然是我太热心了。
【问题讨论】:
-
可能与正在填充/创建下拉菜单的 JavaScript 相关,而不是由您的输入触发(因此没有任何向下箭头到的内容。 ) 也可以看看this question。
-
谢谢!这至少使它起作用,下次必须记住。从程序员的角度来看,您对如何避免它有任何想法吗?
-
一般来说,如果您正在测试的任何内容中有某种 JavaScript 功能,您首先要确认您的测试逻辑实际上是触发 JavaScript。验证、回调、自动完成和表单通常是此类事情可能发生的地方,因此查看 JS 并了解它是如何被触发并相应地制定您的测试通常是一个好主意。
标签: java selenium webdriver keydown typeahead