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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据环境使用不同的webdrivers相关的知识,希望对你有一定的参考价值。

我用硒木星。我从这样的方法参数中获取一个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");
}
答案

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

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的问题。

另一答案

我认为这里更好的方法是在任何测试(使用@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");
}
另一答案

您可以使用此扩展程序附带的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();
   }

以上是关于如何根据环境使用不同的webdrivers的主要内容,如果未能解决你的问题,请参考以下文章

无法定位元素 - 使用selenium webdriver在不同的语言环境中自动化网站

如何在不同浏览器中运行Selenium WebDriver?

如何使用 Selenium WebDriver 获取 Inspect Element 代码

根据滚动位置播放不同的音频文件

如何根据特定参数在 selenium webdriver 的文本框中插入值

如何实现具有不同片段/布局的 ViewPager