使用Selenium进行自动化浏览器测试

2025/03/19

1. 概述

如今,大多数企业都依赖网站和Web应用程序,几乎每个组织都在线运营。由于网站和Web应用程序与最终用户和客户联系在一起,因此必须在所有流行的浏览器、浏览器版本和操作系统上完美运行。

虽然手动测试可以完成工作,但自动化测试是测试速度和效率的更好选择。Selenium等自动化测试工具允许企业运行自动浏览器测试,使他们能够更快地提供高质量的网站和Web应用程序。

在本文中,我们将学习如何使用Selenium执行自动浏览器测试。

2. Selenium是什么

Selenium是一个开源工具,可帮助自动化Web浏览器测试。它提供跨浏览器测试、支持多种编程语言、平台独立性、庞大社区等优势。

最近推出的Selenium Manager提供了自动化的浏览器和驱动程序管理,使开发人员和测试人员可以无缝运行Selenium测试,而无需担心下载和安装驱动程序和浏览器。

3. 为什么使用Selenium进行自动浏览器测试?

以下是使用Selenium进行自动化浏览器测试的主要原因:

  • Selenium是一个免费的开源工具,为Web自动化测试提供了经济高效的解决方案。
  • 它支持多种流行的编程语言,如Java、Python、JavaScript、C#、Ruby和PHP。
  • Selenium使软件团队能够在各种浏览器(例如Chrome、Firefox、Edge和Safari)上测试他们的网站和Web应用程序。
  • 它拥有庞大、活跃的社区,提供广泛的支持和资源。

4. 如何使用Selenium执行浏览器自动化?

根据使用Selenium编写测试自动化脚本所选择的编程语言,我们需要遵循一些先决条件、设置和执行过程。

4.1 先决条件

以下是使用Selenium进行自动浏览器测试的一些先决条件:

  • 下载并安装Java JDK
  • 安装IntelliJ或Eclipse IDE
  • 下载所需的Maven构建工具

我们不会下载浏览器,因为测试将在基于云的测试平台上运行,例如LambdaTest。这是一个由AI驱动的测试执行平台,可让开发人员和测试人员使用Selenium在3000多种真实浏览器、浏览器版本和操作系统上大规模执行自动化测试

4.2 设置和配置

让我们在pom.xml文件中添加以下Selenium WebDriver依赖TestNG依赖

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>4.25.0</version>
</dependency>
<dependency>
    <groupId>org.testng</groupId>
    <artifactId>testng</artifactId>
    <version>7.10.2</version>
    <scope>test</scope>
</dependency>

由于我们将在LambdaTest平台上运行测试,因此我们需要为平台、浏览器和浏览器版本添加某些功能。为此,我们使用LambdaTest自动化功能生成器

让我们创建一个BaseTest.java类来在其中添加所有配置细节:

public class BaseTest {
    private static final ThreadLocal<RemoteWebDriver> DRIVER = new ThreadLocal<>();

    //...
}

BaseTest类中的ThreadLocal实例用于线程安全,因为我们将并行运行测试。它还确保每个线程都有其RemoteWebDriver实例,从而促进并行测试的顺利执行。

接下来,getDriver()和setDriver()方法将使用ThreadLocal实例获取和设置RemoteWebDriver的实例。我们将使用getLtOptions()方法设置LambdaTest自动化功能:

public RemoteWebDriver getDriver() {
    return DRIVER.get();
}

private void setDriver(RemoteWebDriver remoteWebDriver) {
    DRIVER.set(remoteWebDriver);
}

private HashMap<String, Object> getLtOptions() {
    HashMap<String, Object> ltOptions = new HashMap<>();
    ltOptions.put("project", "ECommerce playground website");
    ltOptions.put("build", "LambdaTest Ecommerce Website tests");
    ltOptions.put("name", "Automated Browser Testing");
    ltOptions.put("w3c", true);
    ltOptions.put("visual", true);
    ltOptions.put("plugin", "java-testNG");
    return ltOptions;
}

使用getLtOptions()方法,我们将设置项目、构建和测试名称,并在LambdaTest云环境中启用java-testNG插件。接下来,我们将添加getChromeOptions()方法,该方法将保存Chrome浏览器的功能并返回ChromeOptions。

类似地,getFirefoxOptions()方法接收browserVersion和platform作为参数,设置其各自的功能,并返回FirefoxOptions。

