Преобразование XML отчетов Nunit в HTML

Спасибо, но я практически не юзаю студию (разве что время от времени подглядеть, как работает Coded UI, или что-то надо в Team Explorer, или вот заценить Moles в применении к проекту). Шарпдевелоп тоже поддержвает плагины с юнит-тестами, в т.ч. и галлио, но я пока не пробовал привинтить.

Пока что отключил автозагрузку проектов.

 

Это вообще беда икаруса - медленная загрузка, да ещё он пытается абсолютно все изменения загрузить... Под это дело вспомнился агнекдот пятилетней давности: писали как-то америкосы UMI (это как WMI, но для Unix/Linux). Для начала, из совсем простецкой версии решили сделать немного посложнее - часть на POSIX, часть через вызов системных утилит. Понятно, что то, что было сделано через утили, быстро не работало (не говоря уже о том, что разные производители этого зоопарка (тогда поддерживалось около 45 платформ) очень по-разному поддерживали POSIX (кто не полностью, а кто нормально, но очень тормозно).

А работало это всё в среде SMS 2003/SCCM 2007 - опрос машинок на предмет софта и прочего, что СМС от рождения делает для виндовых хостов. Так вот, интервал опроса - 10 минут, а полный цикл опроса у них получился 15 минут. Так оно и работало без остановки, подгоняемое всё новыми и новыми запросами, прям как галлио.

 

Я тоже шарпдевелоп юзаю, особенно если нужно быстро что-то подправить. Особенно, когда нужно что-то подправить на маломощной виртуалке, которая еле винду держит. Уже не говорю про лицензии.

Глобально тестовый проект у меня в TFS – стандарт корпоративный. А локально удалось настроить себе Git и Git tf для интеграции с TFS ( http://gittf.codeplex.com/ ).

Хотел сделать интеграцию с Gallio, даже пытался  что-то там скомпилить, но сразу не получилось, и я забросил это дело (https://github.com/icsharpcode/SharpDevelop/wiki/Gallio-Addin-Sample).  Кроме того, как я понял, интеграция там будет не полная. И такой фичи, как запуск Шаарпдевелоп из Icarus не будет. 

Они предлагают слишком неюзабельную методу - доложить что-то в исходники вместо того, чтобы ставить шарпдевелоп через msi. :)

Посмотрел пристально на юнит тесты в шарпдевелоп - что-то мне кажется, что они работают через какой-то xml и помнят то, чего нет :) Вообще не те проекты, как будто когда-то что-то в xml записалось и навсегда.

Повозился со своими проектами на нетбуке (он медленный, там заметнее, когда приложения что пишут в сообщениях) - такое впечатление, что галлио путается в плагинах. Буду пробовать в сторону уменьшения плагинов.

Пока дело кончилось тем, что я поотключал плагины и поменял настройку Test runner factory на IsolatedAppDomain (как вариант - Local, каждый раз открывать-закрывать приложение, зато открывается быстро).

Если собрать приложение когда выбран IsolatedAppDomain, и отказаться от Reload (ну почему нет настройки вообще никогда не релоадить самостоятельно, даже не спрашивать???), галлио плюётся эксепшеном.

В общем, это терпимо (хотя лишние мессаджбоксы раздражают).

 

Но нашлась гораздо более важная проблема - в галлио, в принципе, отсутствует дебаг командлайном! Поскольку мои фреймфорки основываются (нижний уровень) на командлайне, вывод как средствами пауэршелл, так и простым Console.Writeline(string) ускоряет понимание происходящего на порядки.

Я специально решил побиться (по глубокой ночи) с галлио, чтобы понять, почему у меня юнит-тесты не работали с коллекциями, содержащими более одного элемента. Ага.

На следующее утро я реплейсом скрыб юзинг мбюнита и открыл юзинг нъюнита и вопрос решился за минуты.

Наверное, пока буду действовать так (вариант контрибьючения в галлио на предмет плагина командной строки или встроенной командной строки я исключаю): пока фреймворк в активной работе, и "фреймворк фреймворка" ещё не вызрел, буду работать через нъюнит. Когда уже костяк готов, и остаётся дописывать тесты "по аналогии", буду включать галлио и иметь отчёты.

Ещё из багов (не особо значимых) - галлио запускает проекты не по алфавиту, а, должно быть, по мере добавления файлов к проекту.

Поскольку нет возможности сохранять/загружать "зачекивания" (architecture flaw, лечится созданием нескольких проектов, вероятно), зачекивания снимать лень, и только-только добавленный проект выполнился последним (а он в дереве самый первый, на латинскую букву A).

 

Я вот что-то недопонял на счет дебага в коммандлайне. Console.Writeline Gallio поддерживает, и все строки из стандартного ввода попадают в лог тест кейса. 
Вторая загадка – это почему же вы все таки так не хотите использовать Visual Studio? Ведь производительность разработки просто возрастает в разы. Будет полная интеграция со всеми плюшками Gallio Icarus. 
Ну, а на других тестовых машинах можно и Шарпдевелопом обойтись. 
Ну, и кроме того, используя Remote Debugger в Visual Studio, вам будут доступны такие фишки, как Edit and Continue (когда под дебаггером можно менять исходный код) и Intellitrace ("путешествие во времени" во время дебага ). 
Вот инструкция по работе с Remote Debugger если что:
https://groups.google.com/forum/?fromgroups=#!topic/gallio-user/j5y38iH3MdA
 
З.Ы.: Я тоже люблю всякие штучки, по типу, а можно ли на Windows PE поставить SQLServer Express и IIS Express и ранать тесты на официально бесплатном окружении. Но, все таки, если цель – это создание фреймворка по тестированию, а не получение удовольствия от настройки системы – то лучше пользовать проверенные инструменты и ходить протоптанными путями. 
З.З.Ы: Надеюсь не заразил вас идеей на счет WinPE
 

Добрый день Михаил,
У меня никак не получается преобразовать результат теста из XML в HTML.
Вот XML коде:

<?xml version="1.0" encoding="UTF-8"?>
<TestRun id="08169a9a-9b28-4e55-8abb-414ed6404e80" name="sbaider@AUTOTEST1 2016-08-12 03:10:57" runUser="MAPSTRAT\sbaider" xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
  <TestSettings name="Default Test Settings" id="bebd84e1-6e9b-483c-b1ee-7e3c78cab87b">
    <Execution>
      <TestTypeSpecific />
      <AgentRule name="Execution Agents">
      </AgentRule>
    </Execution>
    <Deployment runDeploymentRoot="sbaider_AUTOTEST1 2016-08-12 03_10_57" />
    <Properties />
  </TestSettings>
  <Times creation="2016-08-12T03:10:57.3200575-05:00" queuing="2016-08-12T03:10:58.0509107-05:00" start="2016-08-12T03:10:58.2219585-05:00" finish="2016-08-12T03:30:45.6702283-05:00" />
  <ResultSummary outcome="Failed">
    <Counters total="11" executed="11" passed="10" error="0" failed="1" timeout="0" aborted="0" inconclusive="0" passedButRunAborted="0" notRunnable="0" notExecuted="0" disconnected="0" warning="0" completed="0" inProgress="0" pending="0" />
  </ResultSummary>
  <TestDefinitions>
    <UnitTest name="LoginWithWrongPasswordAndVerifyErrorMessage" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="a1ccde85-662b-9ee1-d60a-8a6906d4ec9e">
      <Execution id="3b775874-7872-41de-a490-b29ca4d8908d" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.CredentialsTest, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="LoginWithWrongPasswordAndVerifyErrorMessage" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="TypeTextAndSendMessageFromMessageSendMessagePage" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="60969a90-a9f5-0eee-9352-958101d70ba3">
      <Execution id="6ec687ce-ef77-4663-983e-234cc56bc552" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.SendMessage, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="TypeTextAndSendMessageFromMessageSendMessagePage" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="DownloadOldUpdaterAndOnBoardAppsVersionsThenSendCommandToUpdateOnBoardApps_VerifyThatOldAndNewOnBoardVersionsAreDifferent" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="ed952ee1-d27e-187d-2e60-06f65a0d3514">
      <Execution id="41cf9e61-a205-4f3d-9e44-a6fc70bb49ef" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.Auto_Upgrade_AppsVersion, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="DownloadOldUpdaterAndOnBoardAppsVersionsThenSendCommandToUpdateOnBoardApps_VerifyThatOldAndNewOnBoardVersionsAreDifferent" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="synchronizationTestResult" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="ce14eba0-b7e1-4b8a-fc42-5cb800521cbf">
      <Execution id="e7e39d89-00db-4e8f-a452-cd0c50352551" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.ClientTimeZoneSettingsInDataBaseAndOBU, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="synchronizationTestResult" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="ClickOnEmergencyButtonInOBUAndAcceptPopupMsgInPortal" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="b92bc9eb-ef99-ee1c-0780-20ca0972b13a">
      <Execution id="282ab4b6-6d62-42af-b601-dc4111bc210e" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.SendEmergencyAlert, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="ClickOnEmergencyButtonInOBUAndAcceptPopupMsgInPortal" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="LoginAsDriverAndVerifySettingsButtonIsDisable" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="62991ca9-d372-983a-ec9b-09c949d9d44e">
      <Execution id="cece918e-d0a1-4d8b-a6e1-a9b116210537" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.CredentialsTest, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="LoginAsDriverAndVerifySettingsButtonIsDisable" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="SendMessageFromViewVehiclesPage" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="0e842caa-b551-f574-1977-af66b1008750">
      <Execution id="d3b507b1-8635-4b7e-a58f-5f16338fb91d" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.SendMessage, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="SendMessageFromViewVehiclesPage" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="SelectAndSendMessageFromScrolDownOptionListFromMessageSendMessagePage" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="e48b1dc7-81d7-7603-ef8d-975a68e3ae81">
      <Execution id="d84725a2-1377-4014-9324-ddfef561aac9" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.SendMessage, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="SelectAndSendMessageFromScrolDownOptionListFromMessageSendMessagePage" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="LoginAsSysAdminAndVerifySettingsButtonIsEnable" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="335fad92-233f-e926-db2a-3683859a5a97">
      <Execution id="459d660e-16b5-4743-b169-6bf169f022d3" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.CredentialsTest, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="LoginAsSysAdminAndVerifySettingsButtonIsEnable" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="synchronizationTestResult" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="763435b6-b5e4-9d6e-a97a-f9e6bbe34012">
      <Execution id="c03bd2ab-79a1-456c-9e0b-52439f53162b" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.SynchronizationTestSuccess, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="synchronizationTestResult" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
    <UnitTest name="SendMessageToDispatch_BusBrokeDown" storage="c:\autotest\autotestobu\autotestobu\bin\debug\autotestobu.dll" id="308dc99f-dab3-4ca5-c904-47f93c35235a">
      <Execution id="7ef44d77-72f6-48f9-b3f4-c734a54df5ec" />
      <TestMethod codeBase="C:/AutoTest/AutoTestOBU/AutoTestOBU/bin/Debug/AutoTestOBU.DLL" adapterTypeName="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestAdapter, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.Adapter, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" className="AutoTestOBU.SendMessage, AutoTestOBU, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" name="SendMessageToDispatch_BusBrokeDown" />
      <Extension>Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute, Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Extension>
    </UnitTest>
  </TestDefinitions>
  <TestLists>
    <TestList name="Results Not in a List" id="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestList name="All Loaded Results" id="19431567-8539-422a-85d7-44ee4e166bda" />
  </TestLists>
  <TestEntries>
    <TestEntry testId="ed952ee1-d27e-187d-2e60-06f65a0d3514" executionId="41cf9e61-a205-4f3d-9e44-a6fc70bb49ef" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="ce14eba0-b7e1-4b8a-fc42-5cb800521cbf" executionId="e7e39d89-00db-4e8f-a452-cd0c50352551" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="62991ca9-d372-983a-ec9b-09c949d9d44e" executionId="cece918e-d0a1-4d8b-a6e1-a9b116210537" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="335fad92-233f-e926-db2a-3683859a5a97" executionId="459d660e-16b5-4743-b169-6bf169f022d3" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="a1ccde85-662b-9ee1-d60a-8a6906d4ec9e" executionId="3b775874-7872-41de-a490-b29ca4d8908d" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="b92bc9eb-ef99-ee1c-0780-20ca0972b13a" executionId="282ab4b6-6d62-42af-b601-dc4111bc210e" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="e48b1dc7-81d7-7603-ef8d-975a68e3ae81" executionId="d84725a2-1377-4014-9324-ddfef561aac9" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="0e842caa-b551-f574-1977-af66b1008750" executionId="d3b507b1-8635-4b7e-a58f-5f16338fb91d" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="308dc99f-dab3-4ca5-c904-47f93c35235a" executionId="7ef44d77-72f6-48f9-b3f4-c734a54df5ec" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="60969a90-a9f5-0eee-9352-958101d70ba3" executionId="6ec687ce-ef77-4663-983e-234cc56bc552" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
    <TestEntry testId="763435b6-b5e4-9d6e-a97a-f9e6bbe34012" executionId="c03bd2ab-79a1-456c-9e0b-52439f53162b" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" />
  </TestEntries>
  <Results>
    <UnitTestResult executionId="41cf9e61-a205-4f3d-9e44-a6fc70bb49ef" testId="ed952ee1-d27e-187d-2e60-06f65a0d3514" testName="DownloadOldUpdaterAndOnBoardAppsVersionsThenSendCommandToUpdateOnBoardApps_VerifyThatOldAndNewOnBoardVersionsAreDifferent" computerName="AUTOTEST1" duration="00:05:06.7130612" startTime="2016-08-12T03:10:58.2841577-05:00" endTime="2016-08-12T03:16:05.1200315-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Failed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="41cf9e61-a205-4f3d-9e44-a6fc70bb49ef">
      <Output>
        <ErrorInfo>
          <Message>Test method AutoTestOBU.Auto_Upgrade_AppsVersion.DownloadOldUpdaterAndOnBoardAppsVersionsThenSendCommandToUpdateOnBoardApps_VerifyThatOldAndNewOnBoardVersionsAreDifferent threw exception: 
System.InvalidOperationException: unknown error: Element is not clickable at point (965, 247). Other element would receive the click: &lt;iframe id="sub-app" src="/HtmlClient/Vehicle.aspx" ng-if="!isSilverlight" ng-style="expanderStatus.collapse?{top:&amp;quot;20px&amp;quot;}:{top:&amp;quot;60px&amp;quot;}" onload="subAppLoaded()" class="ng-scope" ng-src="/HtmlClient/Vehicle.aspx" style="top: 60px; height: 957px;"&gt;...&lt;/iframe&gt;
  (Session info: chrome=52.0.2743.116)
  (Driver info: chromedriver=2.20.353145 (343b531d31eeb933ec778dbcf7081628a1396067),platform=Windows NT 6.1 SP1 x86_64)</Message>
          <StackTrace>    at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebElement.Click()
   at AutoTestOBU.Auto_Upgrade_AppsVersion.SendCommandUpdateApplication_Portal(String testIndex) in C:\AutoTest\AutoTestOBU\AutoTestOBU\Auto_Upgrade_AppsVersion.cs:line 463
   at AutoTestOBU.Auto_Upgrade_AppsVersion.DownloadOldUpdaterAndOnBoardAppsVersionsThenSendCommandToUpdateOnBoardApps_VerifyThatOldAndNewOnBoardVersionsAreDifferent() in C:\AutoTest\AutoTestOBU\AutoTestOBU\Auto_Upgrade_AppsVersion.cs:line 709
</StackTrace>
        </ErrorInfo>
      </Output>
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
      <ExtensionResult>Exception has been thrown by the target of an invocation.</ExtensionResult>
    </UnitTestResult>
    <UnitTestResult executionId="e7e39d89-00db-4e8f-a452-cd0c50352551" testId="ce14eba0-b7e1-4b8a-fc42-5cb800521cbf" testName="synchronizationTestResult" computerName="AUTOTEST1" duration="00:00:27.3562896" startTime="2016-08-12T03:16:05.1511973-05:00" endTime="2016-08-12T03:16:32.4524381-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="e7e39d89-00db-4e8f-a452-cd0c50352551">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="cece918e-d0a1-4d8b-a6e1-a9b116210537" testId="62991ca9-d372-983a-ec9b-09c949d9d44e" testName="LoginAsDriverAndVerifySettingsButtonIsDisable" computerName="AUTOTEST1" duration="00:01:01.7280335" startTime="2016-08-12T03:16:32.4524381-05:00" endTime="2016-08-12T03:17:34.0344562-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="cece918e-d0a1-4d8b-a6e1-a9b116210537">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="459d660e-16b5-4743-b169-6bf169f022d3" testId="335fad92-233f-e926-db2a-3683859a5a97" testName="LoginAsSysAdminAndVerifySettingsButtonIsEnable" computerName="AUTOTEST1" duration="00:00:58.5588067" startTime="2016-08-12T03:17:34.0344562-05:00" endTime="2016-08-12T03:18:32.4694399-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="459d660e-16b5-4743-b169-6bf169f022d3">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="3b775874-7872-41de-a490-b29ca4d8908d" testId="a1ccde85-662b-9ee1-d60a-8a6906d4ec9e" testName="LoginWithWrongPasswordAndVerifyErrorMessage" computerName="AUTOTEST1" duration="00:00:44.3281648" startTime="2016-08-12T03:18:32.4694399-05:00" endTime="2016-08-12T03:19:16.7264083-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="3b775874-7872-41de-a490-b29ca4d8908d">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="282ab4b6-6d62-42af-b601-dc4111bc210e" testId="b92bc9eb-ef99-ee1c-0780-20ca0972b13a" testName="ClickOnEmergencyButtonInOBUAndAcceptPopupMsgInPortal" computerName="AUTOTEST1" duration="00:02:47.9429740" startTime="2016-08-12T03:19:16.7264083-05:00" endTime="2016-08-12T03:22:04.7664569-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="282ab4b6-6d62-42af-b601-dc4111bc210e">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="d84725a2-1377-4014-9324-ddfef561aac9" testId="e48b1dc7-81d7-7603-ef8d-975a68e3ae81" testName="SelectAndSendMessageFromScrolDownOptionListFromMessageSendMessagePage" computerName="AUTOTEST1" duration="00:01:44.6618061" startTime="2016-08-12T03:22:04.7664569-05:00" endTime="2016-08-12T03:23:49.6917779-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="d84725a2-1377-4014-9324-ddfef561aac9">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="d3b507b1-8635-4b7e-a58f-5f16338fb91d" testId="0e842caa-b551-f574-1977-af66b1008750" testName="SendMessageFromViewVehiclesPage" computerName="AUTOTEST1" duration="00:01:52.4162213" startTime="2016-08-12T03:23:49.6917779-05:00" endTime="2016-08-12T03:25:42.4065159-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="d3b507b1-8635-4b7e-a58f-5f16338fb91d">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="7ef44d77-72f6-48f9-b3f4-c734a54df5ec" testId="308dc99f-dab3-4ca5-c904-47f93c35235a" testName="SendMessageToDispatch_BusBrokeDown" computerName="AUTOTEST1" duration="00:02:16.3699243" startTime="2016-08-12T03:25:42.4065159-05:00" endTime="2016-08-12T03:27:58.9283005-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="7ef44d77-72f6-48f9-b3f4-c734a54df5ec">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="6ec687ce-ef77-4663-983e-234cc56bc552" testId="60969a90-a9f5-0eee-9352-958101d70ba3" testName="TypeTextAndSendMessageFromMessageSendMessagePage" computerName="AUTOTEST1" duration="00:01:45.4448068" startTime="2016-08-12T03:27:58.9283005-05:00" endTime="2016-08-12T03:29:44.4760561-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="6ec687ce-ef77-4663-983e-234cc56bc552">
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
    <UnitTestResult executionId="c03bd2ab-79a1-456c-9e0b-52439f53162b" testId="763435b6-b5e4-9d6e-a97a-f9e6bbe34012" testName="synchronizationTestResult" computerName="AUTOTEST1" duration="00:00:56.5002873" startTime="2016-08-12T03:29:44.4760561-05:00" endTime="2016-08-12T03:30:40.7659483-05:00" testType="13cdc9d9-ddb5-4fa4-a97d-d965ccfc6d4b" outcome="Passed" testListId="8c84fa94-04c1-424b-9868-57a2d4851a1d" relativeResultsDirectory="c03bd2ab-79a1-456c-9e0b-52439f53162b">
      <Output>
        <StdOut>Synchronization result is:</StdOut>
      </Output>
      <ResultFiles>
        <ResultFile path="AUTOTEST1\UITestActionLog.html" />
      </ResultFiles>
    </UnitTestResult>
  </Results>
</TestRun>

Вот XSLT коде для преобразования:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
   
<h1 align="center">Test Results</h1>
    <table border="0" cellpadding="2" cellspacing="0" width="95%" style="border: #dcdcdc 1px solid;">
        <tr valign="top">
            <th style="text-align:center; font-weight:bold;" bgcolor="yellow">Total - Test Cases</th>
            <th style="text-align:center; font-weight:bold;" bgcolor="yellow">Pass</th>           
            <th style="text-align:center; font-weight:bold;" bgcolor="yellow">Fails</th>
            <th style="text-align:center; font-weight:bold;" bgcolor="yellow">Errors</th>
            <th style="text-align:center; font-weight:bold;" bgcolor="yellow">Success</th>          
        </tr>

<xsl:if test="//@error = '0' and //@failed = '0'"> 
<tr>
<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@total"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@passed"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="00FF00">
<xsl:value-of select="//@failed"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@error"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="format-number((//@total - //@failed - //@error) div //@total * 100,'#.00')"/> % </td>   
</tr>
</xsl:if>

<xsl:if test="//@error = '0' and //@failed > '0'"> 
<tr>
<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@total"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@passed"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="FF0000">
<xsl:value-of select="//@failed"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@error"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="format-number((//@total - //@failed - //@error) div //@total * 100,'#.00')"/> % </td>   
</tr>
</xsl:if>


<xsl:if test="//@error > '0' and //@failed = '0'"> 
<tr>
<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@total"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@passed"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="00FF00">
<xsl:value-of select="//@failed"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#FFA500">
<xsl:value-of select="//@error"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="format-number((//@total - //@failed - //@error) div //@total * 100,'#.00')"/> % </td>   
</tr>
</xsl:if>


<xsl:if test="//@error > '0' and //@failed > '0'"> 
<tr>
<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@total"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="//@passed"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="FF0000">
<xsl:value-of select="//@failed"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#FFA500">
<xsl:value-of select="//@error"/> </td>

<td style="text-align:center; font-weight:bold;" bgcolor="#00FF00">
<xsl:value-of select="format-number((//@total - //@failed - //@error) div //@total * 100,'#.00')"/> % </td>   
</tr>
</xsl:if>
</table>







<h1 align="center" >Detail Test Result</h1>
<table border="0" cellpadding="2" cellspacing="0" width="95%" style="border: #dcdcdc 1px solid;">
<tr>
<td width="25%" bgcolor="yellow"><center><b>Test</b></center></td>                       
<td width="15%" align="left" bgcolor="yellow"><center><b>Result</b></center></td>
<td width="25%" align="left" bgcolor="yellow"><center><b>Error Details</b></center></td>  
</tr>
      
<xsl:for-each select="*/Results/UnitTestResult">
 <tr>
<xsl:if test=" @outcome ='Passed'">
 <td><xsl:value-of select="@testName"/></td>
 <td style="text-align:center; color: #228B22; font-weight:bold;"><xsl:value-of select="@outcome"/></td>
 <td><center> N/A </center></td>
</xsl:if>

<xsl:if test=" @outcome ='Failed'">
 <td><xsl:value-of select="@testName"/></td>
 <td style="text-align:center; color: red; font-weight:bold;"><xsl:value-of select="@outcome"/></td>
 <td><xsl:value-of select="substring-after(substring-after(Output/ErrorInfo/Message,'.'), '.')" /></td>
</xsl:if>
</tr>
</xsl:for-each>
</table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Первая таблица работает без проблем но вторая не как не получается.
Может проблема в for-each ?

Спасибо за помощь.