如何在Eclipse中用Selenium向禁用Ctrl+V的日期表单输入Excel日期
我之前也碰到过这种禁用粘贴的日期输入框的坑,给你几个亲测有效的解决方案,都是基于Java版Selenium的,适配你在Eclipse里的使用场景:
解决方案1:通过JavaScript直接修改输入框值
这种方法能跳过前端的输入限制,直接操作DOM元素的value属性,对于屏蔽了普通输入的场景特别好用。另外要注意,输入框默认显示__/__/____,说明它期望的是带分隔符的日期格式(比如MM/DD/YYYY),直接输入无分隔符的03012017可能不被识别,建议转换成对应格式再设置。
代码示例:
// 定位日期输入框 WebElement dateInput = driver.findElement(By.id("ctl00_ContentPlaceHolder2_response_def06a4c-a2c3-4120-a165-7ed24d106c6e")); // 通过JS执行器设置输入框值 JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("arguments[0].value = '03/01/2017';", dateInput);
解决方案2:模拟逐个字符按键输入
有些前端限制只会拦截批量输入,对模拟真实用户的单个按键输入会放行。你可以试试把日期拆成单个字符逐个输入,还可以加个小延迟更贴近真实操作。
代码示例:
WebElement dateInput = driver.findElement(By.id("ctl00_ContentPlaceHolder2_response_def06a4c-a2c3-4120-a165-7ed24d106c6e")); // 先清除输入框原有占位符 dateInput.clear(); // 目标日期,可根据输入框要求选择带分隔符或不带的格式 String targetDate = "03012017"; // 逐个字符输入 for (char c : targetDate.toCharArray()) { dateInput.sendKeys(String.valueOf(c)); // 可选:每个按键间隔100ms,避免被前端的防刷限制拦截 Thread.sleep(100); }
提示:如果直接输入03012017没反应,就换成03/01/2017试试,适配输入框的格式校验规则。
解决方案3:先全选清除原有内容再输入
有时候输入框的默认占位符(__/__/____)会干扰输入,先全选删除再输入可能解决问题:
代码示例:
WebElement dateInput = driver.findElement(By.id("ctl00_ContentPlaceHolder2_response_def06a4c-a2c3-4120-a165-7ed24d106c6e")); // 全选输入框内的所有内容 dateInput.sendKeys(Keys.CONTROL + "a"); // 删除选中内容 dateInput.sendKeys(Keys.DELETE); // 输入目标日期 dateInput.sendKeys("03/01/2017");
内容的提问来源于stack exchange,提问作者Will Patterson
相关产品推荐
相关产品推荐

