【问题标题】:Robot Framework - Cross browser testingRobot Framework - 跨浏览器测试
【发布时间】:2019-02-18 14:31:39
【问题描述】:

我是自动化新手,我想在机器人框架中进行跨浏览器测试。我可以在浏览器管理文件中添加什么方法,以便我的测试用例在多个浏览器中运行https://github.com/MarkusBernhardt/robotframework-selenium2library-java/blob/master/src/main/java/com/github/markusbernhardt/selenium2library/keywords/BrowserManagement.java

谢谢,非常感谢您的帮助!

【问题讨论】:

  • 请详细说明“以便我的测试用例在多个浏览器中运行”的确切含义。您想在 Chrome 上运行一次测试,然后在 Firefox 上运行测试,等等?或者-这确实推动了它很多,并且基于您问题中的github链接:)-您希望您的测试同时在Chrome、Firefox、Edge等上执行?后者肯定是一个新颖的想法,但需要在库中进行根本性更改:)。或者,你要追究我无法从你的问题中推断出的第三件事?
  • 感谢您的回复!理想情况下,我想让第二个选项起作用。但是我在想第一个选项的最佳方法是什么 - 依次为多个浏览器运行测试用例?
  • 关键字Open Browser 将浏览器名称作为参数;因此,在一次运行中,您将传递“Chrome”,然后在下面 - 将其更改为“Firefox”,依此类推。
  • 这就是我正在做的事情,并将其放在每个浏览器的循环中。我只是想确定是否有任何其他最佳方法可以做到这一点。就像重写浏览器管理类并通过 JRE 参数将浏览器列表作为连接字符串传递一样。这是我不必在每个测试用例中编写浏览器循环。
  • 看来你做的太复杂了;一种最佳方法是让测试用例实现您正在测试的内容,然后 - 使用不同的浏览器开始不同的运行。这具有额外的好处,即所有案例都将在所有浏览器中运行 - 在您所描述的情况下,如果循环在 3 个浏览器上,并且第一个失败,那么其他 2 个将不会运行,对吗? (也就是说,除非你采取了特殊的预防措施,例如额外的开销)你想让我为你写一个“套件运行每个浏览器”方法的示例吗?

标签: cross-browser robotframework


【解决方案1】:

SeleniumLibrary 无法针对多个浏览器运行相同的命令。该功能听起来确实很酷,但需要对其进行相当多的修改(所有这些都围绕将相同的命令中继到所有浏览器),并处理其当前架构中的任何不可预见的情况(如果其中一个 selenium 驱动程序丢失会发生什么)连接,但其他的工作正常吗?等)。

多浏览器测试的常用方法是针对每个浏览器逐个运行案例集合。因此将产生一个完整的覆盖矩阵 - 在一个浏览器上运行不会影响在另一个浏览器上的运行。

一个非常基本的示例 - 使用内联 cmets 编写代码:

*** Settings ***
Documentation     A suite of cases.

Library             SeleniumLibrary

# the browser will be opened in the start-up of the suite
Suite Setup         Open Browser    url=https://www.google.com      browser=${browser}    # which browser? the one that's the value of the variable
Suite Teardown      Close Browser   # and closed when the suite finishes

*** Variables ***
# the variable will hold the name of the target browser
${browser}      Chrome          # a default value, if not overriden

*** Test Cases ***
Test this
    [Documentation]     Do this then that and verify the thing.
    Go To      https://www.yahoo.com
    My Keyword 1
    My Keyword 2

Verify That
    [Documentation]     Another case
    My Keyword Doing Thing       with argument
    Log     log message

所以 - 实际使用的浏览器是 ${browser} 变量的值。如果它没有被覆盖,它有一个默认值(在这种情况下是 Chrome)。

现在,要使用不同的浏览器运行,您只需在 CLI 上设置名称即可开始运行;示例:

robot --variable browser:Firefox suites\sample.robot

参数--variable用于设置值1;它以var_name:value 的格式给出。这个顺便说一句在the user guide, the Variables section中有详细描述。

因此,您可以使用 Chrome 启动一次运行,然后使用 Firefox 启动另一次运行,依此类推。

一个小提示 - 默认情况下,运行日志位于名为“output.xml”、“log.html”和“report.html”的文件中。如果您使用 3 个不同的浏览器启动 3 次运行,并且不费心复制文件,它们将被覆盖。最好为每个定义一个自定义名称,以便于处理。这是通过这 3 个参数完成的 - --output--log--report;例如:

robot --variable browser:Edge --output output-edge.xml --log log-edge.html --report report-edge.html suites\sample.robot

附:我确实意识到您在 jython 中使用 RF,但我没有这个环境,因此香草独立 RF - 您可以在用户指南的帮助下调整 CLI 示例和库导入。

【讨论】:

  • 感谢您的帮助!我会尝试这种方法,并让你知道它的效果。
【解决方案2】:

pabot。 Robot Framework 测试的并行执行器。

它有选项:

--argumentfile[INTEGER] [FILEPATH] 使用多个参数文件选项运行相同的套件。例如:

--argumentfile1 arg1.txt --argumentfile2 arg2.txt

例如,Mozilla Firefox 测试的参数文件 (firefox.txt) 的内容:

--name      Mozilla Firefox Suites
--variable  BROWSER:firefox

和Shell命令:

   pabot --argumentfile1 ${ROBOT_CONFIG}/chrome.txt \
         --argumentfile2 ${ROBOT_CONFIG}/firefox.txt \
         --verbose

其他人对相关问题的回答:

How can we run test cases on different browser at once in robotframework using Ride

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 2014-09-10
    • 2015-11-03
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    相关资源
    最近更新 更多