【问题标题】:Switching to existing chrome browser from desktop application从桌面应用程序切换到现有的 chrome 浏览器
【发布时间】:2021-08-27 14:56:07
【问题描述】:

我正在尝试控制现有的 chrome 浏览器,并希望使用相同的浏览器进行自动化,使用 selenium 和空手道。

这是一个实际的场景:

我从桌面单击一个超链接,它会在 chrome 浏览器中打开。现在我需要在同一个浏览器中运行我的自动化脚本。

我有以下代码,在此之前,我正在使用此链接https://harith-sankalpa.medium.com/connect-selenium-driver-to-an-existing-chrome-browser-instance-41435b67affd以调试模式启动chrome浏览器

* def startUrl = "https://google.com"
* def browser = "chrome"
* def type = "chromedriver"
* def executable = "C:/chromedriver/" + type + ".exe"
* def driverConfig = { type: #(type), showDriverLog: true, start:false, executable: # 
(executable), webDriverSession: { desiredCapabilities: { browserName: # 
(browser),goog:chromeOptions": { debuggerAddress: 127.0.0.1:9223 }  } } }
* configure driver = driverConfig
Given driver startUrl
* waitFor('input[name=q]')
And input('input[name=q]', 'Youtube')

谁能确认它是如何完成的?我是空手道用户界面的新手

【问题讨论】:

    标签: karate


    【解决方案1】:

    只有在 Chrome 实例以remote-debugging enabled 启动时,才能控制现有的 Chrome 实例以使用空手道 UI。

    在命令行中,这通常通过添加以下选项来完成:--remote-debugging-port=9222

    我知道一个团队使用空手道 UI 来自动化桌面应用程序中使用的 CEF(Chromium 嵌入式框架)。在这种情况下,桌面应用程序的开发人员制作了一个环境变量驱动器enabling of this debug mode。例如如果操作系统环境变量ENABLE_CHROME_DEBUG 的值等于true,则将通过 SDK/API 以编程方式启用 CEF 远程调试。

    所以你必须想出一些类似的方法。如果桌面应用正在创建一个新的 Chrome 实例,那么应该也可以启用远程调试 - 为了可测试性,您应该与开发团队合作,使其“可切换”。

    完成后,Karate 可以通过远程调试协议“附加”到现有的 Chrome 实例。参考文档:https://github.com/intuit/karate/tree/master/karate-core#configure-driver

    并注意attach 配置键:

    可选,仅适用于 type: 'chrome' 和 start: false 当你想附加到 Chrome DevTools 会话中的现有页面时,对 URL 使用“包含”匹配

    因此,如果您知道要附加到的浏览器中打开的 URL(即使它是 about:blank),您现在可以继续进行测试。您将只需要 configure driver 数据中的这些键:

    • type: 'chrome'
    • start: false
    • attach: 'some/url' - 因为这是一个“包含”匹配,httphttps 部分可以省略
    • port: 9222 - 如果不同,请将其更改为使用实际端口

    并且不需要executable 等。

    当您结合桌面和浏览器测试时,请注意某个怪癖:https://github.com/intuit/karate/issues/1549#issuecomment-821265333

    【讨论】:

    • 谢谢,它在调试模式下工作。我在单独运行 Web UI 脚本时遇到了一个问题,它使用单独的功能文件工作,但是当我在同一个功能文件中使用机器人和 Web 驱动程序运行时,它只是附加现有浏览器但不与 Web 元素交互,我错过了什么吗?如果您需要任何其他信息,请告诉我。谢谢
    • @shashank 请参阅我答案中的最后一个链接。否则我不知道,你应该遵循这个过程:github.com/intuit/karate/wiki/How-to-Submit-an-Issue
    • 好的,谢谢
    猜你喜欢
    • 2011-03-30
    • 2016-08-23
    • 1970-01-01
    • 2013-02-12
    • 2012-06-22
    • 1970-01-01
    • 2014-02-24
    • 2013-07-30
    • 2016-05-05
    相关资源
    最近更新 更多