Bläddra i källkod

修改IPEasyUtility获取元素使用wait.Until方法

luocaiyang 11 månader sedan
förälder
incheckning
cbaf9ce8a4
3 ändrade filer med 98 tillägg och 169 borttagningar
  1. 93 157
      wispro.sp.utility/IPEasyUtility.cs
  2. 4 11
      wispro.sp.winClient/Form1.cs
  3. 1 1
      wispro.sp.winClient/appsettings.json

+ 93 - 157
wispro.sp.utility/IPEasyUtility.cs

@@ -110,7 +110,6 @@ namespace wispro.sp.utility
             });
         }
 
-
         static ReadOnlyCollection<IWebElement> waitGetElementsByName(WebDriverWait wait, string name, IWebElement parentElement = null)
         {
             return wait.Until((d) =>
@@ -417,10 +416,12 @@ namespace wispro.sp.utility
                     Login(driver, wait);
 
                     //点击顶部菜单栏中的报表管理菜单
-                    driver.FindElement(By.Name("970d33d5-c728-41b8-a060-4330610706b9")).Click();
+                    waitGetElementById(wait, "970d33d5-c728-41b8-a060-4330610706b9").Click();
+                    //driver.FindElement(By.Name("970d33d5-c728-41b8-a060-4330610706b9")).Click();
 
                     //点击左侧 自定义报表 菜单
-                    driver.FindElement(By.Name("642fa96f-1e1f-46fd-aaa4-cb461ee8df5b")).Click();
+                    waitGetElementByName(wait, "642fa96f-1e1f-46fd-aaa4-cb461ee8df5b").Click();
+                    //driver.FindElement(By.Name("642fa96f-1e1f-46fd-aaa4-cb461ee8df5b")).Click();
 
                     //切换到自定义报表Frame
                     driver.SwitchTo().Frame(1);
@@ -430,26 +431,12 @@ namespace wispro.sp.utility
 
                     //切换到弹出的导出报表窗口,点击导出按钮
                     driver.SwitchTo().DefaultContent();
-                    var ihg_export = driver.FindElement(By.Name("ihg_export"));
+                    var ihg_export = waitGetElementByName(wait, "ihg_export"); //driver.FindElement(By.Name("ihg_export"));
                     driver.SwitchTo().Frame(ihg_export);
-                    driver.FindElement(By.Id("btnSubmit")).Click();
-
-                    string strFilePath = System.IO.Path.Combine(strFileSavePath, filename);
+                    waitGetElementById(wait, "btnSubmit").Click();
+                    //driver.FindElement(By.Id("btnSubmit")).Click();
 
-
-                    while (true)
-                    {
-
-                        System.IO.FileInfo file = new System.IO.FileInfo(strFilePath);
-                        if (!file.Exists || file.Length == 0)
-                        {
-                            System.Threading.Thread.Sleep(5000);
-                        }
-                        else
-                        {
-                            break;
-                        }
-                    }
+                    WaitForFileDownload(strFileSavePath, filename, TimeSpan.FromMinutes(5));
                 }
                 catch (Exception ex)
                 {
@@ -511,9 +498,6 @@ namespace wispro.sp.utility
                 try
                 {
 
-                    driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);
-                    driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
-                    //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(100);
                     WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
 
                     Log($"{DateTime.Now}\tIWebDriver配置");
@@ -521,14 +505,16 @@ namespace wispro.sp.utility
                     driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(50);
                     driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(500);
 
+                    Login(driver, wait);
                     //点击顶部菜单栏中的报表管理菜单
                     Log($"{DateTime.Now}\t点击顶部菜单栏中的报表管理菜单");
-                    var reportMenu = driver.FindElement(By.Name("970d33d5-c728-41b8-a060-4330610706b9"));
+                    var reportMenu = waitGetElementByName(wait, "970d33d5-c728-41b8-a060-4330610706b9");
+                        //driver.FindElement(By.Name("970d33d5-c728-41b8-a060-4330610706b9"));
                     driver.ExecuteJavaScript("arguments[0].click();", reportMenu);
 
                     //点击左侧 自定义报表 菜单
                     Log($"{DateTime.Now}\t点击左侧 自定义报表 菜单");
-                    var customerReportMenu = driver.FindElement(By.Name("642fa96f-1e1f-46fd-aaa4-cb461ee8df5b"));
+                    var customerReportMenu = waitGetElementByName(wait, "642fa96f-1e1f-46fd-aaa4-cb461ee8df5b");
                     driver.ExecuteJavaScript("arguments[0].click();", customerReportMenu);
 
                     //切换到自定义报表Frame
@@ -536,43 +522,52 @@ namespace wispro.sp.utility
                     driver.SwitchTo().Frame(1);
 
                     Log($"{DateTime.Now}\t开始搜索报告");
-                    var inputSearch = driver.FindElement(By.Id("customizedList_TxtSheetSearchKey"));
+                    var inputSearch = waitGetElementById(wait,"customizedList_TxtSheetSearchKey");
 
                     Log($"{DateTime.Now}\t在搜索框中输入报告名称");
                     inputSearch.SendKeys(ReportName);
 
                     Log($"{DateTime.Now}\t点击搜索按钮");
-                    var btnSearch = driver.FindElement(By.ClassName("btn-search"));
+                    var btnSearch = waitGetElementByClassName(wait,"btn-search");
                     btnSearch.Click();
 
                     Log($"{DateTime.Now}\t选中报告");
-                    var reportRecord = driver.FindElement(By.XPath($"//td[contains(text(),'{ReportName}')]"));
+                    var reportRecord = wait.Until((d) =>
+                    {
+                        try
+                        {
+                            return d.FindElement(By.XPath($"//td[contains(text(),'{ReportName}')]"));
+                        }
+                        catch
+                        {
+                            return null;
+                        }
+                    }); 
                     reportRecord.Click();
 
-                    System.Threading.Thread.Sleep(1000);
-
                     if (isModifyDate)
                     {
                         Log($"{DateTime.Now}\t点击编辑");
-                        var btnEdit = driver.FindElement(By.ClassName("edit"));
+                        var btnEdit = waitGetElementByClassName(wait,"edit");
                         btnEdit.Click();
-                        System.Threading.Thread.Sleep(500);
 
                         Log($"{DateTime.Now}\t清除以选择的处理事项完成日条件");
 
                         try
                         {
-                            var doItemFinished = driver.FindElement(By.XPath("//span[contains(@objcvalue,'_date') and contains(@id,'ST;')]"));
+                            var doItemFinished = wait.Until((d) => {
+                                return d.FindElement(By.XPath("//span[contains(@objcvalue,'_date') and contains(@id,'ST;')]"));
+                            }); 
                             doItemFinished.Click();
-                            System.Threading.Thread.Sleep(500);
                         }
                         catch { }
 
                         Log($"{DateTime.Now}\t输入处理事项完成日期:开始日期");
-                        var startDate = driver.FindElement(By.XPath("//input[contains(@id,'dt_s_')]"));
+                        var startDate = wait.Until((d) => {
+                            return d.FindElement(By.XPath("//input[contains(@id,'dt_s_')]"));
+                        }); 
 
                         startDate.Click();
-                        System.Threading.Thread.Sleep(500);
 
                         startDate.SendKeys(new DateTime(DateTime.Now.AddMonths(-1).Year, DateTime.Now.AddMonths(-1).Month, 1).ToString("yyyy-MM-dd"));
 
@@ -590,27 +585,46 @@ namespace wispro.sp.utility
                             }
 
                         });