在BaseTest类中,我们将使用setup()方法设置SeleniumWebDriver,以便在Chrome和Firefox上运行自动测试。@BeforeTest注解确保该方法在任何测试之前运行,而@Parameters在运行时从testng.xml文件中传递浏览器、浏览器版本和平台值。这有助于在Chrome和Firefox上并行运行跨浏览器测试:

if (browser.equalsIgnoreCase("chrome")) {
    try {
        setDriver(new RemoteWebDriver(new URL("http://" + userName + ":" + accessKey + gridUrl),
            getChromeOptions(browserVersion, platform)));
    } catch (final MalformedURLException e) {
        throw new Error("Could not start the Chrome browser on the LambdaTest cloud grid");
    }
} else if (browser.equalsIgnoreCase("firefox")) {
    try {
        setDriver(new RemoteWebDriver(new URL("http://" + userName + ":" + accessKey + gridUrl),
            getFirefoxOptions(browserVersion, platform)));
    } catch (final MalformedURLException e) {
        throw new Error("Could not start the Firefox browser on the LambdaTest cloud grid");
    }
}

要连接到LambdaTest云网格,我们需要有LambdaTest用户名、访问密钥和网格URL。我们可以从Account Settings > Password & Security轻松找到LambdaTest用户名和访问密钥。

之后,我们将编写处理浏览器并启动其各自会话的代码。

4.3 测试场景

让我们使用以下测试场景来演示在LambdaTest平台上使用Selenium进行自动浏览器测试。

  1. 导航到LambdaTest电子商务网站
  2. 找到并点击主页上的“Shop by Category”菜单
  3. 找到并点击“MP3 Players”菜单
  4. 断言显示的页面显示页眉MP3播放器

4.4 测试实施

让我们创建一个AutomatedBrowserTest.java类来编写测试场景的测试自动化脚本,此类扩展了BaseTest类,以实现代码重用和模块化。

然后,我们将在实现测试场景的AutomatedBrowserTest类中创建whenUserNavigatesToMp3PlayersPage_thenPageHeaderShouldBeCorrectlyDisplayed()方法:

@Test
public void whenUserNavigatesToMp3PlayersPage_thenPageHeaderShouldBeCorrectlyDisplayed() {
    getDriver().get("https://ecommerce-playground.lambdatest.io/");

    HomePage homePage = new HomePage(getDriver());
    homePage.openShopByCategoryMenu();
    Mp3PlayersPage mp3PlayersPage = homePage.navigateToMp3PlayersPage();
    assertEquals(mp3PlayersPage.pageHeader(), "MP3 Players");
}

我们使用了Selenium WebDriver页面对象模式,这有助于提高代码的可读性和可维护性。HomePage类包含LambdaTest电子商务网站主页的所有页面对象。

openShopByCategoryMenu()方法使用Selenium的linkText定位器策略定位Shop By Category菜单并执行单击操作。此MP3 Players菜单使用CSS选择器#widget-navbar-217841 > ul > li:nth-child(5) > a定位,然后,navigateToMP3PlayersPage()方法定位MP3 Players页面,执行单击操作,并返回MP3PlayersPage类的新实例。

MP3PlayersPage类包含MP3 Players页面的所有对象:

public class Mp3PlayersPage {
    private WebDriver driver;

    public Mp3PlayersPage(WebDriver driver) {
        this.driver = driver;
    }

    public String pageHeader() {
        return driver.findElement(By.cssSelector(".content-title h1"))
                .getText();
    }
}

4.5 测试执行

让我们创建一个新的testng.xml文件来并行运行测试,此文件配置TestNG在Windows 10上的Chrome和Firefox上运行自动浏览器测试。

现在,让我们运行测试并访问LambdaTestWeb自动化仪表板来检查测试执行结果。

以下是在Chrome浏览器上执行测试的快照:

以下是在Firefox浏览器上执行测试的快照:

我们可以找到测试的所有详细信息,包括浏览器名称、版本、平台和测试执行日志,以及视频记录和屏幕截图。

5. 总结

总而言之,自动化浏览器测试在快速测试网站和Web应用程序中起着至关重要的作用。借助Selenium,测试人员可以同时高效地运行多个测试,从而获得更快的反馈。这种方法不仅有助于尽早发现问题,而且还能确保软件保持稳定。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章