【问题标题】:Behat-Mink, force Selenium driver to use Chrome instead of FirefoxBehat-Mink,强制 Selenium 驱动程序使用 Chrome 而不是 Firefox
【发布时间】:2016-08-03 14:15:25
【问题描述】:

所以当使用 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 会话,用于进行测试。

【问题讨论】:

  • 你为什么使用会话,你有设置多个会话吗?
  • 是的,我们的想法是有一个移动会话和一个桌面会话。
  • FeatureContext中有驱动相关的自定义代码吗?您是否尝试为移动设备和台式机设置不同的配置文件?也尝试删除 browser_name 看看会发生什么。
  • 我尝试设置不同的配置文件,也尝试不使用 browser_name。可能是由于我的上下文类中与驱动程序相关的自定义代码,但我注意到一件有趣的事情:我使用标志 -forcedBrowserMode chrome 启动了 Selenium 服务器,但它没有帮助。
  • 检查您的功能上下文,也许您添加了一些代码来启动新浏览器的新会话。还可以在不使用会话的情况下尝试一个简单的配置文件,看看是否有效。在本地机器上尝试这些以查看是否有效,然后在测试服务器上运行并检查那里有什么不同。

标签: php selenium selenium-chromedriver behat mink


【解决方案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。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      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/');
          }
      

      【讨论】:

        猜你喜欢
        • 2017-03-12
        • 1970-01-01
        • 2018-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多