机器人框架,使用命令行标志打开浏览器以保存浏览器日志

时间:2017-05-18 08:06:49

标签: maven google-chrome selenium testing robotframework

我试图将浏览器(chrome)日志消息(React logs,js errors等)保存到 robot framework 测试运行的文件中。显然这比应该更难,因为我无法在机器人框架中找到方便的API来实现这一点。

我发现chrome可以用--enable-logging --v=1标志启动,以将日志消息定向到文件中。但是我如何通过机器人框架中的Open Browser关键字传递此标志?更确切地说,我实际上是使用robotframework-maven-plugin在远程服务器上使用无头浏览器运行测试。

这是当前通过执行远程shell任务从jenkins在远程服务器上启动测试的方法

rm -rf tests
git clone git@*****/tests.git && cd tests
Xvfb :99 -ac -screen 0 1280x1024x24 &
export DISPLAY=:99
mvn -DforceOpenJpaExecution=true -Dbrowser=chrome -Dserver=***** -DchromeDriverPath=/usr/local/bin/chromedriver clean verify

以下是测试项目的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>*****</groupId>
    <artifactId>tests</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>tests</name>

    <dependencies>
        <dependency>
            <groupId>com.github.markusbernhardt</groupId>
            <artifactId>robotframework-selenium2library-java</artifactId>
            <version>1.4.0.8</version>
        </dependency>
    </dependencies>

    <build>
        <defaultGoal>verify</defaultGoal>        

        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.0-alpha-2</version>
            <executions>
                <execution>
                    <id>setPropertyChromeDriver</id>
                    <phase>integration-test</phase>
                    <goals>
                        <goal>set-system-properties</goal>
                    </goals>
                    <configuration>
                        <properties>
                            <property>
                              <name>webdriver.chrome.driver</name>
                              <value>${chromeDriverPath}</value>
                            </property>
                        </properties>
                    </configuration>
                </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.robotframework</groupId>
            <artifactId>robotframework-maven-plugin</artifactId>
            <version>${robotframework-maven-plugin.version}</version>
            <executions>
              <execution>
                <id>robotTest</id>  
                <phase>integration-test</phase>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
    </build>

</project> 

以下是resource.robot

的摘录
    Open the web application
        Open Browser    %{server}/App    %{browser}
        Maximize Browser Window
        Wait Until Page Contains        Login

现在,我如何将--enable-logging --v=1传递给chrome驱动程序,还是有更方便的方法来将浏览器日志记录到文件或测试结果?

我找到了这段代码来设置标志,但我不知道如何在我的案例中将其应用于基于关键字的资源

from selenium import webdriver
options = webdriver.ChromeOptions()
# set some options
# for example:
# options.add_argument('--disable-logging')
driver = webdriver.Remote(desired_capabilities=options.to_capabilities())

2 个答案:

答案 0 :(得分:1)

如果您需要使用Selenium2Library将选项传递给webdriver,则应使用关键字Create Webdriver(以及之后的Go To网址)。

答案 1 :(得分:0)

previous SO question中我提供了一个应该适用的答案

*** Settings ***
Library    Selenium2Library
*** Test Cases ***

Log Chrome Console
      ${c_opts} =  Evaluate    sys.modules['selenium.webdriver'].ChromeOptions()    sys, selenium.webdriver
      Call Method     ${c_opts}   add_argument             enable-logging 
      Call Method     ${c_opts}   add_argument             v\=1
      Create Webdriver    Chrome    crm_alias    chrome_options=${c_opts}
      Go To    http://www.url.com
      [Teardown]  Close All Browsers

这会将参数添加到Chrome的命令行。