连接到运行中的网页浏览器

概述和动机

Squish for Web 的默认行为是自动启动您想要测试的网页浏览器,并在测试用例完成后终止网页浏览器。但也可以通过附加到它来测试已运行的网页浏览器。附加时一个重要区别是,在测试用例结束时,Squish 不会 终止附加的网页浏览器。

此功能的常见使用场景是自动化由另一个也自动化的应用程序启动的网页浏览器。考虑一个桌面应用程序,该应用程序允许从构建块创建网站,并通过启动浏览器提供查看结果的方式。此工作流程可以通过自动化桌面应用程序并由 Squish 自动化来完成,一旦启动,Squish for Web 就可以附加到浏览器并验证显示的网页内容是否正确,以及链接等是否工作。

另一个常见用例是需要用户界面进行配置的设备。一些制造商选择使用在特殊展台模式下运行并提供必要配置元素网页的 Web 浏览器。在这种情况下,Web 浏览器通常作为系统的一部分启动,不应关闭,或者当某些原因终止时会自动重新启动。在这里,Squish for Web 可以自动化设备上运行的浏览器,以确保提供的用户界面能够正确工作,并能够被 Web 浏览器妥善处理。

目前,此功能仅支持以下浏览器

  • Windows 上的 Internet Explorer
  • Windows、Linux 和 macOS 上的 Mozilla Firefox
  • Windows、Linux 和 macOS 上的 Google Chrome
  • macOS 上的 Safari

使浏览器可附加

根据您想要自动化的网页浏览器,在可以附加到它之前需要执行一些安装步骤。对于 FirefoxGoogle Chrome,需要安装 Squish 扩展并配置通信端口。对于 Internet Explorer,需要在 Windows 中更改注册表设置。Safari 不需要任何特殊设置。如何在 Internet Explorer、Firefox 和 Chrome 中配置的详细步骤可以在 如何安装 Squish 部分 中找到。

从脚本附加到浏览器

attachToApplication 相比,目前尚未支持针对可附加的网页浏览器记录完整的测试用例。要检查网站或记录交互,需要准备一个短脚本片段,该片段附加到浏览器并在其中设置记录可以开始时的断点。如下例所示,一个小型的 main 函数,带有 attachToBrowser(portOrWindowTitle)test.breakpoint() 即可

注意:在示例脚本中,使用 Internet Explorer 作为网页浏览器。对于 Firefox 和 Chrome,需要指定通信端口,而对于 Safari,需要删除参数。请参阅关于 attachToBrowser 函数 的部分中的示例代码以获取其他浏览器的示例代码。

function main() {
    // Internet Explorer
    attachToBrowser( "*Automated Cross-Platform GUI Testing" );
    test.breakpoint();
}
sub main {
    # Internet Explorer
    attachToBrowser( "*Automated Cross-Platform GUI Testing" );
    test::breakpoint();
}
def main():
    # Internet Explorer
    attachToBrowser( "*Automated Cross-Platform GUI Testing" )
    test.breakpoint()
def main()
    # Internet Explorer
    attachToBrowser( "*Automated Cross-Platform GUI Testing" )
    Test.breakpoint()
end
proc main {} {
    # Internet Explorer
    invoke attachToBrowser "*Automated Cross-Platform GUI Testing"
    test breakpoint
}

您可以在IDE中执行此测试用例,并将在该断点处停止。您可以在应用程序对象视图中查看网站对象,创建验证,以及在网站中记录交互

与浏览器的交互完成后,您可以通过调用closeWindow(":[Window]")函数从浏览器断开连接,然而这也会在测试脚本完成后自动完成。您可以通过调用attachToBrowser(portOrWindowTitle)再次连接到浏览器。

