当前位置: 首页 > 知识库问答 >
问题:

通过用于Saucelabs的Mink extension.php(Selenium2)解析Behat/Mink Yml文件配置中的动态值

朱乐逸
2023-03-14

我想知道是否有一种可能的方法来解析动态值,特别是通过使用*.featurebehat/mink测试来解析name,因为它正在运行具有Selenium2功能的Yml配置文件

behat.yml文件使用behat/mink/extension扩展文件,文件中包含Selenium 2 Capabilities参数。

    default:
      context:
        class:  'FeatureContext'
      extensions:
        Behat\MinkExtension\Extension:
         base_url: 
         javascript_session:  'selenium2'
         goutte:
         selenium2:
            browser: firefox
            wd_host: <sauce username>:<accesscode>@ondemand.saucelabs.com/wd/hub
            capabilities: {  "platform": "Windows 7" , "version": "21" , "name":"Test" }

extension.php文件中:https://github.com/behat/minkextension/blob/2.0/src/behat/minkextension/extension.php

            arrayNode('selenium2')->
                children()->
                    scalarNode('browser')->
                        defaultValue(isset($config['selenium2']['browser']) ? $config['selenium2']['browser'] : '%behat.mink.browser_name%')->
                    end()->
                    arrayNode('capabilities')->
                        normalizeKeys(false)->
                        children()->
                            scalarNode('browserName')->
                                defaultValue(isset($config['selenium2']['capabilities']['browserName']) ? $config['selenium2']['capabilities']['browserName'] : 'firefox')->
                            end()->
                            scalarNode('version')->
                                defaultValue(isset($config['selenium2']['capabilities']['version']) ? $config['selenium2']['capabilities']['version'] : "9")->
                            end()->
                            scalarNode('platform')->
                                defaultValue(isset($config['selenium2']['capabilities']['platform']) ? $config['selenium2']['capabilities']['platform'] : 'ANY')->
                            end()->
                            scalarNode('browserVersion')->
                                defaultValue(isset($config['selenium2']['capabilities']['browserVersion']) ? $config['selenium2']['capabilities']['browserVersion'] : "9")->
                            end()->
                            scalarNode('browser')->
                                defaultValue(isset($config['selenium2']['capabilities']['browser']) ? $config['selenium2']['capabilities']['browser'] : 'firefox')->
                            end()->
                            scalarNode('ignoreZoomSetting')->
                                defaultValue(isset($config['selenium2']['capabilities']['ignoreZoomSetting']) ? $config['selenium2']['capabilities']['ignoreZoomSetting'] : 'false')->
                            end()->
                            scalarNode('name')->
                                defaultValue(isset($config['selenium2']['capabilities']['name']) ? $config['selenium2']['capabilities']['name'] : 'Behat Test')->
                            end()->
                            scalarNode('deviceOrientation')->
                                defaultValue(isset($config['selenium2']['capabilities']['deviceOrientation']) ? $config['selenium2']['capabilities']['deviceOrientation'] : 'portrait')->
                            end()->
                            scalarNode('deviceType')->
                                defaultValue(isset($config['selenium2']['capabilities']['deviceType']) ? $config['selenium2']['capabilities']['deviceType'] : 'tablet')->
                            end()->
                            scalarNode('selenium-version')->
                                defaultValue(isset($config['selenium2']['capabilities']['selenium-version']) ? $config['selenium2']['capabilities']['selenium-version'] : '2.31.0')->
                            end()->
                            scalarNode('max-duration')->
                                defaultValue(isset($config['selenium2']['capabilities']['max-duration']) ? $config['selenium2']['capabilities']['max-duration'] : '300')->
                            end()->
                            booleanNode('javascriptEnabled')->end()->
                            booleanNode('databaseEnabled')->end()->
                            booleanNode('locationContextEnabled')->end()->
                            booleanNode('applicationCacheEnabled')->end()->
                            booleanNode('browserConnectionEnabled')->end()->
                            booleanNode('webStorageEnabled')->end()->
                            booleanNode('rotatable')->end()->
                            booleanNode('acceptSslCerts')->end()->
                            booleanNode('nativeEvents')->end()->
                            booleanNode('passed')->end()->
                            booleanNode('record-video')->end()->
                            booleanNode('record-screenshots')->end()->
                            booleanNode('capture-html')->end()->
                            booleanNode('disable-popup-handler')->end()->
                            arrayNode('proxy')->
                                children()->
                                    scalarNode('proxyType')->end()->
                                    scalarNode('proxyAuthconfigUrl')->end()->
                                    scalarNode('ftpProxy')->end()->
                                    scalarNode('httpProxy')->end()->
                                    scalarNode('sslProxy')->end()->
                                end()->
                                validate()->
                                    ifTrue(function ($v) {
                                        return empty($v);
                                    })->
                                    thenUnset()->
                                end()->
                            end()->
                            arrayNode('firefox')->
                                children()->
                                    scalarNode('profile')->
                                        validate()->
                                        ifTrue(function ($v) {
                                            return !file_exists($v);
                                        })->
                                            thenInvalid('Cannot find profile zip file %s')->
                                        end()->
                                    end()->
                                    scalarNode('binary')->end()->
                                end()->
                            end()->
                            arrayNode('chrome')->
                                children()->
                                    arrayNode('switches')->
                                        prototype('scalar')->end()->
                                    end()->
                                    scalarNode('binary')->end()->
                                    arrayNode('extensions')->
                                        prototype('scalar')->end()->
                                    end()->
                                end()->
                            end()->
                        end()->
                    end()->
                    scalarNode('wd_host')->
                        defaultValue(isset($config['selenium2']['wd_host']) ? $config['selenium2']['wd_host'] : 'http://localhost:4444/wd/hub')->
                    end()->
                end()->
            end()->
            arrayNode('saucelabs')->
                children()->
                    scalarNode('username')->
                        defaultValue(getenv('SAUCE_USERNAME'))->
                    end()->
                    scalarNode('access_key')->
                        defaultValue(getenv('SAUCE_ACCESS_KEY'))->
                    end()->
                    booleanNode('connect')->
                        defaultValue(isset($config['saucelabs']['connect']) ? 'true' === $config['saucelabs']['connect'] : false)->
                    end()->
                    scalarNode('browser')->
                        defaultValue(isset($config['saucelabs']['browser']) ? $config['saucelabs']['browser'] : 'firefox')->
                    end()->
                    arrayNode('capabilities')->
                        children()->
                            scalarNode('name')->
                                defaultValue(isset($config['saucelabs']['name']) ? $config['saucelabs']['name'] : 'Behat feature suite')->
                            end()->
                            scalarNode('platform')->
                                defaultValue(isset($config['saucelabs']['platform']) ? $config['saucelabs']['platform'] : 'Linux')->
                            end()->
                            scalarNode('version')->
                                defaultValue(isset($config['saucelabs']['version']) ? $config['saucelabs']['version'] : '21')->
                            end()->
                            scalarNode('deviceType')->
                                defaultValue(isset($config['saucelabs']['deviceType']) ? $config['saucelabs']['deviceType'] : null)->
                            end()->
                            scalarNode('deviceOrientation')->
                                defaultValue(isset($config['saucelabs']['deviceOrientation']) ? $config['saucelabs']['deviceOrientation'] : null)->

