使用 Selenium-Web Driver 自动化 Web 页面测试






4.91/5 (9投票s)
简要介绍 Selenium,它允许我们自动化网页测试。
我建议下载 Download Google_Search.zip 文件。
引言
我正在重构一个 ASP.NET 应用程序的代码,并且不得不反复测试三个不同浏览器(Mozilla、Chrome 和 Internet Explorer (IE))中的一些网页。测试变得非常乏味,作为一个懒惰的程序员,我一直在寻找一个简单且免费的解决方案来自动化网页测试。我在网上搜索,发现了 Selenium 这个宝藏。在本文中,我将简要介绍 Selenium-WebDriver,它是 Selenium 的一小部分。Selenium 提供了一个全面的解决方案,可以为您的 Web 应用程序进行 持续 集成 测试并有效地管理测试用例。
Selenium
它是一套工具,用于通过允许使用多种编程语言和测试框架来控制浏览器来自动化 Web 浏览器。它支持许多浏览器和平台。Selenium 的主要目的是自动化 Web 应用程序的测试,也可以用于自动化重复的基于 Web 的管理任务。下图显示了 Selenium 组件。
Selenium IDE
它是 Firefox 的一个插件,用于记录用户在 Firefox 中的交互,也可以回放,从而创建简单的脚本或协助探索性测试。
Selenium Server
Selenium Server 接收来自测试程序的 Selenese 命令,执行它们,并报告运行这些测试的结果。当测试程序打开浏览器时,Selenium Core 会自动注入其中,从而允许 Selenium Server 控制它。Selenium Core 是一个 JavaScript 程序,它使用浏览器的 JavaScript 执行引擎来执行 Selenese 命令。Selenium Server 使用 HTTP 进行通信,因此任何支持 HTTP 的编程语言都可以使用 Selenium Server 来执行测试脚本。
Selenium Server 以前称为 Selenium RC (Remote Control)。
Selenium-WebDriver
WebDriver 在 Selenium 2.0 版本中引入,它提供了一个更简单的编程接口和设计良好的面向对象 API。它直接通过浏览器对自动化的原生支持进行调用,并且它们支持的功能取决于您使用的浏览器。如果您的浏览器和测试都在同一台机器上运行,并且您的测试仅使用 WebDriver API,那么您就不需要运行 Selenium-Server。
Selenium-Server 在以下场景中与 Selenium-WebDriver 一起使用。
- 使用 Selenium-Grid 将您的测试分布在多台机器或虚拟机上。
- 连接到具有特定浏览器版本的远程计算机,而您的当前计算机上没有该版本。
- 当您仅使用 HtmlUnit Driver 并且不使用任何 JAVA 绑定时(即 Python、C#、JAVA 或 Ruby)。
除了 Firefox 之外,所有其他浏览器都有单独的 WebDriver 可执行文件,它通过 WebDriver API 与浏览器进行通信。
有关更多详细信息,请参阅 Selenium Documentation。
使用代码
为了演示 Selenium-WebDriver 的功能,我编写了一个简单的控制台应用程序,它接受两个命令行参数。第一个参数是您要测试网页的浏览器类型,第二个参数是要在 Google 搜索页面中搜索的关键词。该应用程序将打开所选的浏览器,导航到 Google 搜索页面,输入搜索关键词,然后单击搜索按钮。
运行示例程序是一个两步过程。
步骤 1:在您的机器上设置 Selenium WebDriver
默认情况下,Firefox 浏览器支持 WebDriver,对于 Chrome 和 Internet Explorer 32 位和 64 位,WebDriver 以 EXE 文件的形式提供,该文件随上述源代码一起提供,以便于设置。要获取最新版本,您可能需要访问 Selenium 网站。在任何给定时间,您只能使用 Internet Explorer 32 位或 64 位作为驱动程序名称相同。
要设置驱动程序,请在您的驱动器上创建一个文件夹,例如 **C:\WebDriver**,然后将相应的驱动程序 EXE 文件复制到此文件夹。现在,将此文件夹路径添加到您机器上的 **PATH** 环境变量中。这是必需的,因为 WebDriver API 将搜索相应的 EXE 文件来打开 Web 浏览器。
步骤 2:提供参数运行应用程序
现在您有两种选择来运行应用程序:一种是从 Visual Studio 运行,转到 **Project>Properties>Debug** 选项卡,提供命令行参数,如下所示;或者您可以转到命令提示符,导航到 debug 文件夹并提供参数。下面的屏幕截图显示了在 Firefox 浏览器上搜索 Google 中 Selenium 关键词的命令行参数。
应用程序如何工作
首先,应用程序解析命令行参数,识别要使用的浏览器和搜索关键词。然后,它通过调用相应 WebDriver API 的构造函数来创建相应 Web 浏览器的实例,如下所示。
IWebDriver browser = null;
string uCaseBrowser = browserType.ToUpperInvariant();
try
{
switch (uCaseBrowser)
{
case "MOZILLA":
browser = new FirefoxDriver();
break;
case "CHROME":
browser = new ChromeDriver();
break;
case "IE":
InternetExplorerOptions opt = new InternetExplorerOptions();
opt.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
browser = new InternetExplorerDriver(opt);
break;
}
}
现在,应用程序将使用 WebDriver 实例导航到 Google 搜索网站。
string link = @"http://www.google.com";
browser.Navigate().GoToUrl(link);
页面加载后,应用程序会尝试通过 Web 页面的 DOM 按名称“q”查找输入文本框。Selenium 提供了多种选项来搜索 DOM 以查找所需对象。
IWebElement query = browser.FindElement(By.Name("q"));
query.SendKeys(searchKeyword);
然后,它会单击相应搜索表单的提交按钮。WebDriver 足够智能,可以自动搜索相应的表单提交按钮。
query.Submit();
关注点
- Selenium 是一个免费且文档齐全的工具,但您仍然会发现自动化某些任务很容易,而另一些则很难。如果您陷入了一个难题,您可能需要进行大量搜索、提问并耐心等待答案。
- 根据您使用的语言 API,您会注意到一个语言 API 中提供的某些功能在其他语言 API 中不可用。
- Selenium-WebDriver 与浏览器功能紧密集成,因此在编写测试用例时,如果它们用于在不同浏览器上测试网页,您可能需要仔细考虑这些差异。