无法在InternetExplorer 11中执行Javascript执行程序

问题描述 投票:0回答:2

[我正在尝试使用javascript executor来发送给定xpath的键,但在浏览器IE 11上不起作用。由于这是使用javascript executor的隐藏xpath,我正在使用带有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)

手动步骤:

  1. 登录到URL
  2. 填写产品A
  3. 点击添加产品
  4. 填写产品B
  5. 注意:除非单击添加按钮,否则产品B将不会显示。
javascript java selenium internet-explorer-11 selenium-iedriver
2个回答
0
投票

在下面的行中,不需要多余的括号。另外,您正在将By定位器分配给AAA,而不是WebElement。 JavaScript没有By类的概念,只有一个元素。

By AAA = (By.xpath(""));

应该是

WebElement AAA = driver.findElement(By.xpath(""));

有了上面的更改,此行现在应该可以工作

jse.executeScript("argument[0].value='XXX';", AAA);

此行不起作用,因为AAA未在JavaScript范围中定义。但是...不需要,因为上面的行应该做同样的事情。

jse.executeScript("AAA.value='XXX'");

因此,在进行了所有更改之后,最终代码应类似于

static JavascriptExecutor jse = (JavascriptExecutor)driver;
WebElement AAA = driver.findElement(By.xpath(""));
jse.executeScript("argument[0].value='XXX';", AAA);

0
投票

您需要注意几件事:

  • 如果使用的是Selenium v​​3.12.0,则需要使用InternetExplorerDriver v3.12.x二进制文件,因为InternetExplorerDriver v3.14.x可能不兼容。
  • 您的JDK版本1.8.0_101很古老,您需要将JDK升级到最新级别JDK 8u212
  • [假设您正在尝试使用sendKeys()访问url之后立即尝试对[[产品A]]使用executeScript(),您需要为所需的[[元素可点击]]引入WebDriverWait,然后您可以使用以下解决方案:WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("element_xpath"))); ((JavascriptExecutor)driver).executeScript("arguments[0].setAttribute('value','XXX')", element);

    您可以在Using JS to enter text, but if I input text in one text box, the value already entered is getting deleted中找到相关的讨论
© www.soinside.com 2019 - 2024. All rights reserved.