1

我使用硒木星。我从这样的方法参数中得到一个 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");
}
4

3 回答 3

3

简而言之:当以编程方式配置 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.(...)        
    }
}

这里描述了长度问题。

于 2019-02-15T16:04:33.873 回答
1

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

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");
}
于 2018-06-14T13:58:05.000 回答
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();
   }
于 2019-04-24T00:04:47.577 回答