Я искал способ получить значение атрибута и отправить его в отчет, который я должен сделать.Суть в том, что я нашел ответ, когда метод не имеет параметров, но любой метод с параметром выдает ошибку.
На мой первоначальный вопрос о том, как прочитать значение атрибута из метода, был дан ответ на этот вопрос( Чтение значения атрибута метода )
Вот код, который работал
public static void WriteStepNamesOfMethodToReport(Type classType, string methodName)
{
MethodInfo methodInfo = classType.GetRuntimeMethod(methodName, new Type[] { });
Attribute[] attributeList = (System.Attribute[])methodInfo.GetCustomAttributes(typeof(Step), true);
GaugeMessages.WriteMessage("---------------------");
foreach (Attribute attr in attributeList)
{
Step a = (Step)attr;
GaugeMessages.WriteMessage("Executed Step - {0}", a.Names.ElementAt(0));
}
GaugeMessages.WriteMessage("---------------------");
}
Вот так я настраиваю переменные для отправки(и да, я мог бы сделать эту одну строку, но я определяю ее в одном месте и использую ее во многих так, как это и должно быть)
Type classType = typeof(AClassInTheProject);
GenericHelpers.WriteStepNamesOfMethodToReport(classType, nameof(AMethodNameFrom_AClassInTheProject));
Строка кода, начинающаяся с атрибута [] attribute .... выдает ошибку, когда я пытаюсь предоставить метод (methodName), в котором есть параметры.Когда я вхожу в «methodName», это всегда так (без скобок, так как они не будут приняты).Возникшая ошибка говорит:
Object reference not set to an instance of an object.
Я попытался временно удалить параметр из определенного метода, который выдавал ошибку, и увидел атрибут Step, который я искал, и вывел его в отчет.
Вот базовая схема класса, который я использую (такая же настройка, как и у всех непараметрических методов, которые работают).
class AClassInTheProject
{
[Step("Perform the Step For AMethodNameOne"]
AMethodNameOne() // This one works
{
// Code
}
[Step("Perform the Step For AMethodNameTwo"]
AMethodNameTwo(string parameterA) // This one doesn't work
{
// Code
}
}
Справочная информация: это для проекта GIAG UIAutomation.Мне нужно выполнить некоторые шаги в автоматизации пользовательского интерфейса в логических условиях (если выполнить шаг ...), для которых датчик не обеспечивает поддержку.Все выполненные шаги должны быть выведены в окончательный отчет (GaugeMessages .....).Это проект на C #.Моя потребность не распространена среди людей в сообществе Gauge, поэтому она не была сочтена достаточно приоритетной, чтобы включить исправление в исходный код (именно поэтому я делаю этот обходной путь).Надеюсь, это достаточно подробно.