Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 如何启动所有空手道功能设置哪个浏览器用作外部maven变量_Selenium_Testing_Webdriver_Karate - Fatal编程技术网

Selenium 如何启动所有空手道功能设置哪个浏览器用作外部maven变量

Selenium 如何启动所有空手道功能设置哪个浏览器用作外部maven变量,selenium,testing,webdriver,karate,Selenium,Testing,Webdriver,Karate,我试图找到一种方法,通过maven启动空手道测试中的所有功能,使用外部变量设置浏览器(使用本地webdriver或Selenium网格) 比如: mvn test -Dbrowser=chrome (or firefox, safari, etc) 或者使用Selenium网格: mvn test -Dbrowser=chrome (or firefox, safari, etc) -Dgrid="grid url" 对于Cucumber和Java,使用单例设置全局webdriver非常简单

我试图找到一种方法,通过maven启动空手道测试中的所有功能,使用外部变量设置浏览器(使用本地webdriver或Selenium网格)

比如:

mvn test -Dbrowser=chrome (or firefox, safari, etc)
或者使用Selenium网格:

mvn test -Dbrowser=chrome (or firefox, safari, etc) -Dgrid="grid url"
对于Cucumber和Java,使用单例设置全局webdriver非常简单,然后在所有测试中使用。通过这种方式,我可以使用不同的本地或远程Web驱动程序运行测试

