当没有可用的提交按钮时将键发送到表单字段的问题

Problem with sending keys to a form field when there is no submit button available

我正在为一个学校项目研究 Selenium WebDriver。 我目前正在创建一个 Maven Web 应用程序(使用 jsp / servlet),该应用程序通过网络抓取 tripadvisor 数据,将其放入数据库,然后根据用户过去的行为对数据进行排序。

当我必须将密钥提交到 tripadvisor 搜索栏时,我的问题就开始了。没有提交按钮,所以我必须使用 org.openqa.selenium.Keys 导入。这是我试过的代码:

driver.findElement(By.xpath("//span[contains(@class, 'brand-trip-search-geopill-TripSearchGeoPill__icon--jEoJX')]")).click();

String keyword = request.getParameter("<parameter-inserted-by-user>");
//insert text inside search form
WebElement insert_element = driver.findElement(By.xpath("//input[@class='input-text-input-ManagedTextInput__managedInput--106PS']"));

insert_element.sendKeys(keyword+Keys.ENTER);

出现的问题是,当我 运行 测试时,文本被插入到搜索表单中,但是当 Keys.ENTER 发生时,搜索没有提交,它注册就像我实际上写道:

insert_element.sendKeys(Keys.ENTER);

我一直潜伏在 Whosebug 周围寻找解决方案,我尝试了以下替代方案:

insert_element.sendKeys(keyword + "\n");

无济于事。它只注册 "Enter" 命令,因此让我可以搜索我的 "Nearby" 位置。

我也看到我可以使用 javascript 但是对于提交搜索请求这样简单的任务来说它看起来很麻烦。

目前我使用的是 Chromedriver v.2.44 和 Selenium v​​.3.141.59

有人可以帮助我吗?预先感谢您的宝贵时间。

您遇到了计时问题。 Selenium 打字速度非常快,然后按回车键。手动执行这些操作,您会发现在输入和根据您输入的内容获取结果之间会有轻微的延迟。

我有示例代码可以证明上述内容,但我将其留给您自行解决。上面的评论和你的代码应该足够了。

---编辑--- 添加示例代码现在 OP 已经弄明白了

driver.findElement(By.xpath("//span[contains(@class, 'brand-trip-search-geopill-TripSearchGeoPill__icon--jEoJX')]")).click();

String keyword = request.getParameter("<parameter-inserted-by-user>");
//insert text inside search form
WebElement insert_element = driver.findElement(By.xpath("//input[@class='input-text-input-ManagedTextInput__managedInput--106PS']"));

insert_element.sendKeys(keyword);
Thread.sleep(1000);    //  <-- Not ideal but for a permanent solution, but illustrates this is timing related.
insert_element.sendKeys(Keys.ENTER);