如何使用selenium和junit测试多个浏览器(版本)

我刚刚发现了selenium – 一个很棒的工具! 我计划运行/使用selenium-ide生成的junit4代码。 但我需要它与许多浏览器/网络驱动程序运行。 这个用例是否有junit / java-pattern? 我的第一个想法是使用@RunWith(Parameterized.class)并提供WebDrivers列表(该类的参数 – 可能作为列出浏览器和版本的外部文件提供?!)。 这是一个好主意吗? 是否有可能提供一个中心@Parameters -method供我所有的Selenium测试使用?

有什么替代品?

可能有可能更改Selenium导出的“格式”以最小化手动更改?

好吧,我确实需要不时切换驱动程序,所以我这样做了:

我在我自己的类中初始化与selenium相关的东西 – 由应用程序的名称调用,并且getter接近驱动程序。 在调用我的类构造函数时,我使用枚举类型的驱动程序来初始化:

private WebDriver driver; public TestUI(Environment.DriverToUse drv){ switch (drv){ case CHROME:{ ChromeDriverService service = ChromeDriverService.createDefaultService(); File file = new File(TestUI.class.getResource("/chromedriver.exe").toURI()); System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, file.getAbsolutePath()); ChromeOptions options = new ChromeOptions(); options.addArguments("--start-maximized"); driver = new ChromeDriver(service,options); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); break; } case FIREFOX:{ FirefoxProfile ffProfile = new FirefoxProfile(); ffProfile.setPreference("browser.safebrowsing.malware.enabled", false); driver = new FirefoxDriver(ffProfile); driver.manage().window().setPosition(new Point(0, 0)); java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension dim = new Dimension((int) screenSize.getWidth(), (int) screenSize.getHeight()); driver.manage().window().setSize(dim); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); break; } public WebDriver getDriver(){ return driver; } 

当然我的Environment类看起来像这样

 public class Environment { public enum DriverToUse {FIREFOX, CHROME}; // .. and some other stuff, because I need to test on different environments, so I store here Environment URL for example 

我的测试类看起来像这样

 @Before public static final Environment.DriverToUse USED_DRIVER = Environment.DriverToUse.FIREFOX; @Test public void testVersionNumber() throws Exception{ TestUI testUI= new TestUI(USED_DRIVER); WebElement version = testUI.getDriver().findElement(By.id("the Id of element")); version.click(); //... } 

使用Selenium RC / Selenium Server。 这些API带有您需要在多个浏览器中运行远程测试。 快乐狩猎!

看看Selenide图书馆。 它是selenium的开源包装器,使UI测试变得轻而易举。 这是一个示例测试。

 @Test public void userCanLoginByUsername() { open("/login"); $(By.name("user.name")).setValue("johny"); $("#submit").click(); $(".loading_progress").should(disappear); // Waits until element disappears $("#username").shouldHave(text("Hello, Johny!")); // Waits until element gets text }