onPrepare и onComplete называются хуками жизненного цикла и выполняются на определенных этапах вашего выполнения. Существует множество хуков жизненного цикла, доступных транспортирующему различными способами, в том числе от репортеров-жасминов, которых вы объявляете, как вы упомянули.
Обзор хуков жизненного цикла и порядок их запуска
--- beforeLaunch
--- onPrepare (set in conf) ***reporters initialized here
--- jasmineStarted (set in reporter)
--- beforeAll
--- suiteStarted (set in reporter)
--- specStarted (set in reporter)
--- beforeEach (set in testFile)
+++ afterEach (set in testFile)
+++ specDone (set in reporter)
+++ suiteDone (set in reporter)
+++ afterAll
+++ jasmineDone (set in reporter)
+++ onComplete (set in conf)
+++ afterLaunch
Неясно, в чем заключается ваша проблема, из вашего вопроса, но я предполагаю, что у вас возникли проблемы с вашим репортером HTML потому что вы объявляете это в onComplete. У репортеров Jasmine есть несколько важных хуков жизненного цикла: ( jasmineStarted, jasmineDone, suiteStarted, suiteDone, specStarted, specDone ), но если вы посмотрите на приведенный выше обзор, который я вставил, вы увидите, что эти репортеры жизненного цикла перехватывают все происходит до , вызывается onComplete. Если вы объявите своего репортера в onComplete вместо onPrepare, эти этапы жизненного цикла уже пройдены, и над ними не будет выполнено никаких действий.
Подробнее о назначении крючков жизненного цикла Protractor вы можете прочитать в прикрепленной ссылке. https://github.com/angular/protractor/blob/master/exampleTypescript/conf.ts
и хуки жизненного цикла Jasmine Reporter здесь. https://jasmine.github.io/api/3.3/Reporter.html
Надеюсь, что ответит на ваши вопросы, но дайте мне знать, если меня неправильно поняли.
Вот рабочий код. Это - прототип. Для большего числа изменений можно было бы открыть документ только однажды. Кроме того, существуют некоторые трудно кодированные вещи как имя листа и тип ячейки, который должен был бы быть параметризован, прежде чем это можно назвать готовым к производству. http://openxmldeveloper.org/forums/4005/ShowThread.aspx был очень полезен.
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System.Xml;
using System.IO;
using System.Diagnostics;
namespace OpenXMLWindowsApp
{
public class OpenXMLWindowsApp
{
public void UpdateSheet()
{
UpdateCell("Chart.xlsx", "20", 2, "B");
UpdateCell("Chart.xlsx", "80", 3, "B");
UpdateCell("Chart.xlsx", "80", 2, "C");
UpdateCell("Chart.xlsx", "20", 3, "C");
ProcessStartInfo startInfo = new ProcessStartInfo("Chart.xlsx");
startInfo.WindowStyle = ProcessWindowStyle.Normal;
Process.Start(startInfo);
}
public static void UpdateCell(string docName, string text,
uint rowIndex, string columnName)
{
// Open the document for editing.
using (SpreadsheetDocument spreadSheet =
SpreadsheetDocument.Open(docName, true))
{
WorksheetPart worksheetPart =
GetWorksheetPartByName(spreadSheet, "Sheet1");
if (worksheetPart != null)
{
Cell cell = GetCell(worksheetPart.Worksheet,
columnName, rowIndex);
cell.CellValue = new CellValue(text);
cell.DataType =
new EnumValue<CellValues>(CellValues.Number);
// Save the worksheet.
worksheetPart.Worksheet.Save();
}
}
}
private static WorksheetPart
GetWorksheetPartByName(SpreadsheetDocument document,
string sheetName)
{
IEnumerable<Sheet> sheets =
document.WorkbookPart.Workbook.GetFirstChild<Sheets>().
Elements<Sheet>().Where(s => s.Name == sheetName);
if (sheets.Count() == 0)
{
// The specified worksheet does not exist.
return null;
}
string relationshipId = sheets.First().Id.Value;
WorksheetPart worksheetPart = (WorksheetPart)
document.WorkbookPart.GetPartById(relationshipId);
return worksheetPart;
}
// Given a worksheet, a column name, and a row index,
// gets the cell at the specified column and
private static Cell GetCell(Worksheet worksheet,
string columnName, uint rowIndex)
{
Row row = GetRow(worksheet, rowIndex);
if (row == null)
return null;
return row.Elements<Cell>().Where(c => string.Compare
(c.CellReference.Value, columnName +
rowIndex, true) == 0).First();
}
// Given a worksheet and a row index, return the row.
private static Row GetRow(Worksheet worksheet, uint rowIndex)
{
return worksheet.GetFirstChild<SheetData>().
Elements<Row>().Where(r => r.RowIndex == rowIndex).First();
}
}
}
var sheetData = new SheetData();
var row = UpdateCell("A","Hello World", 5);
sheetData.Append(row);
worksheet.Append(sheetData);
private static Row UpdateCell(string columnName,string value uint rowIndex)
{
Row row = new Row { RowIndex = (uint)rowIndex };
Cell c1 = new TextCell(columnName, value, rowIndex);
row.Append(c1);
return row;
}
общедоступный класс TextCell: Ячейка {общедоступный TextCell (представляют в виде строки заголовок, строковый текст, международный индекс) {это. DataType = CellValues. InlineString; это. CellReference = заголовок + индекс;//Добавляют текст к текстовой ячейке. это. InlineString = новый InlineString {текст = новый текст {текст = текст}}; }}