WebDriverException:使用ChromeDriver Chrome和Selenium与iframe中的元素交互时分离的目标帧

oewdyzsn  于 2023-09-28  发布在  Go
关注(0)|答案(8)|浏览(135)

我用的是Chromedriver 78.0.3904.70

WebDriverException: target frame detached exception

已经发生,但在以前的版本的chromedriver都工作正常.现在在我的iFrame中,我在自动测试中找不到任何元素,那里应该是另一个iFrame,但我可以手工完成。在自动测试过程中也成功切换到iFrame。我想可能是有一个新的chromedriver错误?有什么想法吗?

org.openqa.selenium.WebDriverException: target frame detached
  (Session info: chrome=78.0.3904.97)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'PDF323-440G4', ip: '172.16.14.147', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_181'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 78.0.3904.97, chrome: {chromedriverVersion: 78.0.3904.70 (edb9c9f3de024..., userDataDir: C:\Users\Nikolay\AppData\Lo...}, goog:chromeOptions: {debuggerAddress: localhost:64307}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: c6f28448e742438746371ee017a51dda
bfnvny8b

bfnvny8b1#

此错误消息...

WebDriverException: target frame detached

...表示某个HttpRequest的结果HttpServerResponseInfo为**net::HTTP_NOT_FOUND**。

详情

根据讨论Some error codes are not standard compliant,ChromeDriver返回了一些不符合W3C标准的错误代码。将其替换为相应的标准错误代码:

  • asynchronous script timeout ->script timeout
  • element not visible ->element not interactable
  • no such session ->invalid session id
  • session not created exception ->session not created
  • xpath lookup error ->invalid selector

此外,还有一些特定于Chrome的错误代码仍然存在,大多数客户端将其视为**unknown error**。这些错误代码是:

*chrome not reachable
*disconnected
*forbidden
*no such execution context
*tab crashed
*target frame detached

此问题已通过bug/commit解决,当前状态为待发布

深度挖掘

错误target frame detachedcase kTargetDetached的结果,其中case kTargetDetached是在http_handler.cc中定义的,当HttpServerResponseInfo包含HTTP_NOT_FOUND时发生,如下所示:

void HttpHandler::HandleCommand(
    const net::HttpServerRequestInfo& request,
    const std::string& trimmed_path,
    const HttpResponseSenderFunc& send_response_func) {
  base::DictionaryValue params;
  std::string session_id;
  CommandMap::const_iterator iter = command_map_->begin();
  while (true) {
    if (iter == command_map_->end()) {
      if (w3cMode(session_id, session_thread_map_)) {
    PrepareResponse(
        trimmed_path, send_response_func,
        Status(kUnknownCommand, "unknown command: " + trimmed_path),
        nullptr, session_id, true);
      } else {
    std::unique_ptr<net::HttpServerResponseInfo> response(
        new net::HttpServerResponseInfo(net::HTTP_NOT_FOUND));
    response->SetBody("unknown command: " + trimmed_path, "text/plain");
    send_response_func.Run(std::move(response));
      }
      return;
    }
    if (internal::MatchesCommand(
        request.method, trimmed_path, *iter, &session_id, &params)) {
      break;
    }
    ++iter;
  }

在您的情况下,最有可能的原因是kTargetDetached

case kTargetDetached:
  response.reset(new net::HttpServerResponseInfo(net::HTTP_NOT_FOUND));
  break;
ve7v8dk2

ve7v8dk22#

我在第79版也遇到了同样的问题。在我的mac机器上更新到Chrome版本80.0.3987.53(官方版本)beta(64位),并在使用selenium时使用chromedriver版本80.0.3987.16。切换到iframe现在工作正常。

从上面的一点得到了一个提示,它已经在版本80中得到了修复。希望能帮上忙!

5us2dqdw

5us2dqdw3#

可能不是正确或最佳的解决方案,但在添加Thread.sleep和嵌套try catch块之后,问题得到了解决。注意:在WebDriverException中,我再次尝试了相同的元素

try
    {
    Thread.sleep(1000);
    yourWebelement.click();
    }
    catch(WebDriverException e)
    {
        yourWebelement.click();
    }
    catch(Exception ee)
    {
        ee.printStackTrace();
        throw ee;
    }
qybjjes1

qybjjes14#

作为一种变通方法,我们可以对发生此错误的元素使用try和catch块,测试将继续进行而不会停止

try {

button.click();

} catch (WebDriverException e) {

e.printStackTrace();

}
8mmmxcuj

8mmmxcuj5#

为我工作:
return(); document. writeln()

ev7lccsx

ev7lccsx6#

当我的Selenium驱动程序版本与我的Chrome浏览器版本不匹配时,我也遇到了同样的问题,因为我将Web浏览器更新到了最新版本,但没有更新Selenium驱动程序。
我修复了这个问题,也更新了我的 selenium 网络驱动程序,以匹配更新的Chrome。

9rygscc1

9rygscc17#

我发现当我有太多的ChromeDriver示例运行时会出现此错误。
我有一个应用程序,当我完成当前测试时,它试图关闭ChromeDriver的示例,但当我看到这个错误时,我通常会发现我有10-20个示例正在运行,因为我正在调试一些问题,而不是让清理代码运行。
打开任务管理器并杀死旧示例!

qq24tv8q

qq24tv8q8#

系统资源不足时也可能发生此问题。我在一台内存、磁盘和CPU经常达到100%的机器上也遇到了同样的问题。已在具有更高容量的其他计算机中尝试。它工作没有任何问题。

相关问题