概述
Selenium是一款免费的分布式的自动化测试工具,支持多种开发语言,无论是C、 java、ruby、python、或是C# ,你都可以通过selenium完成自动化测试。本文以一个简单的小例子,简述C# 利用Selenium进行浏览器的模拟操作,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点
要实现本例的功能,除了要掌握Html ,JavaScript,CSS等基础知识,还涉及以下知识点:
log4net:主要用于日志的记录和存储,本例采用log4net进行日志记录,便于过程跟踪和问题排查,关于log4net的配置和介绍,之前已有说明,本文不做赘述。
Queue:队列,先进先出模式,本文主要用于将日志信息保存于队列中,然后再显示到页面上,其中Enqueue用于添加内容到结尾处,Dequeue用于返回并移除一个位置的对象。
IWebDriver:浏览器驱动接口,所有的关于浏览器的操作都可以通过此接口进行,不同浏览器有不同的实现类,如:IE浏览器(InternetExplorerDriver)Chrome浏览器(ChromeDriver)等。
BackgroundWorker:后台工作线程,区别于主线程,通过事件触发不同的状态。
Selenium安装
本例开发工具为VS2019,通过NuGet进行需要的软件包的安装与管理,如下所示:
示例效果图
本例采用Chrome浏览器,用于监控某一个网站并获取相应内容,如下所示:
Selenium示例介绍
定义一个webDriver,如下所示:
1 //谷歌浏览器2 ChromeOptions options = new ChromeOptions();3 this.driver = new ChromeDriver(options);
通过ID获取元素并填充内容和触发事件,如下所示:
1 this.driver.FindElement(By.Id("email")).SendKeys(username);2 this.driver.FindElement(By.Id("password")).SendKeys(password);3 //# 7. 点击登录按钮4 this.driver.FindElement(By.Id("sign-in")).Click();
通过XPath获取元素,如下所示:
1 string xpath1 = "//div[@class=\"product-list\"]/div[@class=\"product\"]/div[@class=\"price-and-detail\"]/div[@class=\"price\"]/span[@class=\"noStock\"]";2 string txt = this.driver.FindElement(By.XPath(xpath1)).Text;
核心代码
主要的核心代码,就是浏览器的元素定位查找和事件触发,如下所示:
1 using OpenQA.Selenium; 2 using OpenQA.Selenium.IE; 3 using OpenQA.Selenium.Chrome; 4 using System; 5 using System.Collections.Generic; 6 using System.Linq; 7 using System.Text; 8 using System.Threading; 9 using System.Threading.Tasks; 10 11 namespace AiSmoking.Core 12 {
13 public class Smoking 14 {
15 /// 16 /// 是否正在运行 17 /// 18 private bool running = false; 19 20 /// 21 /// 驱动 22 /// 23 private IWebDriver driver = null; 24 25 26 /// 27 /// # 无货 28 /// 29 private string no_stock = "Currently Out of Stock"; 30 31 32 /// 33 /// # 线程等待秒数 34 /// 35 private int wait_sec = 2; 36 37 private Dictionary<string, string> cfg_info; 38 39 private string work_path = string.Empty; 40 41 /// 42 /// 构造函数 43 /// 44 public Smoking() 45