我正在使用编码的UI平台进行自动化。如果测试用例失败,系统会自动进行屏幕截图,但一旦通过系统就无法捕获测试用例的截图。我在脚本中使用C#selenium命令。
环境
我尝试了以下事情。
在QTAgent32.exe.config()中启用日志跟踪。
LoggerOverrideState = HtmlLoggerState.AllActionSnapshot;但在LoggerOverrideState中收到错误。
[TestMethod]
public void demo2()
{
TestContext.WriteLine("Go to URL\n");
driver.Navigate().GoToUrl("http://www.test.com/");
driver.Manage().Window.Maximize();
// Enter username
TestContext.WriteLine("TestContext Writeline: test context \n");
js.ExecuteScript("arguments[0].setAttribute('value','username')", driver.FindElement(By.XPath("//*[@id='txtUsername']")));
//Enter password
js.ExecuteScript("arguments[0].setAttribute('value','password')", driver.FindElement(By.XPath("//*[@id='txtPassword']")));
// Click on the login Button
js.ExecuteScript("arguments[0].click();", driver.FindElement(By.XPath("//*[@id='btLoginNow']")));
答案 0 :(得分:1)
您可以在代码中添加以下内容,以便在任何给定点上截取屏幕截图:
Image SubmissionPic = UITestControl.Desktop.CaptureImage();
SubmissionPic.Save(@"C:\AutomatedScreenShots\SubmissionPage_" + TestContext.DataRow["Division"].ToString() + "_" + DateTime.Now.ToString("yyyy-MM-dd") + ".bmp");
注意:我上面使用的文件名格式可以更改为适合您需要的格式。我刚刚从我之前写的一个测试中提取了这段代码。
答案 1 :(得分:1)
在每个Testcase之后,您可以在Pass或Fail两种情况下调用Take Screen 恩。 假设成功登录的测试方法
@Test
public void ValidUserNamePasswordLoginTest() {
// Your code to do Assertion
}
现在在你的调用中使用@AfterMethod,它将在你的测试执行后立即执行
@AfterMethod
public void takeScreenShot(ITestResult testResult) throws IOException
{
if(testResult.getStatus() == ITestResult.SUCCESS)
{
File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("Screensot\\"+filename+".jpg"));
}
if(testResult.getStatus() == ITestResult.FAILURE)
{
File src = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("Screensot\\"+filename+".jpg"));
}
}
答案 2 :(得分:0)
难道你不能只使用[TestCleanup]
并使用该属性创建一个方法来截取屏幕截图,这样你总会得到一个截图并不重要的结果?那是你需要的吗?
所以,你可以在WebDriver设置上这样做:
public static IWebDriver SetUp()
{
private static IWebDriver _webDriver;
firingDriver = new EventFiringWebDriver(new ChromeDriver()); //Or whatever driver you want. You could also use the Activator class and create a Generic instance of a WebDriver.
var screenshot = new CustomScreenshot(firingDriver);
firingDriver.ScriptExecuted += screenshot.TakeScreenshotOnExecute;
_webDriver = firingDriver;
return _webDriver;
}
然后截图如下:
public class CustomScreenshot
{
private IWebDriver _webDriver;
public CustomScreenshot(IWebDriver webDriver)
{
_webDriver = webDriver;
}
public void TakeScreenshotOnExecute(object sender, WebDriverScriptEventArgs e)
{
var filePath = "Where you want to save the file.";
try
{
_webDriver.TakeScreenshot().SaveAsFile(filePath, ImageFormat.Png);
}
catch (Exception)
{
//DO something
}
}
}
答案 3 :(得分:-1)
关于浏览器窗口和屏幕截图的整个问题。基于唯一属性(例如,浏览器标题,日期时间戳等)命名它被证明是非常困难的,因为工具(CodedUI)不是我想要做的。我不会对我对这个工具的功能(缺乏)的看法进行编辑,但它绝对不像Selenium那样强大。所以我如何实现这一点是我从这里得到了一个高水平的“浏览器标题” - >并使用以下内容来拍摄&将屏幕截图存储在MyTestCleanup()方法中。
public void MyTestCleanup()
{
//Playback.PlaybackSettings.WaitForReadyLevel = WaitForReadyLevel.AllThreads;
//--------------------------------------------------------------------------------------------
DateTime time = DateTime.Now;
this.UIMap
var ttest = time.Millisecond.ToString();
var timeSecs = DateTime.Now.Millisecond;
var Window = this;
var ext = ".png";
Image screen = UITestControl.Desktop.CaptureImage();
string dirPath = string.Format("C\\:Users\\smaretick\\Desktop\\SCREENS\\{0}{1}", ttest, ext);
string dirPathN = string.Format("/C copy C:\\Users\\smaretick\\Desktop\\SCREENS\\CUIT.png C:\\Users\\smaretick\\Desktop\\SCREENS\\{0}{1}", ttest, ext);
string dirPathF = string.Format("/C copy C:\\Users\\smaretick\\Desktop\\SCREENS\\CUIT.png C:\\Users\\smaretick\\Desktop\\SCREENS\\{0}{1}{2}", Window, ttest, ext);
//string dirPathF = string.Format("/C copy C:\\Users\\smaretick\\Desktop\\SCREENS\\{0}{1}{2}", Window, ttest, ext);
UITestControl.Desktop.CaptureImage().Save("C:\\Users\\smaretick\\Desktop\\SCREENS\\CUIT.png");
string cmdF = string.Format("C\\:Users\\smaretick\\Desktop\\SCREENS\\{0}{1}", ttest, ext);
Process.Start("CMD.exe", dirPathF);
//--------------------------------------------------------------------------------------------
LogOut();
如果您需要更多帮助,请与我联系(scottmaretick51@gmail.com)