感悟:
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("用户名"); driver.FindElement(By.Id("userpassword")).SendKeys("密码"); 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; } } System.Threading.Thread.Sleep(3000); ////*[@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‘)]")); for (int i = 0; i <oo.Count; i++) { //循环后切回当前document driver.SwitchTo().Window(driver.WindowHandles[0]); driver.SwitchTo().Frame("mainFrame"); //开新窗口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(2000); driver.Close(); } System.Threading.Thread.Sleep(8000); driver.Quit();//在完成操作后,同时关闭浏览器窗口和Weddriver会话 }
原文:https://www.cnblogs.com/pu369/p/12390920.html