using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using System;
using System.Threading;
using System.Windows.Forms;
namespace OA_OT1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnStart_Click(object sender, EventArgs e)
{
string baseUrl = "http://192.168.0.1/";
string url = $"{baseUrl}login.aspx";
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.AddArguments("headless");//隐藏google
//IWebDriver webDriver = new ChromeDriver(chromeOptions);
IWebDriver webDriver = new ChromeDriver();
webDriver.Navigate().GoToUrl(url);
webDriver.Manage().Window.Maximize();
// 根据元素名称清除元素文本
webDriver.FindElement(By.Name("txtUserNo")).Clear();
webDriver.FindElement(By.Name("txtPassword")).Clear();
// 用户名和密码赋值
webDriver.FindElement(By.Name("txtUserNo")).SendKeys("DL00000");
webDriver.FindElement(By.Name("txtPassword")).SendKeys("12345678");
// 点击login按钮
webDriver.FindElement(By.Name("btnLogin")).Click();
// 根据超链接文字找到超链接
IWebElement link = webDriver.FindElement(By.LinkText("XX一览"));
// 点击超链接
link.Click();
// 切换frame
webDriver = webDriver.SwitchTo().Frame(webDriver.FindElement(By.Id("iframeMain")));
// 声明两个select
SelectElement selDepartment;
SelectElement selProject;
// 根据ID找到第一个select
IWebElement department = webDriver.FindElement(By.Name("ctl00$main$dropDepartment"));
selDepartment = new SelectElement(department);
// 取得select的option个数
int departCnt = selDepartment.Options.Count;
// 选择第一个
selDepartment.SelectByIndex(1);
Thread.Sleep(2000);
// 找到第二个select(这个select的内容是根据第一个select选择的内容填充的,即二级联动)
IWebElement project = webDriver.FindElement(By.Name("ctl00$main$dropItemGroup"));
selProject = new SelectElement(project);
// 取得select的option个数
int projCnt = selProject.Options.Count;
/*
* 上面为什么要取得两个select的option个数?
* 因为在循环里取控件,当页面刷新后,控件已经变了,但是变量还是刷新前的内容,这样会报错
*
* 执行下面的代码,每次都重新取控件,程序可正常执行
*
*/
for (int i = 1; i < 2; i++)
{
department = webDriver.FindElement(By.Name("ctl00$main$dropDepartment"));
selDepartment = new SelectElement(department);
selDepartment.SelectByIndex(i);
Thread.Sleep(2000);
for (int k = 1; k < projCnt; k++)
{
project = webDriver.FindElement(By.Name("ctl00$main$dropItemGroup"));
selProject = new SelectElement(project);
selProject.SelectByIndex(k);
webDriver.FindElement(By.XPath("//input[@id="ctl00_main_btnSelect"]")).Click();
Thread.Sleep(2000);
// 下面的代码是用HtmlAgilityPack取得需要的内容
var html = webDriver.PageSource;
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
//加载文档对象模型
doc.LoadHtml(html);
//获取到百度按钮节点 把我们刚刚复制的XPath粘贴上去
HtmlAgilityPack.HtmlNode htmlnode = doc.DocumentNode.SelectSingleNode("//input[@id='ctl00_main_btnSelect']");
string value = htmlnode.GetAttributeValue("value", "");
htmlnode = doc.DocumentNode.SelectSingleNode("//span[@id='ctl00_main_labTotal']");
value = htmlnode.InnerText;
}
}
}
}
}