zoukankan      html  css  js  c++  java
  • C# Selenium+HtmlAgilityPack 例子

    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;
                    }
                }
            }
        }
    }
    
  • 相关阅读:
    vue2.0 动画
    I. 对缓存进行处理
    G. 【案例】Ajax实现无刷新分页效果
    H. Ajax对XML信息的接收与处理
    F. 异步同步请求
    D. 接收服务器端返回的信息
    E. 请求GET和POST的不同
    C. 发起对服务器的请求
    B. 创建Ajax对象
    A. AJAX介绍
  • 原文地址:https://www.cnblogs.com/lost0/p/15504845.html
Copyright © 2011-2022 走看看