在空手道中,我尝试了不同的解决方案,最后一个是:

  • 用变量“browser”定义空手道配置文件
  • 在单个功能“X”中使用变量“browser”,其中我只设置了空手道司机
  • 使用callonce从所有其他功能重新调用功能“X”以使用该驱动程序
  • 但它没有起作用,老实说,在我看来,这不是正确的方法。 也许能够从功能中的Javascript函数设置空手道驱动程序是正确的方法,但我没有找到解决方案

    我在空手道中发现的另一个问题是使用本地或远程webdriver区分行为,因为它们以不同的方式设置在功能文件中


    那么,有人有我同样的需求吗?我该如何解决它呢?

    这里有几个原则。空手道负责启动
    驱动程序
    (相当于Selenium
    WebDriver
    )。您只需按照以下说明设置
    配置驱动程序

    最后,根据您的环境,只需切换驱动程序配置。这可以在
    karate config.js
    实际上(全局)而不是在每个功能文件中轻松完成:

    function fn() {
        var config = {
            baseUrl: 'https://qa.mycompany.com'
        };
        if (karate.env == 'chrome') {
            karate.configure('driver', { type: 'chromedriver', start: false, webDriverUrl: 'http://somehost:9515/wd/hub' });
        }
        return config;
    }
    
    在命令行上:

    mvn test -Dkarate.env=chrome
    
    我建议您熟悉空手道的配置:-它实际上比典型的Java/Maven项目更简单

    另一种方法是在
    karate config.js
    中设置变量,然后在功能文件中使用它们

    * configure driver = { type: '#(myVariableFromConfig)' }
    
    记住这些原则:

    • 由“顶级”功能创建的任何驱动程序实例将可用于“调用”功能
    • 您甚至可以调用一个“公共”功能,在那里创建驱动程序,它将在“调用”功能中设置
    • “顶级”功能结束时,创建的任何驱动程序都将关闭
    你不需要任何其他模式

    编辑:文档中还有一些详细信息:


    对于并行执行或尝试在所有测试中重复使用单个浏览器,请参阅:

    以下是一些原则。空手道负责启动
    驱动程序
    (相当于Selenium
    WebDriver
    )。您只需按照以下说明设置
    配置驱动程序

    最后,根据您的环境,只需切换驱动程序配置。这可以在
    karate config.js
    实际上(全局)而不是在每个功能文件中轻松完成:

    function fn() {
        var config = {
            baseUrl: 'https://qa.mycompany.com'
        };
        if (karate.env == 'chrome') {
            karate.configure('driver', { type: 'chromedriver', start: false, webDriverUrl: 'http://somehost:9515/wd/hub' });
        }
        return config;
    }
    
    在命令行上:

    mvn test -Dkarate.env=chrome
    
    我建议您熟悉空手道的配置:-它实际上比典型的Java/Maven项目更简单

    另一种方法是在
    karate config.js
    中设置变量,然后在功能文件中使用它们

    * configure driver = { type: '#(myVariableFromConfig)' }
    
    记住这些原则:

    • 由“顶级”功能创建的任何驱动程序实例将可用于“调用”功能
    • 您甚至可以调用一个“公共”功能,在那里创建驱动程序,它将在“调用”功能中设置
    • “顶级”功能结束时,创建的任何驱动程序都将关闭
    你不需要任何其他模式

    编辑:文档中还有一些详细信息:


    对于并行执行或尝试在所有测试中重复使用单个浏览器,请参考:

    根据Peter Thomas的建议,我使用了这个karate-config.js

    function fn() {
    
      // browser settings, if not set it takes chrome
      var browser = karate.properties['browser'] || 'chrome';
      karate.log('the browser set is: ' + browser + ', default: "chrome"');
    
      // grid flag, if not set it takes false. The grid url is in this format http://localhost:4444/wd/hub
      var grid_url = karate.properties['grid_url'] || false;
      karate.log('the grid url set is: ' + grid_url + ', default: false');
    
      // configurations.
      var config = {
        host: 'http://httpstat.us/'
      };
    
      if (browser == 'chrome') {
          if (!grid_url) {
             karate.configure('driver', { type: 'chromedriver', executable: 'chromedriver' });
             karate.log("Selected Chrome");
          } else {
             karate.configure('driver', { type: 'chromedriver', start: false, webDriverUrl: grid_url });
             karate.log("Selected Chrome in grid");
          }
       } else if (browser == 'firefox') {
          if (!grid_url) {
              karate.configure('driver', { type: 'geckodriver', executable: 'geckodriver' });
              karate.log("Selected Firefox");
          } else {
              karate.configure('driver', { type: 'geckodriver', start: false, webDriverUrl: grid_url });
              karate.log("Selected Firefox in grid");
          }
       } 
    
      return config;
    }
    
    通过这种方式,我能够调用测试套件,指定直接从命令行使用的浏览器(将在Jenkins管道中使用):


    根据Peter Thomas的建议,我使用了这个karate-config.js

    function fn() {
    
      // browser settings, if not set it takes chrome
      var browser = karate.properties['browser'] || 'chrome';
      karate.log('the browser set is: ' + browser + ', default: "chrome"');
    
      // grid flag, if not set it takes false. The grid url is in this format http://localhost:4444/wd/hub
      var grid_url = karate.properties['grid_url'] || false;
      karate.log('the grid url set is: ' + grid_url + ', default: false');
    
      // configurations.
      var config = {
        host: 'http://httpstat.us/'
      };
    
      if (browser == 'chrome') {
          if (!grid_url) {
             karate.configure('driver', { type: 'chromedriver', executable: 'chromedriver' });
             karate.log("Selected Chrome");
          } else {
             karate.configure('driver', { type: 'chromedriver', start: false, webDriverUrl: grid_url });
             karate.log("Selected Chrome in grid");
          }
       } else if (browser == 'firefox') {
          if (!grid_url) {
              karate.configure('driver', { type: 'geckodriver', executable: 'geckodriver' });
              karate.log("Selected Firefox");
          } else {
              karate.configure('driver', { type: 'geckodriver', start: false, webDriverUrl: grid_url });
              karate.log("Selected Firefox in grid");
          }
       } 
    
      return config;
    }
    
    通过这种方式,我能够调用测试套件,指定直接从命令行使用的浏览器(将在Jenkins管道中使用):


    谢谢彼得·托马斯。我试试你的解决办法。对这个工具的赞美,它真的是对彼得·托马斯的承诺。我试试你的解决办法。对这个工具的赞美,它真的很有前途