在MinkExtension目录的extension.php下,它加载带有一组数组的selenium2.xml文件,以将该文件中的信息解析到behat.yml

我注意到,如果yml文件中没有指定来自Selenium2功能的任何参数,extension.php将根据数组名称分配一个默认值:

scalarNode('name')->defaultValue(isset($config['selenium2']['capabilities']['name'])?$config['selenium2']['capabilities']['name']:“Behat test”)->

说到这里,我想知道是否有任何可能的方法可以在运行测试时使用本地目录中的Behat/Mink特性tests .Feature 的名称来解析name中的标题。

共有1个答案

谈旺
2023-03-14

迟来的回答,但也许总比什么都没有好...

在.特性测试中使用标记如何?您可以建议behat只执行那些带有给定标记的测试:

behat文档-标签

<target name="test-behat">
    <exec dir="${basedir}" executable="bin/behat" failonerror="false">
        <arg line="--config ${basedir}/behat.yml --tags '${env.SELENIUM_TAG}'"/>
    </exec>
</target>
bin/behat --tags '@your_tag'
ant -file <path to your ant-script> -D'SELENIUM_TAG'='@whatever_you_want'

如果你真的只想执行一个.功能,你可以用同样的方法。

<target name="test-behat">
    <exec dir="${basedir}" executable="bin/behat" failonerror="false">
        <arg line="--config ${basedir}/behat.yml '${env.FEATURE_FILE}'"/>
    </exec>