如果您打算连接到为Qt或Windows等其他版本创建的Squish测试套件中的Web浏览器,则需要额外的设置步骤。目前attachToBrowser(portOrWindowTitle)函数仅在Squish的助手工具webhook运行并连接时才可用。在Squish测试套件中自动启动此工具以自动化Web应用程序,但对于其他类型的测试套件,它必须作为脚本的一部分启动。工具与任何其他AUT一样使用,因此它有一个应用程序上下文,需要在连接到浏览器之前和与浏览器中的对象交互时保持活动状态。请参见如何使用ApplicationContext从单个测试脚本测试多个AUT了解如何更好地使用此功能。

以下脚本代码示例显示了如何像一个测试用例一样启动一个正常的AUT来与它交互,然后作为AUT启动webhook以连接到浏览器并与之交互。由于webhook是Squish捆绑的AUT,因此不需要将其注册为AUT,而是始终通过特殊名称(__squish__webhook)提供。

function main() {
    var autContext = startApplication("addressbook");
    // [ ... interactions with the AUT ... ]
    testSettings.setWrappersForApplication("__squish__webhook", ["Web"]);
    var webContext = startApplication("__squish__webhook");
    attachToBrowser("*froglogic*");
    // [ ... interactions with the Website ... ]
    setApplicationContext(autContext);
    // [ ... interactions with the addressbook AUT again ... ]
    setApplicationContext(webContext);
    // [ ... interactions with the Website again ... ]
    // detach from the browser
    closeWindow(":[Window]");
}
sub main {
    my $autContext = startApplication("addressbook");
    # [ ... interactions with the AUT ... ]
    testSettings->setWrappersForApplication("__squish__webhook", ("Web"));
    my $webContext = startApplication("__squish__webhook");
    attachToBrowser("*froglogic*");
    # [ ... interactions with the Website ... ]
    setApplicationContext($autContext);
    # [ ... interactions with the addressbook AUT again ... ]
    setApplicationContext($webContext);
    # [ ... interactions with the Website again ... ]
    # detach from the browser
    closeWindow(":[Window]");
}
def main():
    autContext = startApplication("addressbook")
    # [ ... interactions with the AUT ... ]
    testSettings.setWrappersForApplication("__squish__webhook", ["Web"])
    webContext = startApplication("__squish__webhook")
    attachToBrowser("*froglogic*")
    # [ ... interactions with the Website ... ]
    setApplicationContext(autContext)
    # [ ... interactions with the addressbook AUT again ... ]
    setApplicationContext(webContext)
    # [ ... interactions with the Website again ... ]
    # detach from the browser
    closeWindow(":[Window]")
def main()
    autContext = startApplication("addressbook")
    # [ ... interactions with the AUT ... ]
    testSettings.setWrappersForApplication("__squish__webhook", ["Web"])
    webContext = startApplication("__squish__webhook")
    attachToBrowser("*froglogic*")
    # [ ... interactions with the Website ... ]
    setApplicationContext(autContext)
    # [ ... interactions with the addressbook AUT again ... ]
    setApplicationContext(webContext)
    # [ ... interactions with the Website again ... ]
    # detach from the browser
    closeWindow(":[Window]")
end
proc main {} {
    set autContext [startApplication "addressbook"]
    # [ ... interactions with the AUT ... ]
    testSettings setWrappersForApplication __squish__webhook {Web}
    set webContext [startApplication "__squish__webhook"]
    invoke attachToBrowser "*froglogic*"
    # [ ... interactions with the Website ... ]
    setApplicationContext $autContext
    # [ ... interactions with the addressbook AUT again ... ]
    setApplicationContext $webContext
    # [ ... interactions with the Website again ... ]
    # detach from the browser
    invoke closeWindow ":\[Window\]"
}

©2024 Qt公司有限公司。文档贡献归原作者所有。
此处提供的文档根据Free Software Foundation发布的GNU自由文档许可版本1.3的条款进行许可。
Qt及其相关标志是芬兰和/或其他国家的Qt公司注册商标。所有其他商标均为其各自所有者的财产。