selenium - RemoteWebDriver 在调用 switchTo() 方法时导致 stackoverflow 错误
问题描述
硒版本:3.7.1
我正在自动化一个 java swing 应用程序并使用远程 Web 驱动程序,如下所示:
DesiredCapabilities dc = new DesiredCapabilities();
dc.setBrowserName("java");
dc.setVersion(" ");
dc.setJavascriptEnabled(true);
dc.setPlatform(Platform.ANY);
javaDriverTest = new RemoteWebDriver(new URL("docker container url"), dc);
除以下各项外,一切正常:
javaDriverTest.switchTo().window(windowName);
我随后收到此错误:
java.lang.StackOverflowError
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
at org.apache.http.impl.BHttpConnectionBase.fillInputBuffer(BHttpConnectionBase.java:344)
at org.apache.http.impl.BHttpConnectionBase.isStale(BHttpConnectionBase.java:364)
at org.apache.http.impl.conn.CPoolProxy.isStale(CPoolProxy.java:114)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:208)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:138)
at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:86)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:161)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:600)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:657)
at org.openqa.selenium.remote.RemoteWebDriver.getWindowHandles(RemoteWebDriver.java:505)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:962)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteTargetLocator.window(RemoteWebDriver.java:963)
这不会一直发生。但是比较频繁。知道如何修复它吗?
解决方案
似乎问题与我启动应用程序的方式有关,即我最初使用以下内容:
export DISPLAY=:1.0
javaws -J -Dmarathon.agent=file:/root/Downloads/marathon-java-agent-5.1.4.0.jar.........
但是当我将 Xvfb 添加到命令中时,即
Xvfb :1.0
export DISPLAY=:1.0
javaws -J -Dmarathon.agent=file:/root/Downloads/marathon-java-agent-5.1.4.0.jar.........
它解决了这个问题。因此,我认为这个问题确实与RemoteWebDriver无关,而实际上与被测应用程序的启动方式有关。
推荐阅读
- amazon-cloudformation - 为什么此 SQSQueuePolicy 无法在 AWS CloudFormation 中创建?
- c# - Xamarin 验证
- java - 根据数组中的整数打印星星 - Java
- angular - 通过在 ngx-bootstrap datepicker 中动态设置“dateCustomClasses”属性来突出显示选定的日期
- c# - 将 FieldInfo 转换为 PropertyInfo,反之亦然
- javascript - 根据下拉选择隐藏/显示内容
- firebase-cloud-messaging - Firebase 消息传递偶尔会因内部错误而失败
- ios - 如何在表格视图中获取选定行的文本?(迅速)
- c++ - UE4 C++ 跨多个级别保存项目指针的库存 TArray
- laravel - 如何在 Laravel 中使用的 Vue 中添加点击处理程序?