Selenium IE WebDriver切换32位后sendKeys仍输入缓慢求助
我完全理解你现在的挫败感——Chrome和Firefox里2秒搞定的登录流程,到IE11里居然要拖50秒,而且试了20种方案(包括大家普遍推荐的切换32位IEDriver)都没效果,这确实让人头疼。结合你用Mac+Parallels虚拟机跑Win10、基于Selenium+TestNG做自动化的环境,我给你几个针对性的排查方向:
强制IE使用100%缩放级别
IE的缩放比例不是100%时,很容易导致IEDriver的输入操作延迟。你可以先手动把IE浏览器的缩放调到100%,也可以在代码里添加配置强制忽略缩放设置:DesiredCapabilities ieCaps = DesiredCapabilities.internetExplorer(); ieCaps.setCapability("ignoreZoomSetting", true); // 同时建议关闭持久悬停,这也可能影响输入速度 ieCaps.setCapability("enablePersistentHover", false); WebDriver ieDriver = new InternetExplorerDriver(ieCaps);另外别忘了检查Win10系统级的显示缩放:打开「设置→系统→显示」,确保“缩放与布局”是100%。
彻底关闭IE的增强保护模式
你已经关闭了常规的保护模式复选框,但可能漏掉了「增强保护模式」。打开IE的「Internet选项→高级」,找到“增强保护模式”选项,取消勾选后重启IE再测试。给虚拟机分配足够资源
虚拟机资源不足是容易被忽略的点。试试给Win10虚拟机多分配一些CPU核心(至少2核)和内存(建议4G以上),同时关闭虚拟机里的后台冗余程序,比如临时禁用Windows Defender的实时扫描,减少资源占用。用JavaScript替代原生sendKeys()
如果IEDriver的原生sendKeys实现就是有问题,直接通过JS操作DOM是个快速的替代方案,速度会快很多。比如登录场景的输入可以这么写:WebElement usernameField = driver.findElement(By.id("username")); ((JavascriptExecutor) driver).executeScript("arguments[0].value = '你的用户名';", usernameField); WebElement passwordField = driver.findElement(By.id("password")); ((JavascriptExecutor) driver).executeScript("arguments[0].value = '你的密码';", passwordField);这种方式绕开了IEDriver的输入模拟逻辑,直接修改输入框的value值,基本不会有延迟。
匹配IEDriver和IE的版本
你的IE版本是11.192.16299.0,对应Win10 1709版本。确保你下载的IEDriver是和这个IE版本完全匹配的,不要随便用最新版的IEDriver。另外,检查IEDriver的权限,确保它能正常读写临时文件。禁用IE的第三方加载项
一些第三方工具栏、插件会干扰IEDriver的正常操作。打开IE的「设置→管理加载项」,禁用所有非微软官方的加载项,重启IE后再运行测试。
如果以上方法都没解决问题,你可以提供以下信息帮我进一步排查:
- IEDriver的日志(启动时加上
-log-level INFO参数生成) - 你初始化IEDriver的代码片段
内容的提问来源于stack exchange,提问作者user9251032

