【问题标题】:clear() method doesn't clears the field in MS EDGE IE11 with Selenium-4.1.2clear() 方法不会使用 Selenium-4.1.2 清除 MS EDGE IE11 中的字段
【发布时间】:2022-06-20 13:36:02
【问题描述】:

最近,我已将我的 Selenium 版本从 2.53 升级到 4.1.2,以便在 MS EDGE IE11 上测试我们的应用程序。但是当我们使用简单的 Selenium .clear() 清除任何 TextBox 字段时,我们一直面临着问题。虽然,它清除了相应的,但也抛出了异常。

还有其他人在使用 Selenium-4.1.2 时遇到过类似问题吗?

例外:

org.openqa.selenium.InvalidElementStateException:JavaScript 错误 遇到清除元素。司机认为这是 因为该元素是隐藏的、禁用的或只读的,它不能 是清除元素。构建信息:版本:'4.1.2',修订: '9a5a329c5a' 系统信息:os.name:'Windows 10',os.arch:'amd64', os.version: '10.0', java.version: '1.8.0_222' 驱动信息: org.openqa.selenium.ie.InternetExplorerDriver 命令: [69d06b0b-b468-455b-9d3c-24626ad40e16,clearElement {id=2bb89cb8-5d24-4dd8-8e3a-be8fa7e1272e}] 能力 {acceptInsecureCerts:假,浏览器名称:Internet Explorer, browserVersion:11,javascriptEnabled:true,pageLoadStrategy:正常, 平台:WINDOWS,平台名称:WINDOWS,代理:Proxy(), se:ieOptions: {browserAttachTimeout: 0, elementScrollBehavior: 0, enablePersistentHover: true, ie.browserCommandLineSwitches: , ie.edgechromium: false, ie.edgepath: , ie.ensureCleanSession: false, ie.fileUploadDialogTimeout: 3000, ie.forceCreateProcessApi: false, 忽略保护模式设置:假,忽略缩放设置:假, initialBrowserUrl: http://localhost:54726/, nativeEvents: true, requireWindowFocus: false}, setWindowRect: true, strictFileInteractability:false,超时:{implicit:0,pageLoad: 300000,脚本:30000},unhandledPromptBehavior:解雇并通知} 元素:[[InternetExplorerDriver:WINDOWS 上的 Internet Explorer (69d06b0b-b468-455b-9d3c-24626ad40e16)] -> id: userid] 会话 ID: 69d06b0b-b468-455b-9d3c-24626ad40e16 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:200) 在 org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:133) 在 org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:53) 在 org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:184) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.invokeExecute(DriverCommandExecutor.java:167) 在 org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:142) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:558) 在 org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:251) 在 org.openqa.selenium.remote.RemoteWebElement.clear(RemoteWebElement.java:126)

期望:我们期望clear() 应该清除该字段而不抛出任何异常。

【问题讨论】:

  • 我试图重现这个问题但失败了。如果可能,请提供更多详细信息,例如iedriver 的版本和简单代码。我tested with google,如您所见,它运行良好。其他网站是否也会出现此问题?
  • IEDriver 版本:4,我在 MS EDGE IE11 上使用 Java-Selenium 和 Selenium 版本进行测试:4.1.2
  • 可以看到我测试的是同一个版本,唯一不同的是java版本。如果可能,请提供重现问题的代码示例,这将有助于解决问题。正如其他成员所提到的,您可以尝试编写代码以在 clear() 之前等待页面元素加载。

标签: selenium selenium-webdriver internet-explorer-11 webdriverwait selenium-iedriver


【解决方案1】:

InvalidElementStateException 表示 WebElement 处于无法对其执行操作的特定状态。一些示例包括一个元素在单击时被另一个元素遮挡,或者可能在 DOM 上不可见。


解决方案

始终建议清除任何<input>字段,您需要将元素的WebDriverWait诱导为elementToBeClickable() (JavaScript) 在调用 click() 之前完全渲染 HTML DOM,如下所示:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("element_cssSelector"))).clear();

【讨论】:

  • 由于 senKeys() 正在处理该特定元素,这表明 HTML DOM 在我们执行 .clear() 操作之前已正确呈现。我们的意图是先清除文本框然后发送值,但不幸的是 .clear() 不起作用。因此,我们尝试将值直接发送到该特定文本框,并且脚本能够正确输入值。所以,我认为不应该有任何渲染问题。
【解决方案2】:

这是由于 Edge IE 模式驱动程序中的错误 https://github.com/SeleniumHQ/selenium/issues/10488

一种可能的解决方法是使用 JavascriptExecutor 来定位并清除输入字段

JavascriptExecutor jsExec = (JavascriptExecutor)driver;
jsExec.executeScript("document.getElementById('field_to_clear').value=''");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多