我正在为一个学校项目研究Selenium WebDriver。 我目前正在创建一个Maven Web应用程序(带有jsp / servlet),该应用程序将Web抓取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);
我一直潜伏在stackoverflow上寻找解决方案,并且尝试了以下替代方法:
insert_element.sendKeys(keyword + "\n");
无济于事。它仅注册“ Enter”命令,从而为我提供了“附近”位置的搜索。
我还看到我可以使用javascript,但是对于像提交搜索请求这样的简单任务来说,它看起来很麻烦。
当前我正在使用Chromedriver v.2.44和Selenium v.3.141.59
有人可以帮助我吗?预先感谢您的宝贵时间。
答案 0 :(得分:0)
您遇到了计时问题。 Selenium的输入速度非常快,然后按Enter键。手动执行操作,您将看到根据键入的内容键入获取结果之间的时间稍有延迟。
我有证明上述内容的示例代码,但是请您自己找出来。上面的注释和您的代码应该足够。
---编辑--- 添加示例代码,因为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);