[我正在尝试使用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)
手动步骤:
在下面的行中,不需要多余的括号。另外,您正在将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);
您需要注意几件事:
[假设您正在尝试使用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中找到相关的讨论