在Behat上设置Selenium2 Mink扩展以使用多个浏览器

man*_*_cc 1 grid behat mink selenium-webdriver

我想使用我的selenium2网格在几个浏览器上运行我的behat测试.我已经设法让它们在每个环境/浏览器的基础上使用不同的behat.yml配置文件运行,但是我想配置一个behat配置文件来触发我所有节点上的运行.

我的behat.yml配置文件如下所示:

default: ... extensions: Behat\MinkExtension\Extension: base-url: http://www.myapp.com javascript_session: selenium2 selenium2: browser: 'firefox' wd_host: selenium2:4444/wd/hub ...

我没有运气就试过了:

  • 在浏览器字段中的数组browser: {firefox, chrome},配置解析器不喜欢它
  • 具有多个名称browser: 'firefox, chrome'的字符串,认为我有一个以字符串叹息命名的浏览器
  • 为我的selenium节点提供一个单一的名称browser,由于某种原因通常会尝试使用iexplorer节点(什么?!)
  • 将浏览器字段留空browser: '',仅触发firefox节点,因为它似乎是默认节点
  • 我甚至尝试browser在yaml文件中创建多个密钥,最后一个条目覆盖了其余的密钥

如上所述,似乎实现这一目标的唯一方法是在每个环境的基础上创建一个behat.yml文件,即.behat-firefox.yml,behat-c​​hrome.yml,并行运行它们.像这样的东西(http://zalas.eu/running-behat-in-parallel-with-selenium-grid/)

还有其他建议吗?

更新

我的工具版本:

  • Behat 2.5.3
  • 貂皮1.5

小智 5

我已经完成了跨浏览器实现,我发现的解决方案是使用Ant,如下所示

Behat.yml

如我们在behat.yml中创建的那样为每个浏览器创建单独的配置文件,如下所示

chrome:
  context:
    class:  'FeatureContext'
  extensions:
    Behat\MinkExtension\Extension:
      base-url: http://www.myapp.com
      javascript_session:  'selenium'
      browser_name: googlechrome
      goutte:              ~
      selenium:

safari:
  context:
    class:  'FeatureContext'
  extensions:
    Behat\MinkExtension\Extension:
      base-url: http://www.myapp.com
      javascript_session:  'selenium2'
      browser_name: safari
      goutte:              ~
      selenium2:

firefox:
  context:
    class:  'FeatureContext'
  extensions:
    Behat\MinkExtension\Extension:
      base-url: http://www.myapp.com
      javascript_session:  'selenium2'
      browser_name: firefox
      goutte:              ~
      selenium2:
Run Code Online (Sandbox Code Playgroud)

在build.xml

这是一个主配置,我们为每个配置文件创建单独的目标,同时为每个浏览器生成漂亮的html报告.尝试了解下面的配置

<project name="behat" basedir=".">
   <target name="run">
    <delete dir="${basedir}/report" />
      <mkdir dir="${basedir}/report"/>
      <parallel>
      <antcall target="chrome"></antcall>
      <antcall target="safari"></antcall>
       <antcall target="firefox"></antcall>
     </parallel>
  </target>
  <target name="chrome">
    <exec dir="${basedir}" executable="php" failonerror="true">
    <arg line= "bin/behat -f html --out report/chrome.html -p chrome"/>
    </exec>
  </target>
  <target name="safari">
    <exec dir="${basedir}" executable="php" failonerror="true">
    <arg line= "bin/behat -f html --out report/safari.html -p safari"/>
    </exec>
  </target>
  <target name="firefox">
    <exec dir="${basedir}" executable="php" failonerror="true">
    <arg line= "bin/behat -f html --out report/firefox.html -p firefox"/>
    </exec>
  </target>
</project>
Run Code Online (Sandbox Code Playgroud)

不要忘记在运行测试之前启动selenium-server.您应该运行以下命令..

$ java -jar selenium-server-standalone-2.30.0.jar
Run Code Online (Sandbox Code Playgroud)

完成配置后,需要运行带有主目标的ANT run

ant run
Run Code Online (Sandbox Code Playgroud)

本教程的源代码在这里