无法在 Internet Explorer 11 中执行 Javascript 执行器
我正在尝试使用 javascript 执行器为给定的 xpath 发送密钥,但它在浏览器 IE 11 上不起作用。由于这是一个隐藏的 xpath,所以我使用 javascript 执行器。我正在使用带有 java 的 Eclipse 工具。
当前使用 IEDriverServer_Win32_3.14/IEDriverServer.exe 并且 已经尝试使用 IEDriverServer_Win32_3.12 /IEDriverServer.exe
代码试验:
static JavascriptExecutor jse = (JavascriptExecutor)driver;
By AAA = (By.xpath(""));
jse.executeScript("argument[0].value='XXX';",AAA);
jse.executeScript("AAA.value='XXX'");
错误:
org.openqa.selenium.JavascriptException: Error executing JavaScript
Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T14:04:26.12Z'
System info: host: 'XXXX', ip: '172.16.68.66', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_101'
Driver info: org.openqa.selenium.ie.InternetExplorerDriver
Capabilities {acceptInsecureCerts: false, browserName: internet explorer, browserVersion: 11, javascriptEnabled: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), se:ieOptions: {browserAttachTimeout: 0, elementScrollBehavior: 0, enablePersistentHover: true, ie.browserCommandLineSwitches: , ie.ensureCleanSession: false, ie.fileUploadDialogTimeout: 3000, ie.forceCreateProcessApi: false, ignoreProtectedModeSettings: false, ignoreZoomSetting: false, initialBrowserUrl: http://localhost:46956/, nativeEvents: true, requireWindowFocus: false}, setWindowRect: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}}
Session ID: 2594ae9b-69db-4f48-8e03-29d90e58dcfa
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
at org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:480)
at xplocators.productonelocators.pOneTwoxp(productonelocators.java:85)
at synergy.synergy_artifact.BasesynergyTest.addproductones(BasesynergyTest.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
手动步骤:
- 登录 URL
- 填写产品 A
- 单击添加产品
- 填写产品 B
- 注意:除非添加按钮点击后产品 B 将不会显示。
在下面的行中,不需要额外的括号。另外,您将
定位器分配给
aaa
,而不是
WebElement
。 JavaScript没有
类的
概念,只有一个元素。
658051083
这应该是
203093404 < /code>
随着上面的更改,该行现在应起作用
524708164
此行不起作用,因为
AAA
未在JavaScript范围。但是...不需要,因为上线应该做同样的事情。
457030180
因此,有了所有更改,最终代码应该看起来像
399888948
您需要注意以下几点:
- 如果您使用的是 Selenium v​​3.12.0 ,则需要使用 InternetExplorerDriver v3.12.x 二进制文件,因为 InternetExplorerDriver v3.14.x 可能不兼容。
- 您的 JDK 版本为 1.8.0_101 ,非常老旧,您需要将 JDK 升级到最新级别 JDK 8u212 。
-
假设您在使用以下命令访问 URL 后立即尝试对 产品 A 执行
sendKeys()
executeScript()
您需要诱导 WebDriverWait 以使所需 元素可点击 ,并且您可以使用以下解决方案:WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("element_xpath"))); ((JavascriptExecutor)driver).executeScript("arguments[0].setAttribute('value','XXX')", element);
You can find a relevant discussion in Using JS to enter text, but if I input text in one text box, the value already entered is getting deleted