</target>

这意味着在Behat-CLI中:

bin/behat your.feature

以开始

ant -file <path to your ant-script> -D'FEATURE_FILE'='your.feature'
behat [--many config params we don't need right here] [features]

Arguments:
features          Feature(s) to run. Could be:
                  - a dir (features/)
                  - a feature (*.feature)
                  - a scenario at specific line (*.feature:10).
                  - all scenarios at or after a specific line (*.feature:10-*).
                  - all scenarios at a line within a specific range (*.feature:10-20)
 类似资料:
  • 我有几个用于Eclipse的文件(我使用的是Eclipse Oxyox),下面是一个示例 请注意,我正在使用变量,以便使其可用于任何项目。 我试图将我为项目启用的概要文件“注入”到通用的启动概要文件配置中,类似于变量,但与当前的Maven概要文件相关。 如果不能这样做,我需要为每个环境创建一个启动配置文件,这意味着每个目标要启动3个文件。 是否有一种方法可以使用/创建一个Eclipse变量,该变量

  • 本文向大家介绍基于XML配置Spring的自动装配过程解析,包括了基于XML配置Spring的自动装配过程解析的使用技巧和注意事项,需要的朋友参考一下 一、了解Spring自动装配的方式 采用传统的XML方式配置Bean组件的关键代码如下所示 我们通过<property>标签为Bean的属性注入所需的值,当需要维护的Bean组件及需要注入的属性更多时,势必会增加配置的工作量。这时可以使用自动装配。

  • 问题内容: 我正在尝试使用Maven 3 在Spring Boot应用程序中设置活动配置文件。在我的pom.xml中,将默认的活动配置文件和属性spring.profiles.active设置 为development: 但是每次我运行应用程序时,都会在日志中收到以下消息: 并且将SpringBoot配置文件设置为默认值(读取application.properties而不是application

  • 本文主要介绍app.cfg这个文件的配置及一些参数的解释 kplcloud启动时必须传app.cfg文件,所有的参数都通过该文件进行控制,若您是在kubernetes进行部署可以考虑通过ConfigMap的方式挂载进容器里。 [server] 应用配置 字段 备注 其他 http_static 静态文件路径 ./static/ http_proxy 代理服务地址 如果您的环境是隔离的,又需要访问外

  • C语言面向对象编程(六):配置文件解析 在实际项目中,经常会把软件的某些选项写入配置文件。 Windows 平台上的 INI 文件格式简单易用,本篇文章利用《C语言面向对象编程(五):单链表实现》中实现的单链表,设计了一个“类” ini_parser 来读写 INI 格式的配置文件。 struct ini_parser 可以解析 INI 格式的字符串、文件,也可以将内存中的符合 INI 格式的数据

  • 本文向大家介绍MyBatis动态SQL实现配置过程解析,包括了MyBatis动态SQL实现配置过程解析的使用技巧和注意事项,需要的朋友参考一下 动态SQL 什么是动态SQL: ​ 动态SQL就是根据不同的条件生成不同的SQL语句 if choose(when,otherwise) trim(where,set) foreach 1、搭建环境 建表 创建一个基础工程 导包 编写配置文件 编写实体类