C# Selenium
最后修改于 2023 年 7 月 5 日
C# Selenium 教程展示了如何使用 C# 中的 Selenium 框架自动化 Web 应用程序测试。Selenium 是一个用于测试 Web 应用程序的可移植框架。
Selenium
Selenium 是一个用于测试 Web 应用程序的可移植框架。 Selenium 可以在 Windows、Linux 和 macOS 上运行。
Selenium WebDriver 是一组开源 API,用于自动化 Web 应用程序的测试。 Chrome、Firefox、Opera、Microsoft Edge 等浏览器都有特定的驱动程序。 这些驱动程序需要下载并放置在 PATH 上。 Selenium WebDriver 支持不同的编程语言,包括 Python、C# 和 Java。
Selenium 可以在完整模式或无头模式下运行。 在无头模式下,浏览器不会启动。
Selenium 驱动程序
我们需要下载我们使用的浏览器的驱动程序。 在本教程中,我们选择了 EdgeDriver。 该驱动程序位于 https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
C# 安装 Selenium NuGet 包
要在 C# 程序中使用 Selenium 驱动程序,我们需要添加必要的 NuGet 包。
$ dotnet add package Selenium.WebDriver
这会安装 Selenium.WebDriver。
$ dotnet add package DotNetSeleniumExtras.WaitHelpers
此外,我们需要安装 DotNetSeleniumExtras.WaitHelpers 以获得预期的等待条件。
C# Selenium 简单示例
在第一个例子中,我们获取网页的标题。
using OpenQA.Selenium.Edge;
var eo = new EdgeOptions();
eo.AddArgument("headless");
var driver = new EdgeDriver(eo);
try
{
var url = "http://webcode.me";
driver.Url = url;
Console.WriteLine(driver.Title);
}
finally
{
driver.Quit();
}
该程序在无头模式下运行 Selenium。 它检索网站的标题。
var eo = new EdgeOptions();
eo.AddArgument("headless");
var driver = new EdgeDriver(eo);
我们创建 EdgeDriver 的一个实例。 添加了一个选项以在无头模式下运行 Selenium。
try
{
var url = "http://webcode.me";
driver.Url = url;
Console.WriteLine(driver.Title);
}
finally
{
driver.Quit();
}
我们导航到给定的 URL 并获取标题。 最后,我们退出驱动程序。
C# Selenium 测试段落内容
在下一个示例中,我们测试两个段落的内容。 我们使用 NUnit 框架。
using NUnit.Framework;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium;
namespace Paragraphs;
public class Tests
{
private string url = "http://webcode.me";
private IWebDriver driver;
[SetUp]
public void Setup()
{
var eo = new EdgeOptions();
eo.AddArgument("headless");
driver = new EdgeDriver(eo);
}
[Test]
public void TestParagraphs()
{
driver.Url = url;
var e1 = driver.FindElement(By.CssSelector("body > p:first-child"));
var e2 = driver.FindElement(By.CssSelector("body > p:nth-child(2)"));
Assert.That(e1.Text, Does.Contain("Today is a beautiful day."));
Assert.That(e2.Text, Does.Contain("How are you?"));
}
[TearDown]
public void TearDown() => driver.Quit();
}
我们使用 FindElement 方法来定位标签。 我们使用 CSS 选择器识别段落标签,并将内容与 Assert.That 断言进行比较。
C# Selenium 点击按钮
在以下示例中,我们单击一个按钮并检索对话框的内容。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test page</title>
</head>
<body>
<button id="mybtn" onclick="alert('Hello there!')">
Click
</button>
</body>
</html>
HTML 文件包含一个显示警报对话框的按钮。
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;
using SeleniumExtras.WaitHelpers;
var driver = new EdgeDriver();
try
{
var url = "file://C:/Users/Jano/Documents/prog/csharp/selenium/Click/index.html";
driver.Url = url;
var button = driver.FindElement(By.Id("mybtn"));
button.Click();
Thread.Sleep(1500);
try {
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.AlertIsPresent());
var alert = driver.SwitchTo().Alert();
var text = alert.Text;
Console.WriteLine(text);
alert.Accept();
} catch (TimeoutException e) {
Console.WriteLine(e);
}
}
finally
{
driver.Quit();
}
我们从本地文件系统获取 HTML 文件。 该示例在完整浏览器模式下运行。
var url = "file://C:/Users/Jano/Documents/prog/csharp/selenium/Click/index.html"; driver.Url = url;
我们定位 HTML 文件。
var button = driver.FindElement(By.Id("mybtn"));
button.Click();
Thread.Sleep(1500);
我们找到按钮并使用 Click 按下它。 我们使用 Thread.Sleep 添加一些延迟,以便我们可以观看该过程。
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until(ExpectedConditions.AlertIsPresent());
我们等待直到警报对话框弹出。
var alert = driver.SwitchTo().Alert(); var text = alert.Text; Console.WriteLine(text);
我们检索警报的文本。
C# Selenium 提交表单
在下一个示例中,我们提交一个表单并检查响应文本。
using NUnit.Framework;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium;
using SeleniumExtras.WaitHelpers;
namespace SubmitForm;
public class Tests
{
private string url = "http://webcode.me/submit/";
private IWebDriver driver;
[SetUp]
public void Setup()
{
var eo = new EdgeOptions();
eo.AddArgument("headless");
driver = new EdgeDriver(eo);
}
[Test]
public void Test1()
{
driver.Url = url;
var form = driver.FindElement(By.TagName("form"));
var name = driver.FindElement(By.Name("name"));
var message = driver.FindElement(By.Name("message"));
name.SendKeys("John Doe");
message.SendKeys("Hello!");
form.Submit();
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5));
wait.Until(ExpectedConditions.UrlContains("message.php"));
var content = driver.FindElement(By.TagName("body")).Text;
// TestContext.Out.WriteLine(content);
Assert.That(content, Does.Contain("John Doe says: Hello!"));
}
[TearDown]
public void TearDown() => driver.Quit();
}
我们填写两个输入标签并提交表单。 我们检索响应消息。
var form = driver.FindElement(By.TagName("form"));
var name = driver.FindElement(By.Name("name"));
var message = driver.FindElement(By.Name("message"));
定位了三个标签:一个表单和两个输入框。
name.SendKeys("John Doe");
message.SendKeys("Hello!");
我们使用 SendKeys 将数据设置到输入框中。
form.Submit();
表单通过 Submit 提交。
var content = driver.FindElement(By.TagName("body")).Text;
我们从响应中获取消息。
Assert.That(content, Does.Contain("John Doe says: Hello!"));
断言检查预期返回值。
来源
在本文中,我们使用了 C# 中的 Selenium Web 测试框架。
作者
列出所有 C# 教程。