我正在使用ASP.net,C#.net Intranet应用程序。 Selenium Webdriver测试应用程序。一个页面输入相同的名称,它显示警告消息“已经存在”(使用ajax的服务器端警报),我想用screenshort捕获该警报消息。
**Selenium webdriver version: 2.35.0.0
dotnet frame work: 4.0**
我正在写代码如下:
private static void SaveScreenShot(string screenshotFirstName)
{
var folderLocation = Environment.CurrentDirectory.Replace("\\Out", "") + "\\ScreenShot\\";
if (!Directory.Exists(folderLocation))
{
Directory.CreateDirectory(folderLocation);
}
var screenshot = ((ITakesScreenshot)WebDriver).GetScreenshot();
var filename = new StringBuilder(folderLocation);
filename.Append(screenshotFirstName);
filename.Append(DateTime.Now.ToString("dd-mm-yyyy HH_mm_ss"));
filename.Append(".png");
screenshot.SaveAsFile(filename.ToString(), System.Drawing.Imaging.ImageFormat.Png);
}
但它显示错误信息
"unexpected alert open
(Session info: chrome=31.0.1650.57)
(Driver info: chromedriver=2.3,platform=Windows NT 6.1 x86)"
请帮我 。它工作正常,没有警报信息。
试过让WebDriver忽略警报?
这可以通过以下方式完成:
var options = new InternetExplorerOptions();
options.UnexpectedAlertBehavior = OpenQA.Selenium.IE.InternetExplorerUnexpectedAlertBehavior.Ignore;
然后你就像这样启动WebDriver:
driver = new InternetExplorerDriver(options);
这就是我为IE做的。我不是在测试Chrome,但我认为Chrome有类似的方法。
关于OP的原始问题,“我想用截图捕获该警报消息”而不是忽略它。我有类似的情况,我需要一个“警报”的截图。
我基本上做了另一种方法,并使用System.Drawing.Graphics类使用CopyFromScreen截取屏幕截图。
并告诉它是否是一个“警报”以及我用于“警报”和非“警报”的截图方法。我刚刚创建了一个简单的布尔“检测”方法,告诉我是否存在“警报”。如果是,则返回true,如果不是,则返回false。
public static bool IsAlertPresent()
{
try
{
SeleniumDrivers.driver.SwitchTo().Alert();
return true;
}
catch (Exception)
{
return false;
}
}