如何使用 Selenium 填写自动完成输入框? (为啥自动输入不加载自动完成选项但手动输入呢?)
Posted
技术标签:
【中文标题】如何使用 Selenium 填写自动完成输入框? (为啥自动输入不加载自动完成选项但手动输入呢?)【英文标题】:How to fill in an autocomplete inputbox using Selenium? (Why an automated input does not load autocomplete options BUT a manual input does?)如何使用 Selenium 填写自动完成输入框? (为什么自动输入不加载自动完成选项但手动输入呢?) 【发布时间】:2013-07-18 10:36:54 【问题描述】:以下代码测试网页的自动完成框:
public class Test
public static void main(String[] args) throws InterruptedException
System.setProperty("webdriver.chrome.driver","chromedriver\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www..............com");
driver.switchTo().frame("mainFrame");
WebDriverWait waitst = new WebDriverWait(driver, 120);
waitst.until(ExpectedConditions.visibilityOfElementLocated(By.name("sourceTitle")));
WebElement sourceTitle = driver.findElement(By.name("sourceTitle"));
WebElement small = driver.findElement(By.cssSelector("li#nameExampleSection label + small"));
sourceTitle.sendKeys("Times");
Thread.sleep(5000);
Actions actions = new Actions(driver);
actions.click(small).perform();
为什么不加载自动建议框? 重要提示: 尝试手动输入 "..........." ...自动完成框将加载得很好!!!那么,为什么cssSelector
不工作,为什么不加载自动完成框?
为什么自动输入不允许自动完成选项但手动输入呢???
PS:我也试过fireEvent
,sendKeys
,但没有任何效果。
【问题讨论】:
你有没有试过其他浏览器??还有你为什么在网络驱动等待中等待0秒。 感谢您的回复。 1) 显式等待没有问题,我可以使用(driver, 120)
。页面加载正常。当“美联社,The”进入输入框时会出现问题......手动 - 没问题,但随着它自动进入 - 它根本不会加载选项。 2) 我也试过 FireFox - 没有任何改进。
标题很有希望,但我不太明白接受的答案如何解决 sendKeys() 不会使自动完成下拉列表显示为相同文本输入时的方式的事实手动输入的。为什么不提供一个可以检查有问题元素的真实 URL?
【参考方案1】:
我尝试了您的代码,它完全符合手动演练的功能。 “美联社”只返回“不匹配,请尝试来源”。然后,在您的代码中,您尝试单击下一个表单列表项,而不是结果弹出窗口。自动建议弹出窗口动态填充在位于输入表单下方的 html 页面顶部。以下代码确实选择了下拉菜单中的第一个选项。
@Test
public void test() throws InterruptedException
WebDriver driver = new ChromeDriver();
driver.get("http://www.lexisnexis.com/hottopics/lnacademic/?verb=sf&sfi=AC00NBGenSrch");
driver.switchTo().frame("mainFrame");
WebDriverWait waitst = new WebDriverWait(driver, 0);
waitst.until(ExpectedConditions.visibilityOfElementLocated(By.name("sourceTitle")));
WebElement sourceTitle = driver.findElement(By.name("sourceTitle"));
sourceTitle.sendKeys("Times");
Thread.sleep(5000);
WebElement firstItem = driver.findElement(By.xpath("//*[@class='auto_suggest']/*[@class='title_item']"));
firstItem.click();
【讨论】:
【参考方案2】:我找到了一个解决方法。我的问题是:
-
Selenium 在自动建议位置字段中输入了“Mandaluyong”
自动建议字段与匹配的选项一起出现
然后 selenium 将自动建议下拉菜单打开,未选择匹配的选项。
我所做的是:
driver.findElement(By.name("fromLocation")).sendKeys("Mandaluyong");
driver.findElement(By.name("fromLocation")).sendKeys(Keys.TAB);
这是因为在手动测试中,当我尝试按 TAB 键时,系统做了两件事:
-
从自动建议下拉菜单中选择匹配的选项
关闭自动建议下拉菜单
希望这会有所帮助。
【讨论】:
【参考方案3】:// 允许自动填充值填充文本框。
// 等待 6 秒确保插入自动值 线程.sleep(6000L);
//清除自动填充值 driver.findElement(By.name("txtBox")).clear();
driver.findElement(By.name("txtBox")).sendKeys("value");
【讨论】:
【参考方案4】:尝试首先单击输入文本框。 这将触发自动填充下拉框,然后使用 sendKeys 输入所需的值
【讨论】:
您能举个例子说明如何做到这一点吗? driver.findElement(By.name("fromLocation")).click(); driver.findElement(By.name("fromLocation")).sendKeys("XYZABC"); driver.findElement(By.name("fromLocation")).sendKeys(Keys.TAB);【参考方案5】:您可以使用 tab 或 enter 来退出场景,或者,如果它是必填字段,则 selenium 是不可能的。 (伤心)
【讨论】:
以上是关于如何使用 Selenium 填写自动完成输入框? (为啥自动输入不加载自动完成选项但手动输入呢?)的主要内容,如果未能解决你的问题,请参考以下文章
Python selenium无法通过ID或xpath填写输入框。