Behat-Mink,强制Selenium驱动程序使用Chrome而不是Firefox

时间:2016-08-03 14:15:25

标签: php selenium selenium-chromedriver behat mink

所以我想在使用Selenium驱动程序和Behat的Mink扩展程序时,在Chrome而不是Firefox(因为Chrome提供移动仿真功能)中运行我的测试。

我在测试服务器上独立运行Selenium,并在本地计算机上运行测试。

因此,在运行Behat测试后,会创建Chrome会话但不会使用,而是会创建另一个并行的Firefox会话并用于运行测试方案。

我也在具有图形显示功能的环境中尝试了这一点,因此会打开一个新的Chrome窗口,但地址栏中只会显示data;;,然后会打开一个Firefox窗口并在那里运行测试。

我正在运行最新版本的Chrome(52.0.2743.82),Selenium独立服务器(2.53.1 - Java版本)和Chromedriver(2.22.397932)

我的behat.yml包含以下内容:

default:
    extensions:
        Behat\MinkExtension:
            browser_name: chrome
            base_url: "<url to website>"
            default_session: selenium_chrome_session
            goutte: ~
            sessions:
                selenium_chrome_session:
                    selenium2:
                        browser: chrome
                        wd_host: "http://<testing server host>:4444/wd/hub"
                        capabilities:
                            extra_capabilities:
                                chromeOptions:
                                    args:
                                        - "--start-maximized"
                                        - "--test_type"

在查看Selenium独立服务器的日志文件后,我得到以下输出:

15:44:47.677 INFO [45] org.openqa.selenium.remote.server.DriverServlet - Executing: [new session: Capabilities [{chrome.switches=[--no-sandbox], browser=chrome, name=Behat feature suite, browserName=chrome, chrome.extensions=[], ignoreZoomSetting=false, chromeOptions={args=[--no-sandbox], extensions=[]}, version=, tags=[PHP 5.6.21-1~dotdeb+7.1]}]])
15:44:47.678 INFO [113] org.openqa.selenium.remote.server.DefaultDriverProvider - Creating a new session for Capabilities [{chrome.switches=[--no-sandbox], browser=chrome, name=Behat feature suite, browserName=chrome, chrome.extensions=[], ignoreZoomSetting=false, chromeOptions={args=[--no-sandbox], extensions=[]}, version=, tags=[PHP 5.6.21-1~dotdeb+7.1]}]
15:44:48.021 INFO [45] org.openqa.selenium.remote.server.DriverServlet - Done: [new session: Capabilities [{chrome.switches=[--no-sandbox], browser=chrome, name=Behat feature suite, browserName=chrome, chrome.extensions=[], ignoreZoomSetting=false, chromeOptions={args=[--no-sandbox], extensions=[]}, version=, tags=[PHP 5.6.21-1~dotdeb+7.1]}]]
15:44:48.035 INFO [45] org.openqa.selenium.remote.server.DriverServlet - Executing: [new session: Capabilities [{deviceType=tablet, selenium-version=2.31.0, browserVersion=9, browser=firefox, name=Behat Test, browserName=firefox, deviceOrientation=portrait, version=9, platform=ANY}]])
15:44:48.036 INFO [120] org.openqa.selenium.remote.server.FirefoxDriverProvider - Creating a new session for Capabilities [{deviceType=tablet, selenium-version=2.31.0, browserVersion=9, browser=firefox, name=Behat Test, browserName=firefox, deviceOrientation=portrait, version=9, platform=ANY}]

如您所见,Chrome会话已成功创建,之后会创建一个新的Firefox会话,并用于进行测试。

3 个答案:

答案 0 :(得分:1)

您可以将要使用的浏览器传递给selenium独立服务器。

这是一个例子:

java -jar ./bin/selenium-server-standalone-2.53.1.jar -Dwebdriver.chrome.driver="./bin/chromedriver"

请注意,您可能正在使用其他selenenium独立服务器(jar文件)和不同的Chrome bin路径( -Dwebdriver.chrome.driver )。如果您在无头服务器中测试网页,请确保已安装Chrome。

答案 1 :(得分:0)

如果问题不是来自yml设置,那么您可能在FeatureContext类中有一些自定义代码会覆盖您想要的会话并启动一个新会话。

答案 2 :(得分:0)

java -Dwebdriver.chrome.driver="C:\bin\chromedriver_win32\chromedriver.exe" -jar selenium-server-standalone-3.3.1.jar 

并且还更改了设置和setUpBeforeClass方法

public static function setUpBeforeClass() {
        if (null === self::$mink) {
//            $app = require_once('../PATH_TO_YOUR/app.php');
//            $app['debug'] = true;
//            $app['session.test'] = true;
//            $app['exception_handler']->disable();

            self::$mink = new Mink(array(
                'selenium' => new Session(new Driver\Selenium2Driver('chrome', 'null', "http://google.com/")),
            ));
            self::$mink->setDefaultSessionName('selenium');
        }
    }

    protected function setUp() {

        $this->setBrowser('chrome');
        $this->setBrowserUrl('http://google.com/');
    }