-                        //var endDate = driver.FindElement(By.XPath("//input[contains(@id,'dt_e_')]"));//.Id("dt_e_4F8FE88D-9040-45F1-9723-45699BCD4CAF"));
-                        System.Threading.Thread.Sleep(20000);
-                        //driver.ExecuteJavaScript("arguments[0].click();", endDate);
+                        
                         endDate.Click();
-                        System.Threading.Thread.Sleep(500);
                         endDate.SendKeys(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1).ToString("yyyy-MM-dd"));
 
                         Log($"{DateTime.Now}\t添加处理事项检索条件");
-                        var addDate = driver.FindElement(By.XPath("//a[contains(@onclick,'ReportSub.ConditionDTSelect')]"));
+                        var addDate = wait.Until((d) =>
+                        {
+                            try
+                            {
+                                return d.FindElement(By.XPath("//a[contains(@onclick,'ReportSub.ConditionDTSelect')]"));
+                            }
+                            catch
+                            {
+                                return null;
+                            }
+
+                        }); 
                         addDate.Click();
-                        System.Threading.Thread.Sleep(500);
+                        //System.Threading.Thread.Sleep(500);
 
                         Log($"{DateTime.Now}\t保存检索条件");
-                        var btnSave = driver.FindElement(By.Id("save"));
+                        var btnSave = waitGetElementById(wait, "save"); // driver.FindElement(By.Id("save"));
                         btnSave.Click();
-                        System.Threading.Thread.Sleep(3000);
+                        //System.Threading.Thread.Sleep(3000);
 
                     }
 
                     Log($"{DateTime.Now}\t点击导出Excel链接");
-                    var linkExport = driver.FindElement(By.XPath("//a[contains(@onclick,'-') and @class='tbexcel']"));
+                    var linkExport = wait.Until((d) =>
+                    {
+                        try
+                        {
+                            return d.FindElement(By.XPath("//a[contains(@onclick,'-') and @class='tbexcel']"));
+                        }
+                        catch
+                        {
+                            return null;
+                        }
+
+                    }); 
                     linkExport.Click();
 
 
@@ -619,15 +633,15 @@ namespace wispro.sp.utility
                     driver.SwitchTo().DefaultContent();
                     var ihg_export = driver.FindElement(By.Name("ihg_export"));
                     driver.SwitchTo().Frame(ihg_export);
-                    driver.FindElement(By.Id("btnSubmit")).Click();
+                    waitGetElementById(wait, "btnSubmit").Click();
 
                     //切换到弹出的下载报表界面,点击下载按钮
                     Log($"{DateTime.Now}\t切换到弹出的下载报表界面,点击下载按钮");
-                    System.Threading.Thread.Sleep(3000);
+                    //System.Threading.Thread.Sleep(3000);
                     driver.SwitchTo().DefaultContent();
-                    var frameDownload = driver.FindElement(By.Name("DownloadList"));
+                    var frameDownload = waitGetElementByName(wait,"DownloadList");
                     driver.SwitchTo().Frame(frameDownload);
-                    var firstTr = driver.FindElement(By.TagName("tr"));
+                    var firstTr = waitGetElementByTagName(wait,"tr");
                     var tdStatus = firstTr.FindElement(By.XPath("//td")).FindElement(By.XPath("following-sibling::td[4]"));
                     string strStatus = tdStatus.Text;
                     while (strStatus.Trim() != "导出成功!")
@@ -638,44 +652,24 @@ namespace wispro.sp.utility
                         }
 
                         System.Threading.Thread.Sleep(5000);
-                        firstTr = driver.FindElement(By.TagName("tr"));
+                        firstTr = waitGetElementByTagName(wait, "tr");
                         tdStatus = firstTr.FindElement(By.XPath("//td")).FindElement(By.XPath("following-sibling::td[4]"));
                         strStatus = tdStatus.Text;
                     }
 
                     Log($"{DateTime.Now}\t点击下载按钮下载文档");
-                    firstTr = driver.FindElement(By.TagName("tr"));
+                    firstTr = waitGetElementByTagName(wait, "tr");
                     firstTr.FindElement(By.XPath("//td/a[@title='下载']")).Click();
                     //System.Threading.Thread.Sleep(5000);
                     //btnDownload.Click();
                     
                     string strFilePath = System.IO.Path.Combine(strFileSavePath, $"{ReportName.Trim()}.xlsx");
-
-                    int iwaiting = 0;
-                    while (true)
-                    {
-
-                        System.IO.FileInfo file = new System.IO.FileInfo(strFilePath.Replace("~", "_"));
-                        if (!file.Exists || file.Length == 0)
-                        {
-                            System.Threading.Thread.Sleep(5000);
-
-                            iwaiting += 5000;
-
-                            if (iwaiting > 360000)
-                            {
-                                break;
-                            }
-                        }
-                        else
-                        {
-                            break;
-                        }
-                    }
-
+                    WaitForFileDownload(strFileSavePath, $"{ReportName.Trim()}.xlsx", TimeSpan.FromMinutes(5));
+                    
                     //删除下载记录
                     Log($"{DateTime.Now}\t删除下载记录");
-                    firstTr = driver.FindElement(By.TagName("tr"));
+                    firstTr = waitGetElementByTagName(wait, "tr");// driver.FindElement(By.TagName("tr"));
+
                     firstTr.FindElement(By.XPath("//td/a[@title='删除']")).Click();
 
                     //System.IO.FileInfo file = new System.IO.FileInfo(strFilePath.Replace("~", "_"));
