如果测试执行失败,我无法设置将屏幕截图附加到TestResult的正确方法
该框架是使用Visual Studio 2015 Selenium v3.141.0建立的。
在传递过程中,我尝试将TestContext作为参数传递给EventFiringWebDriver,因此我可以使用EventFiringWebDriver.ExceptionThrown Event附加屏幕截图
但是我不喜欢传递TestContext,因为该框架在包含所有页面对象的Selenium程序集和包含所有测试用例的Tests程序之间划分。
TestBase.cs
[TestInitialize]
public void TestInitBase()
{
SeleniumHelper = new HelperSelenium(TestContext);
}
HelperSelenium.cs
public HelperSelenium(TestContext testContext)
{
Id = int.Parse(testContext.Properties["colegio"].ToString());
WebDriver = new WebDriverSelector(testContext);
...
}
WebDriverSelector.cs
public WebDriverSelector(TestContext tc)
{
testContext = tc;
...
var firingWebDriver = new EventListeners(remoteDriver, testContext).GetWebDriver();
...
EventListeners.cs
public EventListeners(IWebDriver driver, TestContext testContext)
{
...
private static void UploadScreenShot()
{
Screenshot ss = c.GetScreenshot();
string path = Directory.GetCurrentDirectory() + "\\" +
TestContext.TestName + "_" +
contador + ".png";
ss.SaveAsFile(path, ScreenshotImageFormat.Png);
TestContext.AddResultFile(path);
}
我想跳过将TestContext从一个类传递给另一个类,但是我想不出一种实际实现它的方法
答案 0 :(得分:1)
最佳做法是使用事件侦听器包装驱动程序,并使用自己的服装屏幕快照获取程序覆盖OnException方法。 这样,它将在任何地方识别异常并自动截图,而无需额外的维护,
@Override
public void onException(Throwable throwable, WebDriver driver) {
try
{
/* Take screenshot when exception happened. */
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
/* save screenshot to file. */
FileUtils.copyFile(scrFile, new File("C:\\Workspace\\webdriverEventListenerScreenshot.png"));
}catch(IOException ex)
{
ex.printStackTrace();
}
}
参考: https://www.dev2qa.com/webdriver-event-listener-take-screenshot-on-exception/
编辑: 您可以将路径添加到测试结果中/使用(Trace.WriteLine(“ Path”)))将其写入跟踪中