zoukankan      html  css  js  c++  java
  • C# selenium 实例-批量下载word文章

    感悟:

    1、用chrome好处之一就是:可以直接从开发工具中复制XPath,然后用在C#字符串前加上@,并将字符串当中每一个双引号都换成两个双引号即可,比较方便。

    2、用selenium的好处就是在frame间切换比较方便。

    场景:

    我用的OA就是frame套iframe,感觉稍微难点就是frame切换,但是找到button点击就可以下载word了。

    费了半天劲,虽然代码比较粗糙,但是终于可以从OA一次下载10篇文章了。

    代码:

            private void 批量处理待办ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                var driver = new OpenQA.Selenium.Chrome.ChromeDriver();
                driver.Navigate().GoToUrl("http://192.168.132.80/login/Login.jsp");
                driver.FindElement(By.Id("loginid")).SendKeys("admin");
                driver.FindElement(By.Id("userpassword")).SendKeys("1234");
                driver.FindElement(By.Id("login")).Click();
                WebDriverWait explicitWait = new WebDriverWait(driver, TimeSpan.FromSeconds(6));
                explicitWait.Until(d => d.FindElement(By.Id("mainFrame")));
                driver.SwitchTo().Frame("mainFrame");
                driver.FindElement(By.Id("more_655")).Click();//more_1560 ////*[@id="more_655"]
                driver.SwitchTo().Window(driver.WindowHandles[1]);
                System.Threading.Thread.Sleep(2000);
                ReadOnlyCollection<IWebElement> eles = driver.FindElements(By.XPath("//a[starts-with(@href,'javaScript:openFullWindowHaveBarForWFList')]"));
                //这里无需循环,点第一个即可,后续操作会自动刷新窗口
                eles[0].Click();
                System.Threading.Thread.Sleep(2000);
                driver.SwitchTo().Window(driver.WindowHandles[2]);
                //frame1:  还有bodyiframe
                driver.SwitchTo().Frame("bodyiframe");
                System.Threading.Thread.Sleep(2000);
                //frame2 页面中的编辑控件中,还有iframe  //*[@id="cke_contents_remark"]/iframe
                IWebElement frameED = driver.FindElement(By.XPath(@"//*[@id=""cke_contents_remark""]/iframe"));
                driver.SwitchTo().Frame(frameED);
                ///html
                driver.FindElement(By.XPath(@"/html")).SendKeys("同意");
                driver.SwitchTo().ParentFrame().SwitchTo().DefaultContent();
                driver.FindElement(By.XPath(@"//*[@id=""toolbarmenu""]/td[1]/table/tbody/tr[2]/td[2]/em/button")).Click();////*[@id="toolbarmenu"]/td[1]/table/tbody/tr[2]/td[2]/em/button
                System.Threading.Thread.Sleep(10000);
                driver.Quit();//在完成操作后,同时关闭浏览器窗口和Weddriver会话
    
            }
    
            private void 批量下载已阅新闻ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                var driver = new OpenQA.Selenium.Chrome.ChromeDriver();
                driver.Navigate().GoToUrl("http://192.168.132.80/login/Login.jsp");
                driver.FindElement(By.Id("loginid")).SendKeys("admin");
                driver.FindElement(By.Id("userpassword")).SendKeys("1234");
                driver.FindElement(By.Id("login")).Click();
                System.Threading.Thread.Sleep(1000);
                //*[@id="_ButtonCancel_0"]
                try
                {
                    driver.FindElement(By.XPath(@"//*[@id=""_ButtonCancel_0""]")).Click();
                }
                catch { }
                //主页 流程 
                driver.FindElement(By.XPath(@"//*[@id=""head""]/tbody/tr/td[2]/table/tbody/tr/td/div/div[1]/div[4]")).Click();
                System.Threading.Thread.Sleep(3000);
                //左侧已办 //*[@id="drillmenu"]/ul/li[3]/a
                driver.FindElement(By.XPath(@"//*[@id=""drillmenu""]/ul/li[3]")).Click();
                //进入frame1  mainFrame  /html/body/table/tbody/tr[2]/td[2]/table/tbody/tr[1]/td/table/tbody/tr[2]/td[1]/table/tbody/tr/td/div[3]/ul/li[7]
                driver.SwitchTo().Frame("mainFrame");
                System.Threading.Thread.Sleep(3000);
                ReadOnlyCollection<IWebElement> anchors = driver.FindElements(By.XPath(@"//a"));
                foreach (IWebElement a in anchors)
                {
                    if (a.Text.Contains("XX审批流程()"))
                    {
                        a.Click();
                        break;
                    }
                }
                //循环开始
                for (int k = 0; k < 11; k++)
                {
                    ////*[@id="_xTable"]/div[1]/div[2]/table/tbody/tr[1]/td[6]/a
                    ReadOnlyCollection<IWebElement> oo = driver.FindElements(By.XPath("//a[contains(@href,'javaScript:openFullWindowHaveBarForWFList')]"));
                    int count = oo.Count;
                    for (int i = 0; i < count ; i++)
                    {    
                        //开新窗口1
                        oo[i].Click();
                        System.Threading.Thread.Sleep(1000);
                        int j = i + 1;
                        //切换到新窗口
                        driver.SwitchTo().Window(driver.WindowHandles[1]);
                        System.Threading.Thread.Sleep(2000);
                        //还有bodyiframe
                        driver.SwitchTo().Frame("bodyiframe");
                        //下载按钮 //*[@id="selectDownload"]/nobr/button
                        // driver.FindElement(By.XPath(@"//button[@class=""btnFlowd""]")).Click();
                        driver.FindElement(By.TagName(@"button")).Click();
                        System.Threading.Thread.Sleep(5000);
                        //关闭下载页,即当前窗口
                        driver.Close();
                        //循环后要切回窗口0     因为关闭窗口1后,也没有自动回到窗口0的mainFrame中!且oo也无法循环了
                        driver.SwitchTo().Window(driver.WindowHandles[0]);
                        driver.SwitchTo().Frame("mainFrame");
                        oo = driver.FindElements(By.XPath("//a[contains(@href,'javaScript:openFullWindowHaveBarForWFList')]"));
                    }
                    //循环后切回窗口0,点下一页,
                    System.Threading.Thread.Sleep(8000);
                    driver.SwitchTo().Window(driver.WindowHandles[0]);
                    System.Threading.Thread.Sleep(2000);
                    driver.SwitchTo().Frame("mainFrame");
                    driver.FindElement(By.Id(@"-weaverTable-0-next")).Click();//*[@id="-weaverTable-0-next"]
                    System.Threading.Thread.Sleep(2000);
                }
                //循环结束            
                driver.Quit();//在完成操作后,同时关闭浏览器窗口和Weddriver会话
            }
  • 相关阅读:
    Windows Store App 主题动画
    Windows Store App 过渡动画
    Windows Store App 控件动画
    Windows Store App 近期访问列表
    Windows Store App 文件选取器
    Windows Store App 访问应用内部文件
    Windows Store App 用户库文件分组
    Windows Store App 获取文件及文件夹列表
    Windows Store App 用户库文件夹操作
    Windows Store App 用户库文件操作
  • 原文地址:https://www.cnblogs.com/pu369/p/12390920.html
Copyright © 2011-2022 走看看