-3

如何 Page reload detected during async script使用 Selenium 和 InternetExplorerDriver 处理错误?

错误堆栈跟踪:

org.openqa.selenium.JavascriptException: Page reload detected during async script
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'
System info: os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_221'
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.edgechromium: false, ie.edgepath: , ie.ensureCleanSession: false, ie.fileUploadDialogTimeout: 3000, ie.forceCreateProcessApi: false, ignoreProtectedModeSettings: false, ignoreZoomSetting: false, initialBrowserUrl: http://localhost:24135/, nativeEvents: true, requireWindowFocus: false}, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: f8538187-14df-4144-8bd0-605ce398395e
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    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:552)
    at org.openqa.selenium.remote.RemoteWebDriver.executeAsyncScript(RemoteWebDriver.java:506)
    at stepdefinition.Steps.I_selected_the_Client(Steps.java:60)
4

3 回答 3

1

此错误消息...

org.openqa.selenium.JavascriptException: Page reload detected during async script 
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53' 
System info: os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_221' 
Driver info: org.openqa.selenium.ie.InternetExplorerDriver

...暗示InternetExplorerDriver无法与浏览上下文交互,即InternetExplorer 浏览器会话。

关于以下方面的更多细节:

  • Selenium 绑定艺术,即量角器/ Java / Python / C#
  • Selenium客户端版本。
  • InternetExplorerDriver版本。
  • 相关 HTML(如果适用)。

会帮助我们构建一个规范的答案。

但是,如果您按照Page reload detected during async script中的文档使用Protractor,则此错误意味着:

当命令在浏览器上挂起时,发生了导航或重新加载事件。通常,这是因为单击操作或导航导致页面加载。Protractor 正试图等待 Angular 变得稳定,但它被重新加载打断了。

解决方案

作为一种解决方案,您可能需要插入一个browser.wait条件以确保加载完成,然后再继续。

于 2020-02-12T15:45:13.017 回答
0

您能否提供一个最小样本来重现该问题?您正在运行哪个代码片段以及错误发生在哪一行?您可以按照以下示例在 Java 中使用 Selenium webdriver 自动化 IE:

import org.openqa.selenium.By;     
import org.openqa.selenium.WebDriver;     
import org.openqa.selenium.ie.InternetExplorerDriver;     
import org.openqa.selenium.WebElement; 

public class new_java_class {              
public static void main(String[] args) {     
  //add the IE web driver path here..     
  System.setProperty("webdriver.ie.driver","your\\path\\to\\IEwebdriver\\IEDriverServer.exe");              
       WebDriver browser = new InternetExplorerDriver();     
       //replace the URL of the web page here..     
       browser.get("http://testsite.login/");                     
       WebElement username = browser.findElement(By.name("uname"));      
       username.sendKeys("test_user");                     
       WebElement password = browser.findElement(By.name("psw"));        
       password.sendKeys("abcd@1234");                     
       WebElement btn = browser.findElement(By.name("signIn"));      
       btn.click();                     
}              
} 
于 2020-02-14T09:31:44.483 回答
0

通过使用 CSS 定位器而不是 AsynScript 对 webelement 执行点击操作,问题得到了解决。谢谢你

于 2020-02-15T11:50:43.423 回答