本文概述
- 解释Selenium?
- 什么是C#?
- 为什么C#对自动化测试有用?
- Selenium与C#
- 在C#中使用Visual Studio配置Selenium
- 在Visual Studio中使用NUnit配置Selenium
在本节中, 我们将学习如何在Visual Studio和NUnit Framework的帮助下以C#编程语言创建Selenium测试脚本。
在本教程中, 我们将学习以下主题:
- 解释Selenium?
- 什么是C#?
- 为什么C#对自动化测试有用?
- Selenium与C#
- 在C#中使用Visual Studio配置Selenium
- 在Visual Studio中使用NUnit配置Selenium
解释Selenium?
Selenium是最重要的自动化测试工具之一, 因为它支持多种编程语言, 例如Java, Python, C#, Ruby, Perl和PHP等。
并在各种操作系统(例如Windows, Mac, Linux)上的各种浏览器(例如Google Chrome, Firefox, Safari, Internet Explorer和Opera)中自动化测试脚本。
Selenium支持其他测试工具(例如TestNG和JUnit)来管理测试用例并生成测试报告。
有关Selenium的更多详细信息, 请参见以下链接:
https://www.srcmini02.com/selenium-tutorial
什么是C#?
C#是一种面向对象的编程语言, 它在.Net框架上运行, 并且发音为C-sharp。
开发C#语言来运行CLR, CLR代表”公共语言运行时”。
在C#中, 我们可以借助函数将程序分解为多个部分。这就是为什么它也被称为结构化编程语言。
有关C#语言的更多详细信息, 请参见以下链接:
https://www.srcmini02.com/c-sharp-tutorial
为什么C#对自动化测试有用?
- C#对自动化测试很有用, 因为它允许自动化测试工程师借助.Net框架上的Visual Studio开发应用程序。
- C#是另一种编程语言, 也支持与Selenium的绑定。
- 并且此语言绑定将与java程序一起更新。
- C#IDE是Visual Studio, 与Java的Eclipse相比, 它提供了更快的开发和调试体验。
- C#具有许多内置函数, 可加快开发速度。
Selenium与C#
在本节中, 我们将了解如何下载, 安装Visual Studio以及如何使用Visual Studio, NUnit Framework配置Selenium, 以及如何使用C#编程语言在Visual Studio中执行测试脚本。
要将Selenium与C#结合使用, 请执行以下过程:
- 在C#中使用Visual Studio配置Selenium
- 在Visual Studio中使用NUnit配置Selenium
在C#中使用Visual Studio配置Selenium
以下是在C#中使用Visual Studio配置Selenium的过程:
- 下载并安装C#IDE(Visual Studio)
- 在Visual Studio中创建一个新项目
- 在Visual Studio中添加引用
- 使用C#编写Selenium测试脚本
- 在Visual Studio中运行Selenium测试脚本
下载并安装Visual Studio
Visual Studio是C#IDE [集成开发环境], 用于在Windows, Mac等各种平台上开发应用程序。
在这里, 我们正在下载并安装Visual Studio for Windows平台。
下载Visual Studio
要下载用于Windows平台的Visual Studio的最新版本, 请参考以下链接:https://visualStudio.microsoft.com/downloads/
- 单击上面的链接后, 在”下载”部分中, 我们将单击”社区”区域下的”免费下载”按钮, 如下面的屏幕快照所示:
- 单击”免费下载”按钮后, 它将下载visual Studio的exe文件。
- 然后, 打开下载的exe文件, 如下面的屏幕截图所示:
安装Visual Studio
下载适用于Windows的Visual Studio平台后, 我们将准备安装它。
要安装Visual Studio, 请执行以下过程:
- 双击下载的可执行文件后, Visual Studio Installer窗口将出现在屏幕上, 我们单击”继续”按钮以进行进一步的处理, 如下面的屏幕快照所示:
- 单击继续按钮后, 它将开始为Visual Studio安装文件。
- 完成此过程后, 将在屏幕上显示”安装-visual Studio-community 2019-16.4.3″窗口, 我们在”桌面和移动”部分下选择”通用Windows平台”开发和.Net桌面开发选项。
- 然后单击”安装”按钮, 如下图所示:
- 由于文件大小很大, 因此安装过程将花费一些时间, 如下面的屏幕截图所示:
- 安装过程完成后, 我们将在启动Visual Studio之前单击”重新启动”按钮。
- 系统重新启动(重新启动)后, 我们将在”开始”菜单上搜索” Visual Studio 2019″, 然后双击它。
- 屏幕上将显示以下弹出窗口, 我们将单击Not Now, 如果没有帐户, 则可能会稍后单击, 如下面的屏幕截图所示:
- 在下一个窗口中, 我们可以选择Visual Studio的主题。
- 选择Visual Studio的主题后, 单击”启动Visual Studio”按钮, 如下图所示:
- 我们得到了Visual Studio的”入门”窗口。
创建一个新项目
安装完成后, 我们准备在Visual Studio上创建一个新项目。
要在Visual Studio上创建一个项目, 请按照以下过程操作:
- 右键单击”文件”菜单, 转到”新建”, 然后在给定的弹出菜单中选择”项目”选项, 如下面的屏幕快照所示:
- 屏幕上将出现”创建新项目”窗口, 我们将在”所有语言”下拉菜单中选择C#语言。
- 然后, 从”所有平台”下拉列表中选择Windows平台选项。
- 然后在搜索字段中搜索.net Framework模板, 然后从中选择Console App(.NET Framework)。
- 之后, 单击下一步按钮, 如下面的屏幕截图所示:
- 单击下一步按钮后, 将在屏幕上显示”配置新项目”窗口, 我们将在其中提供项目名称[SeleniumTest], 然后单击”创建”按钮, 如下面的屏幕截图所示:
- 成功创建项目后, 屏幕上将出现以下窗口:
在Visual Studio中添加引用
项目创建完成后, 我们将在Visual Studio中借助NuGet软件包管理器添加Selenium WebDriver和Chrome驱动程序的引用。
添加Selenium WebDriver参考
请按照以下过程, 在Visual Studio中添加Selenium WebDriver的引用:
- 在解决方案资源管理器中, 右键单击”引用”, 然后在给定的弹出菜单中选择”管理NuGet软件包”选项, 如下面的屏幕快照所示:
- 将打开”管理NuGet软件包”窗口, 我们将在其中搜索Selenium并选择WebDriver, 然后单击”安装”按钮, 如下图所示:
- 然后, 在预览更改窗口中单击确定按钮, 如下图所示:
- 成功安装软件包后, 它将显示以下输出消息。
添加Chrome驱动程序参考
请按照以下过程在Visual Studio中添加对Chrome驱动程序的引用:
- 要在Chrome浏览器上执行操作, 我们将再次右键单击”引用”, 然后从弹出菜单中选择”管理NuGet软件包”选项。
- 然后在搜索字段中搜索chrome驱动程序, 然后选择Chrome.WebDriver并单击”安装”按钮, 如下图所示:
- 并且, 单击”预览更改”窗口中的”确定”按钮以进行进一步处理。
- 在Visual Studio中添加Selenium WebDriver和Chrome驱动程序引用之后, 我们准备使用C#编程语言编写测试脚本。
使用C#编写Selenium测试脚本
要使用C#编程语言编写Selenium测试脚本, 请执行以下步骤:
Steps | Actions | Input | Expected Result |
---|---|---|---|
1. | 为浏览器创建参考 | 应该创建浏览器的参考。 | |
2. | 导航到Google主页。 | https://www.google.com/ | 必须显示Google主页。 |
3. | 识别Google搜索文本框并传递值。 | srcmini教程 | 应该标识Google搜索框, 然后输入值。 |
4. | 识别并单击Google搜索按钮。 | 应该识别并单击Google搜索按钮。 | |
5. | 关闭浏览器。 | 浏览器应关闭。 |
我们将逐步创建测试脚本, 以使你详细了解每个组件。
步骤1
要为浏览器创建参考, 我们将遵循以下过程:
注意:要声明接口:在接口名称之前添加前缀” I”。就像在下表中可以看到的那样, 在C#中, 我们在接口(IWebDriver)之前放置” I”, 而在Java中, 则不需要在接口(WebDriver)名称之前放置” I”。
C# | Java |
---|---|
IWebDriver | WebDriver |
IWebElement | WebElement |
这里是示例代码:
IWebDriver driver = new ChromeDriver();
- 在编写以上代码时, 我们遇到以下错误:
- 为了克服此错误, 我们将使用以下语句, 这有助于我们添加Selenium参考。
using OpenQA.Selenium;
- 在添加chrome驱动程序的引用时, 它将出现以下错误:
- 为了解决此错误, 我们将在代码中使用以下语句。
using OpenQA.Selenium.Chrome;
第2步
在这一步中, 我们将在浏览器中浏览https://www.google.com/ URL。
并且示例代码如下:
driver.Navigate().GoToUrl("https://www.google.com/");
注意:GoToUrl()方法用于浏览URL。
第三步
要识别Google搜索框, 请执行以下过程:
在此步骤中, 我们尝试借助其Name属性找到Google搜索文本框。
右键单击Google搜索文本框, 然后在弹出菜单中选择”检查”选项, 如下图所示:
将启动开发人员工具窗口, 其中包含开发Google搜索文本框时使用的所有特定代码, 我们将在其中复制其Name属性的值” q”。
并且示例代码如下:
IWebElement ele = driver.FindElement(By.Name("q"));
步骤4
在此步骤中, 我们将值传递到Google搜索框中。
这里是示例代码:
ele.SendKeys("srcmini tutorials");</p>
步骤5
要确定Google搜索按钮, 请执行以下过程:
- 右键单击Google搜索按钮, 然后从给定的弹出菜单中选择”检查”选项, 如下图所示:
- 将启动开发人员工具窗口, 其中包含开发Google搜索按钮时使用的所有特定代码。
- 然后, 复制其名称属性的值” btnK”, 如下图所示:
- 并且, 示例代码如下:
IWebElement ele1 = driver.FindElement(By.Name("btnK"));
//click on the search button
ele1.Click();
步骤6
在最后一步, 我们将在浏览器上执行的所有操作完成后关闭浏览器。
这里是示例代码:
driver.Close();
完成所有测试方案后, 我们的最终测试脚本将如下所示。
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SeleniumTest
{
class Program
{
static void Main(string[] args)
{
Console.Write("test case started ");
//create the reference for the browser
IWebDriver driver = new ChromeDriver();
// navigate to URL
driver.Navigate().GoToUrl("https://www.google.com/");
Thread.Sleep(2000);
// identify the Google search text box
IWebElement ele = driver.FindElement(By.Name("q"));
//enter the value in the google search text box
ele.SendKeys("srcmini tutorials");
Thread.Sleep(2000);
//identify the google search button
IWebElement ele1 = driver.FindElement(By.Name("btnK"));
// click on the Google search button
ele1.Click();
Thread.Sleep(3000);
//close the browser
driver.Close();
Console.Write("test case ended ");
}
}
}
运行测试脚本
编写完Selenium测试脚本后, 我们将运行测试脚本。
请按照以下过程运行测试脚本:
- 单击开始按钮以执行Programcs文件, 如下图所示:
- 单击开始按钮后, 将开始执行过程, 如下图所示:
- 上面的测试脚本将启动Google Chrome浏览器并自动执行所有测试方案。
在Visual Studio中使用NUnit配置Selenium
在NUnit的帮助下编写测试脚本之前, 我们将了解NUnit Framework, 并在Visual Studio中下载并安装NUnit Framework。
- 什么是NUnit框架?
- 下载NUnit3测试适配器
- 为NUnit添加引用
- 创建一个NUnit类
- 使用NUnit编写Selenium测试脚本
- 执行测试脚本
什么是NUnit框架?
NUnit是适用于所有.Net语言的单元测试框架。它是开源软件, 经过重新设计, 可以利用.Net语言的许多新功能。
它还支持广泛的.Net语言平台。
下载NUnit3测试适配器
NUnit3测试适配器是一个扩展, 允许我们在Visual Studio中运行NUnit测试。
要在Visual Studio中下载NUnit3测试适配器, 请执行以下步骤:
- 首先, 转到扩展, 然后在Visual Studio中选择”管理扩展”选项。
- 屏幕上将出现” Manage Extensions”窗口, 我们将在其中搜索NUnit, 然后单击” NUnit 3 Test Adapter”的”下载”按钮, 如下面的屏幕截图所示:
- 单击下载按钮后, 它将要求我们关闭Visual Studio来修改更改, 然后单击”修改”按钮, 如下面的屏幕快照所示:
- 单击”修改”按钮后, 它将开始安装和修改NUnit 3测试适配器。
- 完成所有修改后, 我们得到以下窗口:
- 正如我们在”管理扩展”窗口中看到的那样, 已成功安装NUnit 3测试适配器。
- 完成NUnit 3测试适配器的安装过程后, 我们将添加NUnit的引用。
为NUnit添加引用
要添加NUnit的引用, 请执行以下过程:
- 右键单击”解决方案资源管理器”中的”引用”, 然后在给定的弹出菜单中选择”管理NuGet软件包”选项。
- 在”管理NuGet软件包”窗口中, 我们将在搜索字段中搜索NUnit, 然后选择第一个选项作为NUnit, 然后单击”安装”按钮, 如下面的屏幕截图所示:
- 单击”安装”按钮后, 单击”确定”的屏幕将显示”预览更改”窗口。
- 成功安装软件包后, 我们将获得以下输出消息。
创建NUnit类
要在Visual Studio中创建NUnit类, 请执行以下过程:
- 右键单击SeleniumTest项目, 然后转到”添加”, 然后从给定的弹出菜单中选择”类”选项。
- 屏幕上将出现Add New Item窗口, 我们将提供类名称为Sample1, 然后单击Add按钮, 如下面的屏幕截图所示:
- 单击添加按钮后, 以下窗口将出现在屏幕上:
- 成功创建类后, 我们准备使用NUnit编写测试脚本。
使用NUnit编写Selenium测试脚本
要使用NUnit编写Selenium测试脚本, 请遵循以下过程:
出于测试目的, 我们将在Facebook应用程序上执行登录操作。
Steps | Actions | Input | Expected Result |
---|---|---|---|
1. | 打开谷歌浏览器。 | 应该打开Google Chrome浏览器。 | |
2. | 导航到Facebook登录页面。 | https://www.facebook.com | 必须显示Facebook登录页面。 |
3. | 标识用户名文本框并传递值。 | Username=xyz11@gmail.com | 应标识用户名文本框, 并输入值。 |
4. | 标识密码文本框并传递值。 | Password=####### | 应该标识”密码”文本框, 然后输入值。 |
5. | 标识”登录”按钮, 然后单击它。 | 应该确定并单击”登录”按钮。 | |
6. | 关闭浏览器。 | 浏览器应关闭。 |
我们将逐步创建测试脚本, 以使你完全了解如何借助Visual Studio中的NUnit框架编写测试脚本。
步骤1
要访问Google Chrome浏览器, 我们将IWebDriver创建为全局变量。
这里是示例代码:
//create the reference for the browser
IWebDriver driver = new ChromeDriver();
注意:全局变量:全局变量是在整个程序中所有函数均可访问的任何函数之外声明的。
在NUnit测试方法的帮助下, 使用NUnit编写代码时, 我们会将代码分为不同的部分:
- 对于打开浏览器:初始化
- 执行浏览器操作:ExecuteTest
- 关闭浏览器:EndTest
The syntax for the NUnit test method:
public void MethodName()
例:
public void Initialize()
{
//open the browser
}
public void ExecuteTest()
{
//perform browser operations
}
public void EndTest()
{
//close the browser
}
第2步
下一步, 我们将在Initialize()方法下导航到给定的URL。
这里是示例代码:
public void Initialize()
{
//navigate to URL
driver.Navigate().GoToUrl("https://www.facebook.com/");
//Maximize the browser window
driver.Manage().Window.Maximize();
Thread.Sleep(2000);
}
第三步
在此步骤中, 我们将在ExecuteTest()方法下标识Facebook登录页面的用户名文本框。
请遵循以下过程:
- 右键单击用户名文本框, 然后单击检查元素, 如下图所示:
- 将打开具有所有特定代码的开发人员工具窗口, 这些代码将在用户名文本框的开发中使用。
- 将其id属性的值复制为” email”, 并将其粘贴到代码中。
这里是示例代码:
public void ExecuteTest()
{
//identify the username text box
IWebElement ele = driver.FindElement(By.Id("email"));
//enter the username value
ele.SendKeys("xyz11@gmail.com");
Thread.Sleep(2000);
Console.Write("username value is entered \n");
步骤4
之后, 我们将识别Facebook登录页面的密码文本框, 因此请执行以下过程:
- 右键单击密码文本框, 然后在弹出菜单中单击”检查元素”选项, 如下图所示:
- 它将启动一个包含所有特定代码的开发人员工具窗口, 这些代码用于开发密码文本框。
- 将其name属性的值复制为” pass”并将其粘贴到代码中。
这里是示例代码:
//identify the password text box
IWebElement ele1 = driver.FindElement(By.Name("pass"));
//enter the password value
ele1.SendKeys("########");
Console.Write("password is entered");
步骤5
一旦确定了用户名或密码文本框, 我们将找到”登录”按钮并执行单击操作。
- 右键单击”登录”按钮, 然后从给定的弹出菜单中选择”检查”选项, 如下图所示:
- 具有所有特定代码的开发人员工具窗口将启动, 在登录按钮的开发中将使用这些特定代码, 如下面的屏幕截图所示:
- 复制其Id属性” u_0_b”的值并将其粘贴到代码中。
这里是示例代码:
//click on the Log in button
IWebElement ele2 = driver.FindElement(By.Id("u_0_b"));
ele2.Click();
Thread.Sleep(3000);
Console.Write("login button is clicked")
步骤7
在测试脚本的最后一步, 我们将在EndTest()方法下关闭浏览器。
下面是关闭浏览器的示例代码:
public void EndTest()
{
//close the browser
driver.Close();
}
将所有步骤组合在一起后, 我们的脚本将如下所示:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace SeleniumTest
{
class Sample1
{
//create the reference for the browser
IWebDriver driver = new ChromeDriver();
public void Initialize()
{
//navigate to URL
driver.Navigate().GoToUrl("https://www.facebook.com/");
//Maximize the browser window
driver.Manage().Window.Maximize();
Thread.Sleep(2000);
}
public void ExecuteTest()
{
//identify the username text box
IWebElement ele = driver.FindElement(By.Id("email"));
//enter the username value
ele.SendKeys("xyz11@gmail.com");
Thread.Sleep(2000);
Console.Write("username value is entered");
//identify the password text box
IWebElement ele1 = driver.FindElement(By.Name("pass"));
//enter the password value
ele1.SendKeys("########");
Console.Write("password is entered");
//click on the Login button
IWebElement ele2 = driver.FindElement(By.Id("u_0_b"));
ele2.Click();
Thread.Sleep(3000);
Console.Write("login button is clicked");
}
public void EndTest()
{
//close the browser
driver.Close();
}
}
}
注意:在以上代码中, 请在以下位置使用你的Facebook ID:xyz11@gmail.com和密码:########
执行测试脚本
要运行测试脚本, 请执行以下过程:
- 转到工具栏中的”测试”, 然后选择”测试资源管理器”, 如下面的屏幕截图所示:
- 屏幕上将出现”测试资源管理器”窗口, 要查看所有可用的测试, 我们必须构建解决方案。
- 要构建解决方案, 请转到”构建”, 然后从给定的弹出菜单中选择”构建解决方案”, 如下面的屏幕截图所示:
- 一旦完成了Build解决方案, 就无法在测试资源管理器窗口上看到”测试”, 因为我们没有添加NUnit属性。
- NUnit提供了一些内置的属性, 但是这里我们使用SetUp, Test和TearDown
- 因此, 我们将在代码中添加Test属性, 如下所示:
注意:测试属性:用于将方法标记为可从NUnit测试运行器调用。
[Test]
public void ExecuteTest()
- 添加Test属性时, 将出现以下错误。
- 为了克服此错误, 我们将使用NUnit框架的引用, 如下图所示:
- 现在, 我们转到测试资源管理器并再次构建解决方案, 然后在测试资源管理器上获取ExecuteTest。
- 之后, 我们将运行选定的测试, 如下图所示:
- 运行测试脚本后, 它将能够打开浏览器, 如下面的屏幕截图所示:
- 测试将失败, 因为我们没有在代码中的任何地方调用Initialize方法。
- 因此, 我们需要通过在代码中添加另外两个名为SetUp和TearDown的属性来告诉NUnit Framework。
注意:SetUp:SetUp属性用于标识要立即调用的方法。每个测试运行。 TearDown:此属性用于标识在每次测试执行后立即调用的方法。并且即使抛出异常, 也可以保证调用此方法。
添加所有三个属性后, 我们的最终代码将如下所示:
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using NUnit.Framework;
namespace SeleniumTest
{
class Sample1
{
//create the reference for the browser
IWebDriver driver = new ChromeDriver();
[SetUp]
public void Initialize()
{
//navigate to URL
driver.Navigate().GoToUrl("https://www.facebook.com/");
//Maximize the browser window
driver.Manage().Window.Maximize();
Thread.Sleep(2000);
}
[Test]
public void ExecuteTest()
{
//identify the username text box
IWebElement ele = driver.FindElement(By.Id("email"));
//enter the username value
ele.SendKeys("xyz11@gmail.com");
Thread.Sleep(2000);
Console.Write("username value is entered \n");
//identify the password text box
IWebElement ele1 = driver.FindElement(By.Name("pass"));
//enter the password value
ele1.SendKeys("########");
Console.Write("password is entered \n");
//click on the Login button
IWebElement ele2 = driver.FindElement(By.Id("u_0_b"));
ele2.Click();
Thread.Sleep(3000);
Console.Write("login button is clicked \n");
}
[TearDown]
public void EndTest()
{
//close the browser
driver.Close();
}
}
}
- 之后, 再次执行构建解决方案并运行所选的测试。
- 我们的测试在”测试资源管理器”窗口中通过, 如下图所示:
- 上面的测试脚本将启动Google Chrome浏览器并自动执行所有测试方案, 如下面的屏幕截图所示:
- 或者, 如果我们想查看输出, 我们将传递一些值并通过单击输出链接来查看输出。
- 我们可以看到在控制台上执行的所有操作的输出, 如下面的屏幕快照所示: