“ NoSuchElementException”将焦点从弹出窗口切换到后台

时间:2020-06-02 23:01:06

标签: c# html selenium dom

我有一个代码,可以在继续进行页面截图之前先检查元素,它不会停止运行,但是如果找不到该元素,则会抛出运行时异常。

我的问题是,无论我使用什么元素,它总是会引发异常,我在想这是因为驱动程序专注于弹出窗口而不是实际页面,这就是为什么它没有从背景。

所以我想我需要在返回弹出窗口之前将焦点恢复到主页上,知道怎么做吗?

检查元素的代码:

                //Open bi6 Report - Payroll Dashboard
                ieDriver.Navigate().GoToUrl(appConfig["Bi6Page"]);
                Thread.Sleep(45000);
                wait.Until(d => ((IJavaScriptExecutor)d).ExecuteScript("return document.readyState").Equals("complete"));
                try
                {
                    IWebElement bi6_reportHolder = ieDriver.FindElement(By.Id("reportContainer")); //change
                    //Check if pop-up is present
                    location = appConfig["SaveScreenShotLocation"] + "bi6_ScreenShot.png";
                    screenshotLocations.Add(location);
                    CheckPopUpAndTakeScreenShot(ieDriver, executor, location);

                }
                catch (System.Exception e)
                {
                    Console.WriteLine("Error while opening bi6 Report");
                    Console.WriteLine(e.Message);
                }

用于关闭弹出窗口并截图的功能:

 public static void CheckPopUpAndTakeScreenShot(IWebDriver ieDriver, IJavaScriptExecutor executor, string location)
        {
            bool popupPresent = true;

            try
            {
                IWebElement popUpModal = ieDriver.FindElement(By.Id("issue-protocol-notice-modal"));
            }
            catch (System.Exception e)
            {
                if (e.Message == @"Unable to find element with css selector == #issue\-protocol\-notice\-modal")//No Popup 
                    popupPresent = false;
            }
            finally
            {
                if (popupPresent)
                {
                    //Close Pop-up
                    IWebElement popUpDiv = ieDriver.FindElement(By.ClassName("button-cancel"));
                    executor.ExecuteScript("arguments[0].click();", popUpDiv);
                }
                //ORIGINAL SCREENSHOT
                Screenshot screenShot = ((ITakesScreenshot)ieDriver).GetScreenshot();
                screenShot.SaveAsFile(location, ScreenshotImageFormat.Png);


            }
        }

0 个答案:

没有答案
相关问题