如何在 C# 中使用 Selenium?
Posted
技术标签:
【中文标题】如何在 C# 中使用 Selenium?【英文标题】:How do I use Selenium in C#? 【发布时间】:2011-09-14 02:42:19 【问题描述】:Selenium.
我下载了 C# 客户端驱动程序和 IDE。我设法记录了一些测试并成功地从 IDE 运行它们。但现在我想使用 C# 来做到这一点。我将所有相关的 DLL 文件 (Firefox) 添加到项目中,但我没有 Selenium
类。一些 Hello, World! 会很好。
【问题讨论】:
我想你看过这个? seleniumhq.org/docs/… 你试过谷歌搜索吗?当然,有很多——也许是大部分? - 与 Java 相关的 Selenium 内容,但肯定也有基本的 C#/VS/Selenium 教程可以回答您的问题。 我下载了 C# 驱动程序和 IDE -> IDE 是什么意思?它是用来编写 C# selenium 代码的吗?比如 Visual Studio。或者,是 Selenium IDE? 猜猜你将使用 Visual Studio 编写 Selenium C# 代码并管理代码和构建。 【参考方案1】:来自Selenium Documentation:
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
class GoogleSuggest
static void Main(string[] args)
IWebDriver driver = new FirefoxDriver();
//Notice navigation is slightly different than the Java version
//This is because 'get' is a keyword in C#
driver.Navigate().GoToUrl("http://www.google.com/");
IWebElement query = driver.FindElement(By.Name("q"));
query.SendKeys("Cheese");
System.Console.WriteLine("Page title is: " + driver.Title);
driver.Quit();
【讨论】:
【参考方案2】:安装 NuGet 数据包管理器
下载链接:https://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
创建一个 C# 控制台应用程序
右键单击项目 → 管理 NuGet 包。
搜索“Selenium”并安装包Selenium.Support
。
你现在已经完成了,你可以开始编写你的代码了 :)
对于带有Internet Explorer 的代码,请下载 Internet Explorer 驱动程序。
链接:http://selenium-release.storage.googleapis.com/index.html
打开 2.45 作为其最新版本 下载 IEDriverServer_x64_2.45.0.zip 或 IEDriverServer_Win32_2.45.0.zip 解压 .exe 文件并将其粘贴到任意位置,例如 C:\ 记住路径以供进一步使用。整体参考链接:Selenium 2.0 WebDriver with Visual Studio, C#, & IE – Getting Started
我的示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.IE;
namespace Selenium_HelloWorld
class Program
static void Main(string[] args)
IWebDriver driver = new InternetExplorerDriver("C:\\");
driver.Navigate().GoToUrl("http://108.178.174.137");
driver.Manage().Window.Maximize();
driver.FindElement(By.Id("inputName")).SendKeys("apatra");
driver.FindElement(By.Id("inputPassword")).SendKeys("asd");
driver.FindElement(By.Name("DoLogin")).Click();
string output = driver.FindElement( By.XPath(".//*[@id='tab-general']/div/div[2]/div[1]/div[2]/div/strong")).Text;
if (output != null )
Console.WriteLine("Test Passed :) ");
else
Console.WriteLine("Test Failed");
【讨论】:
【参考方案3】:结合 C# 设置 Selenium IDE 是使用 Visual Studio Express。您可以使用 NUnit 作为测试框架。以下链接为您提供更多详细信息。看来您已经设置了第一个链接中解释的内容。因此,请查看第二个链接以获取有关如何创建基本脚本的更多详细信息。
How to setup C#, NUnit and Selenium client drivers on Visual Studio Express for Automated tests
Creating a basic Selenium web driver test case using NUnit and C#
来自上述博文的示例代码:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
// Step a
using OpenQA.Selenium;
using OpenQA.Selenium.Support;
using OpenQA.Selenium.Firefox;
using NUnit.Framework;
namespace NUnitSelenium
[TestFixture]
public class UnitTest1
[SetUp]
public void SetupTest()
[Test]
public void Test_OpeningHomePage()
// Step b - Initiating webdriver
IWebDriver driver = new FirefoxDriver();
// Step c: Making driver to navigate
driver.Navigate().GoToUrl("http://docs.seleniumhq.org/");
// Step d
IWebElement myLink = driver.FindElement(By.LinkText("Download"));
myLink.Click();
// Step e
driver.Quit();
)
【讨论】:
多余的“)”是干什么用的?【参考方案4】:我很难找到的一件事是如何在 C# 中使用 PageFactory。特别是对于多个 IWebElements。如果你想使用 PageFactory,这里有几个例子。 Source: PageFactory.cs
要声明一个 HTML WebElement,请在类文件中使用它。
private const string _ID ="CommonIdinHTML";
[FindsBy(How = How.Id, Using = _ID)]
private IList<IWebElement> _MultipleResultsByID;
private const string _ID2 ="IdOfElement";
[FindsBy(How = How.Id, Using = _ID2)]
private IWebElement _ResultById;
不要忘记在构造函数中实例化页面对象元素。
public MyClass()
PageFactory.InitElements(driver, this);
现在您可以在任何文件或方法中访问该元素。此外,如果我们愿意,我们可以从这些元素中获取相对路径。我更喜欢 pagefactory,因为:
我不需要直接使用 driver.FindElement(By.Id("id")) 调用驱动程序 对象是lazy initialized我用它来编写自己的等待元素方法,WebElements 包装器只访问我需要向测试脚本公开的内容,并帮助保持干净。
如果您拥有动态(自动生成的)网络元素(例如数据列表),这会让生活变得更轻松。您只需创建一个包装器,该包装器将采用 IWebElements 并添加方法来查找您要查找的元素。
【讨论】:
【参考方案5】:FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(@"D:\DownloadeSampleCode\WordpressAutomation\WordpressAutomation\Selenium", "geckodriver.exe");
service.Port = 64444;
service.FirefoxBinaryPath = @"C:\Program Files (x86)\Mozilla Firefox\firefox.exe";
Instance = new FirefoxDriver(service);
【讨论】:
请解释你的答案。这里不鼓励仅使用代码的答案,因为它们不教任何东西——它们只是鼓励复制粘贴编码。您可以使用答案下方的编辑链接添加其他信息。谢谢!【参考方案6】:C#
首先,从Selenium IDE 下载 Selenium IDE for Firefox。
使用并试用它,测试场景,记录步骤,然后根据您的要求将其导出为 C# 或 Java 项目。
代码文件包含如下代码:
using System;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
// Add this name space to access WebDriverWait
using OpenQA.Selenium.Support.UI;
namespace MyTest
[TestClass]
public class MyTest
public static IWebDriver Driver = null;
// Use TestInitialize to run code before running each test
[TestInitialize()]
public void MyTestInitialize()
try
string path = Path.GetFullPath(""); // Copy the Chrome driver to the debug
// folder in the bin or set path accordingly
Driver = new ChromeDriver(path);
catch (Exception ex)
string error = ex.Message;
// Use TestCleanup to run code after each test has run
[TestCleanup()]
public void MyCleanup()
Driver.Quit();
[TestMethod]
public void MyTestMethod()
try
string url = "http://www.google.com";
Driver.Navigate().GoToUrl(url);
IWait<IWebDriver> wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30.00)); // Wait in Selenium
wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath(@"//*[@id='lst - ib']")));
var txtBox = Driver.FindElement(By.XPath(@"//*[@id='lst - ib']"));
txtBox.SendKeys("Google Office");
var btnSearch = Driver.FindElement(By.XPath("//*[@id='tsf']/div[2]/div[3]/center/input[1]"));
btnSearch.Click();
System.Threading.Thread.Sleep(5000);
catch (Exception ex)
string error = ex.Message;
您需要从here 获取 Chrome 驱动程序。
您需要为 Selenium NuGet 网站获取 NuGet 包和必要的 DLL 文件。
您需要从 Selenium 文档网站了解 Selenium 的基础知识。
就是这样……
【讨论】:
【参考方案7】:using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.UI;
using SeleniumAutomationFramework.CommonMethods;
using System.Text;
[TestClass]
public class SampleInCSharp
public static IWebDriver driver = Browser.CreateWebDriver(BrowserType.chrome);
[TestMethod]
public void SampleMethodCSharp()
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5));
driver.Url = "http://www.store.demoqa.com";
driver.Manage().Window.Maximize();
driver.FindElement(By.XPath(".//*[@id='account']/a")).Click();
driver.FindElement(By.Id("log")).SendKeys("kalyan");
driver.FindElement(By.Id("pwd")).SendKeys("kalyan");
driver.FindElement(By.Id("login")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement myDynamicElement = wait.Until<IWebElement>(d => d.FindElement(By.LinkText("Log out")));
Actions builder = new Actions(driver);
builder.MoveToElement(driver.FindElement(By.XPath(".//*[@id='menu-item-33']/a"))).Build().Perform();
driver.FindElement(By.XPath(".//*[@id='menu-item-37']/a")).Click();
driver.FindElement(By.ClassName("wpsc_buy_button")).Click();
driver.FindElement(By.XPath(".//*[@id='fancy_notification_content']/a[1]")).Click();
driver.FindElement(By.Name("quantity")).Clear();
driver.FindElement(By.Name("quantity")).SendKeys("10");
driver.FindElement(By.XPath("//*[@id='checkout_page_container']/div[1]/a/span")).Click();
driver.FindElement(By.ClassName("account_icon")).Click();
driver.FindElement(By.LinkText("Log out")).Click();
driver.Close();
【讨论】:
【参考方案8】:-
您需要安装 Microsoft Visual Studio 社区版
创建一个新项目作为 C# 的 Test Project
从 NuGet 包管理器添加 Selenium 引用。然后你就准备好了。
创建一个新类并使用 [Test Class] 和 [Test Method] 注释来运行您的脚本
您可以参考Run Selenium C# | Setup Selenium and C# | Configure Selenium C#了解更多详情。
【讨论】:
【参考方案9】:将所有必需的 C# 库添加到引用中的项目后,请使用以下代码。
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
namespace SeleniumWithCsharp
class Test
public IWebDriver driver;
public void openGoogle()
// creating Browser Instance
driver = new FirefoxDriver();
//Maximizing the Browser
driver.Manage().Window.Maximize();
// Opening the URL
driver.Navigate().GoToUrl("http://google.com");
driver.FindElement(By.Id("lst-ib")).SendKeys("Hello World");
driver.FindElement(By.Name("btnG")).Click();
static void Main()
Test test = new Test();
test.openGoogle();
【讨论】:
以上是关于如何在 C# 中使用 Selenium?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 在 Selenium WebDriver (Selenium 2) 中最大化浏览器窗口?
如何在 C# 中使用 Selenium 驱动程序向上/向下滚动页面?
如何错误处理 Selenium 无法单击元素,因为其他元素在 C# 中遮挡了它? [复制]