@@ -712,68 +706,45 @@ namespace wispro.sp.utility
         public static dynamic GetCaseInfo(string caseNo)
         {
             dynamic retObject = new ExpandoObject();
-
             retObject.CaseNo = caseNo.Trim();
 
             using (IWebDriver driver = CreateChromeDriver())
             {
                 try
                 {
+                    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
                     driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
                     driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
 
-                    //进入登录界面
-                    driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
-
-                    //输入用户名和密码
-                    
-                    driver.FindElement(By.Id("txtUser")).SendKeys(Account);
-                    driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
-
-                    //点击登录按钮
-                    driver.FindElement(By.Id("btnLogin")).Click();
-
-                    //关闭提示遮罩层
-                    driver.FindElement(By.Id("jpwClose")).Click();
-
-                    try
-                    {
-                        var okBtn = driver.FindElement(By.ClassName("ui_state_highlight"));
-                        if (okBtn != null && okBtn.TagName == "input")
-                        {
-                            okBtn.Click();
-                        }
-                    }
-                    catch { }
-                    
+                    Login(driver, wait);
 
                     //点击顶部菜单栏中的案件管理菜单
-                    driver.FindElement(By.Name("71A7CC35-F597-40E1-9FEF-BE622A3A3B63")).Click();
+                    waitGetElementByName(wait, "71A7CC35-F597-40E1-9FEF-BE622A3A3B63").Click();
 
                     //点击左侧 查询 菜单
-                    driver.FindElement(By.Name("c3266ab3-521a-4815-8aaf-7dd0bc5a76af")).Click();
+                    waitGetElementByName(wait, "c3266ab3-521a-4815-8aaf-7dd0bc5a76af").Click();
 
                     //切换到自定义报表Frame
                     driver.SwitchTo().Frame(1);
 
-                    var inputSearch = driver.FindElement(By.Id("case_volume"));
+                    var inputSearch = waitGetElementById(wait,"case_volume");
                     inputSearch.SendKeys(caseNo.Trim());
 
-                    var btnSearch = driver.FindElement(By.Id("btn_Search"));
+                    var btnSearch = waitGetElementById(wait, "btn_Search");
                     btnSearch.Click();
 
-                    var caseLink = driver.FindElement(By.XPath($"//a[contains(text(),'{caseNo}')]"));
+                    var caseLink = wait.Until((d) => { 
+                        return d.FindElement(By.XPath($"//a[contains(text(),'{caseNo}')]"));
+                    }); 
                     caseLink.Click();
 
                     driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
 
-                    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
                     //等待页面上ID属性值为submitButton的元素加载完成
                     IWebElement myElement = wait.Until((d) =>
                     {
                         try
                         {
-                            driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
                             return d.FindElement(By.Id("libase"));
                         }
                         catch {
@@ -792,7 +763,6 @@ namespace wispro.sp.utility
                     retObject.CaseState = GetSelectText(driver.FindElement(By.Id("p_case_info__case_status_id")));
                     retObject.ApplicationType = GetSelectText(driver.FindElement(By.Id("p_case_info__apply_type_id")));
 
-
                     retObject.CaseType = driver.FindElement(By.Id("p_case_info__case_type_id")).GetAttribute("value");  //案件类型
                     retObject.EntrustingDate = driver.FindElement(By.Id("p_case_info__charge_date")).GetAttribute("value"); //委案日期
                     retObject.CaseMemo = driver.FindElement(By.Id("p_case_info__remark")).GetAttribute("value");    //案件备注
@@ -830,50 +800,24 @@ namespace wispro.sp.utility
                 {
                     try
                     {
+                        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
                         driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(20);
                         driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(100);
-                        //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(100);
-                        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
-
-                        //进入登录界面
-                        driver.Navigate().GoToUrl(ConfigHelper.GetSectionValue("IPEasySetting:IPEasyWeb"));
-
-                        //输入用户名和密码
-                       
-                        driver.FindElement(By.Id("txtUser")).SendKeys(Account);
-                        driver.FindElement(By.Id("txtPwd")).SendKeys(Password);
-
-                        //点击登录按钮
-                        driver.FindElement(By.Id("btnLogin")).Click();
-
-                        //关闭提示遮罩层
-                        driver.FindElement(By.Id("jpwClose")).Click();
-
-                        //try
-                        //{
-                        //    var okBtn = driver.FindElement(By.ClassName("ui_state_highlight"));
-                        //    if (okBtn != null && okBtn.TagName == "input")
-                        //    {
-                        //        okBtn.Click();
-                        //    }
-                        //}
-                        //catch { }
+                        
+                        Login(driver,wait);
 
                         //点击顶部菜单栏中的案件管理菜单
-                        driver.FindElement(By.Name("71A7CC35-F597-40E1-9FEF-BE622A3A3B63")).Click();
-                        System.Threading.Thread.Sleep(500);
+                        waitGetElementByName(wait,"71A7CC35-F597-40E1-9FEF-BE622A3A3B63").Click();
 
                         //点击左侧 查询 菜单
-                        driver.FindElement(By.Name("c3266ab3-521a-4815-8aaf-7dd0bc5a76af")).Click();
+                        waitGetElementByName(wait, "c3266ab3-521a-4815-8aaf-7dd0bc5a76af").Click();
 
-
-                        //System.Threading.Thread.Sleep(500);
+                        driver.SwitchTo().Frame(1);
                         var inputSearch = wait.Until((d) =>
                         {
                             try
                             {
                                 //切换到自定义报表Frame
-                                d.SwitchTo().Frame(1);
                                 return d.FindElement(By.Id("case_volume"));
                             }
                             catch
@@ -882,13 +826,9 @@ namespace wispro.sp.utility
                             }
 
                         });
-                        //切换到自定义报表Frame
-                        //driver.SwitchTo().Frame(1);
-
-                        //var inputSearch = driver.FindElement(By.Id("case_volume"));
                         inputSearch.SendKeys(caseNo.Trim());
 
-                        var btnSearch = driver.FindElement(By.Id("btn_Search"));
+                        var btnSearch = waitGetElementById(wait,"btn_Search");
                         btnSearch.Click();
 
                         var caseLink = wait.Until((d) =>
@@ -903,21 +843,21 @@ namespace wispro.sp.utility
                             }
 
                         });
-                        //System.Threading.Thread.Sleep(500);
-
-                        //var caseLink = driver.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
+                        caseLink = driver.FindElement(By.XPath($"//a[normalize-space()='{caseNo.Trim()}']"));
                         caseLink.Click();
-                        System.Threading.Thread.Sleep(500);
 
                         driver.SwitchTo().ParentFrame().SwitchTo().Frame(2);
                         IWebElement temDoItemLink = null;
                         string temFinishedDate = "";
                         foreach (string doItemName in doItemNames)
                         {
-                            var DoItemLinks = driver.FindElements(By.XPath($"//td[@colname='ctrl_proc'][normalize-space()='{doItemName}']"));
+                            var DoItemLinks = wait.Until((d) =>
+                            {
+                                return d.FindElements(By.XPath($"//td[@colname='ctrl_proc'][normalize-space()='{doItemName}']"));
+                            });
+                                
                             if (DoItemLinks.Count > 0)
                             {
-
                                 var DoItemLink = DoItemLinks[DoItemLinks.Count - 1];
 
                                 if (string.IsNullOrEmpty(temFinishedDate))
@@ -935,9 +875,6 @@ namespace wispro.sp.utility
                                     }
                                 }
 
-
-                                //new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(DoItemLink)).Click();
-
                             }
 
                         }
@@ -956,7 +893,6 @@ namespace wispro.sp.utility
                             retObject.DoItem = temDoItemLink.Text;
 
                             //temDoItemLink = DoItemLink;
-                            System.Threading.Thread.Sleep(4000);
                             temDoItemLink.Click();
                         }
                         else
@@ -1000,7 +936,7 @@ namespace wispro.sp.utility
                             }
 
                         });
