【问题标题】:Safari bug - selenium Actions click methodSafari bug - selenium Actions 点击方法
【发布时间】:2020-08-18 14:52:44
【问题描述】:

我得到异常:

org.openqa.selenium.remote.UnreachableBrowserException:与远程浏览器通信时出错。它可能已经死了。

每次我在 Safari 上使用时:

Actions action = new Actions(WebDriverRunner.getWebDriver());
    action.click(packageCodeButton()).build().perform();
    

我在 BrowserStack (iPhone) 和 MacOS 上使用设备。当我选择 12 作为浏览器时,它可以在 MacOS 上运行。

问题仅出现在 Safari 上,而不会出现在任何其他浏览器上。它也不知道我尝试单击哪个元素或何时执行此操作(在哪个测试阶段)。其他 selenium 命令工作正常(我使用 selenide 框架)。

有人可以帮我解决这个错误吗?

有人问了类似的问题: stack

但是所有浏览器和随机命令都只是零星的问题。 在我的情况下,它看起来像一些 Safari 驱动程序错误。

编辑:

堆栈跟踪:

org.openqa.selenium.remote.UnreachableBrowserException:与远程浏览器通信时出错。它可能已经死了。 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:17:03' 系统信息:主机:'L069G',ip:'10.212.130.34',os.name:'Windows 10',os.arch:'amd64',os.version:'10.0',java.version:'11' 驱动程序信息:driver.version:RemoteWebDriver 功能 {64 位:false,acceptSslCert:false,acceptSslCerts:false,automationName:XCUITest,bootstrapPath:/usr/local/.browserstack/co...,浏览器:iphone,browserName:safari,browser_name:Safari,browserstack-tunnel:true , browserstack.isTargetBased: false, databaseEnabled: false, detected_language: selenium/3.141.59 (java win..., device: iphone, deviceName: iPhone 7, deviceOrientation: PORTRAIT, javascriptEnabled: true, locationContextEnabled: false, loggingPrefs: org. openqa.selenium.logging...,移动:{浏览器:移动,版本:iPhone 7-12.1},networkConnectionEnabled:false,newCommandTimeout:0,new_bucketing:true,noReset:true,方向:PORTRAIT,orig_os:ios,osVersion: 12, os_version: 12, platform: MAC, platformName: MAC, platformVersion: 12.1, realMobile: true, real_mobile: true, safari.options: {}, safariIgnoreFraudWarning: true, safariInitialUrl: http://mobile-internet-chec.. ., sessionName: , takeScreenshot: true, udid: ..., useXctestrunFile: true, version: ,wda_port:8405,webStorageEnabled:假,webkitResponseTimeout:20000} 会话 ID:

at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:573)
at org.openqa.selenium.remote.RemoteExecuteMethod.execute(RemoteExecuteMethod.java:35)
at org.openqa.selenium.remote.RemoteMouse.click(RemoteMouse.java:59)
at org.openqa.selenium.interactions.ClickAction.perform(ClickAction.java:39)
at org.openqa.selenium.interactions.CompositeAction.perform(CompositeAction.java:34)
at org.openqa.selenium.interactions.Actions$BuiltAction.perform(Actions.java:642)
at TestHelpers.Helpers.GoogleMap.selectClosestOnMapMobile(GoogleMap.java:99)(file:Tests/src/test/resources/1_SPY-2619.feature:12)

原因:java.lang.IllegalArgumentException:预期一个元素,但结果是:

BrowserStack 可视化日志显示信息:

方法尚未实现

【问题讨论】:

  • 您可以使用普通的 .Click() 还是使用 javascript 方法,而不是使用单击操作? - 我知道这并不理想,但它可能是让你解决这个问题的一种解决方法......你是否也让 browserstack 知道你的问题?他们可能已经意识到并有一个解决方法,因为这就是他们所做的
  • @RichEdwards 我不能使用正常的 click() 和 js 方法,因为我尝试点击 GoogleMap 并且它们都不起作用(正常错误'另一个元素会接收动作' js没有可见的点击结果)。如果我在这里没有得到帮助,我会写信给 BrowserStack。

标签: ios selenium selenium-webdriver safari selenide


【解决方案1】:

此错误消息...

org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.

...暗示 RemoteWebDriver 实例被突然关闭。

完整的错误堆栈跟踪有助于以更好的方式调试问题。不过,根据WebDriver fix for UnreachableBrowserException的文章,可能的原因和解决方法可以是以下两种:

  • 如果原因是java.net.SocketException: Software cause connection abort: recv failed: 过早关闭连接时会出现此错误。它可能是由 java 中的 ssl 证书处理引起的,这是非常随机的,因为所有 http 流量都由 execute 方法处理。因此,通过覆盖它并添加简单的重试功能,您可以提供一种解决方法。

  • 如果原因是 java.net.SocketTimeoutException: Read timed out:如果您在 系统上工作,那么您可能已经达到了可能打开的连接的限制。这通常会发生,因为 Selenium 会创建大量连接,即使 java 触发了关闭连接命令,Windows 也会使它们保持打开/缓存。要解决此问题,您需要在以下范围内更改 Windows 注册表值:

    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters:您需要设置/创建两个 DWORD 值:

      MaxUserPort = 32768
      TcpTimedWaitDelay = 30
      

    MaxUserPort 将增加可能打开的连接的限制(您可以选择 5000-65534 之间的任何值,越高越好)。 TcpTimedWaitDelay 确保 windows 将在 30 秒后关闭陈旧的连接(已经被 java 关闭)(不能设置为更低,但如果不设置,默认值为 4 分钟!!!)。


其他注意事项

确保:

注意:您使用的是java.version: '11'。作为记录 Selenium 仍然不完全兼容 。更多详情请关注Unable to import org.openqa.selenium.WebDriver using Selenium and Java 11


参考文献

您可以在以下位置找到一些相关讨论:

【讨论】:

  • 您的回答很好,但不是重点。我的程序在一周前运行,并且仍然可以在不同的 BrowserStack 设备上运行。我会将堆栈跟踪粘贴到问题中。
  • 附加到原始问题的堆栈
  • @Kamil1014 查看答案更新并告诉我状态。
  • 我们每天都有数百个测试在使用这种 java 配置进行几个月。你认为java版本可能是这种特定场景的一种情况?
猜你喜欢
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多