Selenium C# NUnit 示例教程
Selenium 概述
Selenium 是一个开源的 Web 自动化测试工具,支持多种浏览器和多种操作系统。它允许测试人员使用多种编程语言,如 Java、C#、Python、.Net、Ruby、PHP 和 Perl 来编写自动化测试。
C# 概述
C# 是一种面向对象的编程语言,源自 C++ 和 Java。C# 允许开发人员使用 Visual Studio 在 .Net 平台上构建应用程序。以下是 C# 的主要特点。
- 它是一种面向对象的编程语言
- 它支持控制台、Windows 和基于 Web 的应用程序的开发
- 它提供封装、继承和多态等功能。
C# 的基本语法
C# 程序需要包含以下部分
- 命名空间声明
- 类
- 类属性和方法
- 主方法
- 程序语句
示例-
以下是一个示例 Selenium C# 程序,用于在系统控制台上打印文本“Guru99”。
using System; namespace FirstProgram { class DemoPrint { static void main(){ Console.WriteLine("Guru99"); } } }
解释
- 上述 Selenium C# 示例中的命名空间是多个类的集合。每个命名空间都必须使用关键字“using”声明。
- 代码的第一条语句将命名空间“System”包含到我们的程序中。System 命名空间定义了 C# 中使用的基本类和事件。要使用的命名空间取决于程序要求。
- 第二条语句为类“DemoPrint”声明了一个命名空间“FirstProgram”。一个 C# 文件可以在同一个命名空间中包含多个类。
- 第三条语句包含类声明。一个类可能包含多个属性和多个方法。
- 第四条语句包含 Main 方法的声明。Main 方法是每个类的执行入口点。
- 最后一条语句是用于向控制台打印语句的 C# 语法。WriteLine 是“Console”类的一个方法。
Selenium 与 C# 设置
如何使用 Selenium WebDriver 设置 Visual Studio
现在,在这个 Selenium C# 教程中,让我们学习使用 Selenium WebDriver 设置 Visual Studio 的分步过程
Visual Studio 是一个集成开发环境 (IDE),开发人员使用它来构建跨多个平台(例如 Windows、Android、iOS 和基于云的应用程序)的应用程序。
步骤 1) 导航到 URL
https://visualstudio.microsoft.com/downloads/ 并单击 Visual Studio Community 选项卡上显示的“免费下载”按钮
步骤 2) 打开下载的 exe 文件。如果要求管理员权限,请单击“是”。
步骤 3) 将出现以下弹出窗口。单击“继续”按钮。
文件将如下面的弹出窗口所示下载。
步骤 4) 在下一个屏幕上,
选择以下复选框
- 通用 Windows 平台开发
- .Net 桌面开发
单击“安装”。
等待每个组件安装完成。文件大小为 16GB,需要时间。
步骤 5) 将显示以下弹出窗口。单击“重启”按钮。
步骤 6) 机器重启后,在开始菜单中搜索“Visual Studio”并单击搜索结果。将出现以下弹出窗口。如果您没有现有帐户,请单击“现在不,也许稍后”链接。
步骤 7) 在下一个屏幕上,
- 选择您喜欢的颜色主题
- 单击“启动 Visual Studio”按钮
步骤 8) 将出现 Visual Studio“入门”屏幕。
在 Visual Studio 中创建一个新项目
步骤 1) 在文件菜单中,单击新建 > 项目
步骤 2) 在下一个屏幕上,
- 选择“Visual C#”选项
- 单击控制台应用 (.Net Framework)
- 输入名称为“Guru99”
- 点击确定
步骤 3) 项目成功创建后将显示以下屏幕。
使用 Selenium WebDriver 设置 Visual Studio
步骤 1) 导航到工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包
步骤 2) 在下一个屏幕上
- 在结果屏幕上搜索 Selenium
- 选择第一个搜索结果
- 选中项目复选框
- 单击“安装”
步骤 3) 在弹出屏幕中单击“确定”按钮
步骤 4) 包成功安装后将显示以下消息。
NUnit 框架:概述
NUnit 是 Visual Studio 和 Selenium WebDriver 支持的单元测试框架。NUnit 是 .Net 应用程序最广泛使用的单元测试框架。NUnit 以可读的格式呈现测试结果,并允许测试人员调试自动化测试。
我们需要在 Visual Studio 中安装 NUnit 框架和 NUnit 测试适配器才能使用它。
安装 NUnit 框架的步骤
现在在这个 Selenium with C# 教程中,让我们学习安装 NUnit 框架的过程
步骤 1) 导航到工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包
步骤 2) 在下一个窗口中
- 搜索 NUnit
- 选择搜索结果
- 选择项目
- 单击安装
步骤 3) 将出现以下弹出窗口。单击“确定”按钮。
步骤 4) 安装完成后将出现以下消息。
下载 NUnit 测试适配器的步骤
现在在这个 NUnit 教程中,我们将介绍下载 NUnit 测试适配器的步骤
请注意,以下步骤仅适用于 32 位机器。对于 64 位机器,您需要按照以下相同过程下载“NUnit3 测试适配器”。
步骤 1) 导航到工具 -> NuGet 包管理器 -> 管理解决方案的 NuGet 包。在该屏幕上,
- 搜索 NUnitTestAdapter
- 单击搜索结果
- 选择项目
- 单击安装
步骤 2) 在确认弹出窗口中单击“确定”。安装完成后,您将看到以下消息 -
Selenium 和 NUnit 框架
Selenium 与 NUnit 框架的集成允许测试人员区分各种测试类。NUnit 还允许测试人员使用 SetUp、Test 和 TearDown 等注解在运行测试之前和之后执行操作。
NUnit 框架可以通过创建 NUnit 测试类并使用 NUnit 框架运行测试类来与 Selenium 集成。
此 Selenium C# 框架教程中的以下步骤是使用 NUnit 框架创建和运行测试类所需的。
在 Selenium 中创建 NUnit 测试类的步骤
步骤 1) 在解决方案资源管理器中,右键单击项目 > 添加 > 类
步骤 2) 将出现类创建窗口。
- 为类提供一个名称
- 单击添加按钮
步骤 3) 将出现以下屏幕。
步骤 4) 将以下代码添加到创建的类中。请注意,在 Chrome 驱动程序初始化期间,您需要指定“chromedriver.exe”文件的位置。
using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Firefox; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Guru99Demo { class Guru99Demo { IWebDriver driver; [SetUp] public void startBrowser() { driver = new ChromeDriver("D:\\3rdparty\\chrome"); } [Test] public void test() { driver.Url = "http://www.google.co.in"; } [TearDown] public void closeBrowser() { driver.Close(); } } }
步骤 4) 单击“构建” -> “构建解决方案”
注意:在构建时,您可能会收到“不包含适合入口点的静态‘main’方法”的错误
要解决此问题,请转到项目 > 属性并将输出类型更改为“类库”。默认值为“控制台应用程序”。
步骤 5) 构建成功后,我们需要打开测试资源管理器窗口。单击测试 -> 窗口 -> 测试资源管理器
步骤 6) 测试资源管理器窗口打开,其中包含可用测试列表。右键单击测试资源管理器并选择“运行选定的测试”
步骤 7) Selenium 必须打开带有指定 URL 的浏览器并关闭浏览器。测试用例状态将在测试资源管理器窗口上更改为“通过”。
C# 中的 Selenium WebDriver 命令
C# 使用接口“IWebDriver”进行浏览器交互。以下是 C# 中 Selenium 可用的命令类别。
- 浏览器命令
- Web 元素命令
- 下拉命令
现在在 Selenium C# 教程中,让我们逐一研究 Selenium WebDriver 命令
浏览器命令
以下是 C# 中 Selenium 可用的浏览器命令列表。
命令名称 | 描述 | 语法 |
---|---|---|
Url 命令 | 此命令用于在浏览器中打开指定的 URL。 |
driver.Url = "https://guru99.com.cn" |
Title 命令 | 此命令用于检索当前打开网页的页面标题 |
String title = driver.Title |
PageSource 命令 | 此命令用于检索当前打开网页的源代码。 |
String pageSource = driver.PageSource |
Close 命令 | 此命令用于关闭最近打开的浏览器实例。 |
driver.Close(); |
Quit 命令 | 此命令用于关闭所有打开的浏览器实例 |
driver.Quit(); |
Back 命令 | 此命令用于导航到浏览器历史记录的上一页。 |
driver.Navigate().Back(); |
Forward 命令 | 此命令用于导航到浏览器历史记录的下一页。 |
driver.Navigate().Forward() |
Refresh 命令 | 此命令用于执行浏览器刷新。 |
driver.Navigate().Refresh() |
Web 元素命令
Web 元素代表网页上的所有元素。它们由 HTML 标签表示。按钮、文本框、链接、图像、表格和框架都属于 Web 元素。Web 元素上的操作可以使用 IWebelement 接口触发。要与 Web 元素交互,我们需要在网页上找到该元素,然后对其执行操作。Firebug 和 Firepath 等工具可用于识别 Web 元素的XPath。
以下是 C# 中可用的 Web 元素命令列表。
命令名称 | 描述 | 语法 |
---|---|---|
Click 命令 | 此命令用于单击 Web 元素。为了使元素可点击,该元素必须在网页上可见。此命令也用于复选框和单选按钮操作。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); element.Click(); |
Clear 命令 | 此命令专门用于清除文本框中的现有内容。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); element.Clear(); |
SendKeys 命令 | 此命令用于向文本框输入值。要输入的值必须作为参数传递给 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); element.SendKeys("guru99"); |
Displayed 命令 | 此命令用于识别特定元素是否显示在网页上。此命令返回一个布尔值;根据 Web 元素的可见性,为 true 或 false。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); Boolean status = element.Displayed; |
Enabled 命令 | 此命令用于识别特定 Web 元素是否在网页上启用。此命令返回一个布尔值;结果为 true 或 false。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); Boolean status = element.Enabled; |
Selected 命令 | 此命令用于识别特定 Web 元素是否已选中。此命令用于复选框、单选按钮和选择操作。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); Boolean status = element.Selected; |
Submit 命令 | 此命令与 click 命令类似,区别在于 HTML 表单是否有一个类型为 Submit 的按钮。虽然 click 命令单击任何按钮,但 submit 命令仅单击类型为 submit 的按钮。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); element.submit(); |
Text 命令 | 此命令返回 Web 元素的内部文本。此命令返回一个字符串值作为结果。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); String text=element.Text; |
TagName 命令 | 此命令返回 Web 元素的 HTML 标签。它返回一个字符串值作为结果。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); String tagName = element.TagName; |
GetCSSValue 命令 | 此方法用于以 rgba 字符串(红、绿、蓝和 Alpha)的形式返回 Web 元素在表单上的颜色。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); String color = element.getCSSValue; 输出 – 如果元素的颜色为红色,则输出为 rgba(255,0,0,1) |
下拉命令
C# 中的下拉操作可以通过 SelectElement 类实现。
以下是 C# 中可用的各种下拉操作。
命令名称 | 描述 | 语法 |
---|---|---|
SelectByText 命令 | 此命令根据选项的文本选择下拉列表中的一个选项。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); select.SelectByText("Guru99"); |
SelectByIndex 命令 | 此命令用于根据其索引选择一个选项。下拉列表的索引从 0 开始。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); select.SelectByIndex("4"); |
SelectByValue 命令 | 此命令用于根据其选项值选择一个选项。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); select.SelectByValue("Guru99"); |
Options 命令 | 此命令用于检索下拉列表中显示的所有选项的列表。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); List<IWebelement> options = select. Options; int size = options.Count; for(int i=0;i<options.size();i++) { String value = size.elementAt(i).Text; Console.writeLine(value); } 上述代码将下拉列表中的所有选项打印到控制台。 |
IsMultiple 命令 | 此命令用于识别下拉列表是否为多选下拉列表;多选下拉列表允许用户一次选择下拉列表中的多个选项。此命令返回一个布尔值。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); Boolean status = select.IsMultiple(); |
DeSelectAll 命令 | 此命令用于多选下拉列表。它清除已选择的选项。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); select.DeSelectAll(); |
DeSelectByIndex 命令 | 此命令使用其索引取消选择已选择的值。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); select.DeSelectByIndex("4"); |
DeSelectByValue 命令 | 此命令使用其值取消选择已选择的值。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); select.DeSelectByValue("Guru99"); |
DeSelectByText 命令 | 此命令使用其文本取消选择已选择的值。 |
IWebelement element = driver.FindElement(By.xpath("xpath of Webelement")); SelectElement select = new SelectElement(element); select.DeSelectByText("Guru99"); |
代码示例
示例 1:使用 XPATH 定位器单击链接
测试场景
- 导航到 Demo Guru99 网页 – https://demo.guru99.com/test/guru99home/
- 最大化窗口
- 单击“测试”菜单
- 关闭浏览器
using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Guru99Demo { class CSS { IWebDriver m_driver; [Test] public void cssDemo() { m_driver = new ChromeDriver("D:\\3rdparty\\chrome"); m_driver.Url = "https://demo.guru99.com/test/guru99home/"; m_driver.Manage().Window.Maximize(); IWebelement link = m_driver.FindElement(By.XPath(".//*[@id='rt-header']//div[2]/div/ul/li[2]/a")); link.Click(); m_driver.Close(); } } }
示例 2:使用 XPATH 定位器在文本框中输入数据并单击按钮
测试场景
- 导航到 Guru 99 演示页面 – https://demo.guru99.com/test/guru99home/
- 在电子邮件文本框中输入数据
- 单击注册按钮
using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Guru99Demo { class CSS { IWebDriver m_driver; [Test] public void cssDemo() { m_driver = new ChromeDriver("G:\\"); m_driver.Url = "https://demo.guru99.com/test/guru99home/"; m_driver.Manage().Window.Maximize(); // Store locator values of email text box and sign up button IWebElement emailTextBox = m_driver.FindElement(By.XPath(".//*[@id='philadelphia-field-email']")); IWebElement signUpButton = m_driver.FindElement(By.XPath(".//*[@id='philadelphia-field-submit']")); emailTextBox.SendKeys("test123@gmail.com"); signUpButton.Click(); } } }
示例 3:使用 CSS 定位器在文本框中输入数据并单击按钮
测试场景
- 导航到 Guru 99 演示页面 – https://demo.guru99.com/test/guru99home/
- 在电子邮件文本框中输入数据
- 单击注册按钮
using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Guru99Demo { class CSS { IWebDriver m_driver; [Test] public void cssDemo() { m_driver = new ChromeDriver("G:\\"); m_driver.Url = "https://demo.guru99.com/test/guru99home/"; m_driver.Manage().Window.Maximize(); // Store locator values of email text box and sign up button IWebElement emailTextBox = m_driver.FindElement(By.CssSelector("input[id=philadelphia-field-email]")); IWebElement signUpButton = m_driver.FindElement(By.CssSelector("input[id=philadelphia-field-submit]")); emailTextBox.SendKeys("test123@gmail.com"); signUpButton.Click(); } } }
示例 4:在下拉列表中选择一个值
测试场景
- 导航到 Guru 99 演示页面 – https://demo.guru99.com/test/guru99home/
- 单击 SAP 链接
- 在名称和电子邮件文本框中输入数据
- 从课程下拉列表中选择一个值
- 关闭浏览器
using NUnit.Framework; using OpenQA.Selenium; using OpenQA.Selenium.Chrome; using OpenQA.Selenium.Support.UI; namespace Guru99Demo { class TestSelect { IWebDriver m_driver; [Test] public void selectDemo() { m_driver = new ChromeDriver("G:\\"); m_driver.Url = "https://demo.guru99.com/test/guru99home/"; m_driver.Manage().Window.Maximize(); IWebElement course = m_driver.FindElement(By.XPath(".//*[@id='awf_field-91977689']")); var selectTest = new SelectElement(course); // Select a value from the dropdown selectTest.SelectByValue("sap-abap"); } } }
摘要
- 要将 Selenium WebDriver 与 C# 一起使用,您需要安装 Visual Studio。
- NUnit 是 Visual Studio 和 Selenium WebDriver 支持的单元测试框架
- 我们需要在 Visual Studio 中安装 NUnit 框架和 NUnit 测试适配器才能使用它。
- NUnit 框架可以通过创建 NUnit 测试类并使用 NUnit 框架运行测试类来与 Selenium 集成。
- NUnit 还允许测试人员使用 SetUp、Test 和 TearDown 等注解在运行测试之前和之后执行操作。
- Selenium WebDriver 命令可分为浏览器命令、Web 元素命令和下拉命令。