-                        //System.Threading.Thread.Sleep(500);
+
                         retObject.CaseName = p_case_info__case_name.GetAttribute("value");  //案件名称
                         retObject.CustomerName = driver.FindElement(By.Id("p_case_info__customer_id")).GetAttribute("value");  //客户名称
                         retObject.BusinessType = driver.FindElement(By.Id("p_case_info__business_type_id")).GetAttribute("value");     //业务类型

+ 4 - 11
wispro.sp.winClient/Form1.cs

@@ -80,6 +80,8 @@ namespace wispro.sp.winClient
         }
         private void button2_Click(object sender, EventArgs e)
         {
+            DataTable dt = IPEasyUtility.DownloadReport("每月绩效统计--上个月递交完成案件", true);
+            return;
             //var retObj = IPEasyUtility.DownloadCaseFiles("S2418519-测试卷");
             var retObj1 = IPEasyUtility.DownloadCaseFiles("S2435631-测试卷-压缩包");
 
@@ -116,18 +118,9 @@ namespace wispro.sp.winClient
                 }
             }
 
-            return;
-            DataTable dt = IPEasyUtility.DownloadReport("每月绩效统计--上个月递交完成案件", true);
-            if(dt !=null)
-            {
-                MessageBox.Show($"获取到数据:{dt.Rows.Count}行!");
-            }
-            else
-            {
-                MessageBox.Show($"获取到数据失败!");
-            }
             
-            return;
+            
+            
             OpenFileDialog ofd = new OpenFileDialog()
             {
                 Multiselect = false,

+ 1 - 1
wispro.sp.winClient/appsettings.json

@@ -4,7 +4,7 @@
     "isHeadless": "false",
     "Account": "caiyangl",
     "Password": "j)wx*lier*@3",
-    "ChormeDriverPath": "D:\\source\\repos\\StaffPerformance\\packages\\ChormeDriver\\130.0.6723.69",
+    "ChormeDriverPath": "E:\\source\\repos\\StaffPerformance\\packages\\ChormeDriver\\130.0.6723.91",
     "ScheduleSetting": "00 55 10 3 * ? *",
     "IPEasyWeb": "http://47.106.94.35/Login.aspx"
   },