如何根据环境使用不同的webdrivers

时间:2018-06-14 12:43:12

标签: selenium-webdriver selenium-grid junit5 junit-jupiter selenium-jupiter

我使用硒木星。我从这样的方法参数中获取一个webdriver:

@Test
public void testWithChrome(ChromeDriver chromeDriver) {
          chromeDriver.get("someUrlHere");
}

现在我想在网格上运行测试,所以我需要根据环境使用webdriver。例如,在我的PC上开发测试时,我想使用(本地)ChromeDriver,但是当使用Jenkins在网格上运行测试时,我想使用RemoteDriver。 所以我需要这样的东西:(当env = 0时,这会给我本地Chrome,或者当env = 1时给我远程Chrome,但它不起作用)

int env = 0;

@Test
public void testWithChrome(
   (env == 0 ? ChromeDriver driver : RemoteDriver driver)) {
          driver.get("someUrlHere");
}

3 个答案:

答案 0 :(得分:1)

简而言之:以编程方式配置Selenium扩展时,您可以通过如下配置其URL(使用JUnit 5注释)来强制使用Selenium Grid:

abstract class UiTest {

    @RegisterExtension
    static SeleniumExtension seleniumExtension = new SeleniumExtension();     

    @BeforeAll
    static void setUpOnce() {

        boolean isRunningInCiEnvironment = ...

        if( isRunningInCiEnvironment ) {

           // this will force Selenium Jupiter to use a RemoteWebDriver
           seleniumExtension.getConfig().setSeleniumServerUrl("http://...");

        }

        // without above condition, a FirefoxDriver will be used locally
        seleniumExtension.addBrowsers(BrowserBuilder.firefox().build(););

   }       
}


class MyTest extends UiTest {

    // Use WebDriver interface in test method: concrete browser detected
    // at execution time (via @BeforeAll, inherited from parent class)
    @Test
    void my_test_Case(WebDriver webDriver) {

       webDriver.get(...)
       Assert.(...)        
    }
}

长度为is decribed here的问题。

答案 1 :(得分:0)

我认为这里更好的方法是在任何测试(使用@BeforeAll注释)之前执行一个方法,该方法确定运行脚本的环境。它可能从一些配置文件中读取本地vs网格。确定后,将driver变量指定为ChromeDriverRemoteDriver的实例。从那时起,您的测试将传递driver类型为WebDriver的实例,因为ChromeDriverRemoteDriver都会从中继承。

WebDriver driver;

@BeforeAll
public void setup()
{
    // read from config file, etc. to determine if local or grid
    if (local)
    {
        driver = new ChromeDriver();
    }
    else
    {
        driver = new RemoteDriver();
    }
}

@Test
public void test()
{
    driver.get("someUrlHere");
}

答案 2 :(得分:0)

您可以使用此扩展程序随附的WebDriverManager来做到这一点。

    @BeforeEach
    public void setUp()
    {
        switch(browser)
        {
            case "chrome" -> 
                {
                WebDriverManager.chromedriver().setup();
                driver = new ChromeDriver();
                }
            case "firefox" ->
                {
                WebDriverManager.firefoxdriver().setup();
                driver = new FirefoxDriver();
                }
            case "edge" ->
                {
                    WebDriverManager.edgedriver().setup();
                    driver = new EdgeDriver();          
                }
        }
            driver.manage().window().maximize();
   }