编码的UI:无法捕获通过测试用例的屏幕截图

时间:2015-01-12 10:12:52

标签: c# selenium logging coded-ui-tests trace

我正在使用编码的UI平台进行自动化。如果测试用例失败,系统会自动进行屏幕截图,但一旦通过系统就无法捕获测试用例的截图。我在脚本中使用C#selenium命令。

环境

  • Visual studio premium 2012。

我尝试了以下事情。

  1. 在QTAgent32.exe.config()中启用日志跟踪。

  2. 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']")));
    

4 个答案:

答案 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)