我有一个代码,可以在继续进行页面截图之前先检查元素,它不会停止运行,但是如果找不到该元素,则会抛出运行时异常。
我的问题是,无论我使用什么元素,它总是会引发异常,我在想这是因为驱动程序专注于弹出窗口而不是实际页面,这就是为什么它没有从背景。
所以我想我需要在返回弹出窗口之前将焦点恢复到主页上,知道怎么做吗?
检查元素的代码:
//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);
}
}