# SpecFlow # For CreateDynamicInstance () - ошибка - Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: лучший перегруженный метод - PullRequest
2 голосов
/ 10 апреля 2020

Я использую Specflow 3 с Selenium для шаблона объектной модели страницы. Ниже приведен код:

FeatureFile

When I want to edit the profile 
    | Hats | Shoes |
    | 98   | 99    |

Класс страницы-

public IWebElement TxtHat => _driver.FindElement(By.Id("Hat"));

public IWebElement TxtShoe => _driver.FindElement(By.Id("Shoe"));

public void FillDetails (string hat, string shoe)
{
    TxtHat.SendKeys(hat);
    TxtShoe.SendKeys(shoe);
}

StepDefinition -

[When(@"I want to edit the profile")]
public void WhenIWantToEditTheProfile(Table table)
{
    profile.ClearDetails();
    dynamic var = table.CreateDynamicInstance();
    profile.FillDetails(var.Hats, var.Shoes);
}

Ошибка

Сообщение: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: лучший перегруженный метод соответствует для RefreshESS.Pages.UpdateProfilePage .FillDetails (string, string) 'содержит недопустимые аргументы

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 10 апреля 2020

Вместо этого вам нужно использовать «вертикальную» таблицу:

When I want to edit the profile 
    | Field | Value |
    | Hats  | 98    |
    | Shoes | 99    |

«Горизонтальный» макет таблицы данных, где заголовки столбцов должны быть именами свойств, будет работать только при создании набора или коллекции объектов. Поскольку вы хотите один объект, вам нужна таблица с двумя столбцами. Столбец № 1 - это ключ или имя свойства в вашем dynamic объекте, а второй столбец - это значение свойства.

Дополнительная информация о преобразовании таблиц данных в объекты: https://specflow.org/documentation/SpecFlow-Assist-Helpers/

Обратите внимание, что в документации говорится о преобразовании таблиц данных в конкретные классы, но та же базовая философия c применима и к преобразованию таблиц данных в dynamic объекты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...