Specflow: заменить имя (строка передачи из файла функций) на AccessibilityId в файле определения шага.

Я новичок в Specflow. Моя структура с С#. Файл функции:

Feature: test ABC app

Scenario: 00 Application is open 
    Given Application is open in "User" mode
    When the "Configuration" screen is open

Scenario: 02 Search for servers
    Given the "Add Server" screen is open
    And "Request Server" button is clicked
    When the "Request serer" screen is open

В файле определения шага функция выглядит так:

 [When(@"the ""(.*)"" screen is open")]
 [Given(@"the ""(.*)"" screen is open")]
 public void GivenScreenIsOpen(string element)
 {
   element_Interactions.ClickOnElement(element);
 }

Необходимое решение: из файла функций я передаю строку с именем экрана в качестве переменной, но в файле определения шага вместо использования driver.FindElementByName(element) я хочу использовать driver.FindElementByAccessibilityId(элемент). Я не могу найти обходной путь, как использовать/вызывать AccessibilityId для соответствующего имени экрана из моего класса страницы в функции определения шага и как динамически использовать его для всех других экранов

заранее спасибо.


person Javed Khan    schedule 12.04.2020    source источник
comment
У меня есть аналогичный вопрос здесь: stackoverflow.com/questions/58021071/   -  person Javed Khan    schedule 13.04.2020
comment
Итак, элемент имеет разные идентификаторы доступности на каждом экране?   -  person Greg Burghardt    schedule 13.04.2020
comment
@грег да. На каждом экране у меня разные идентификаторы доступности   -  person Javed Khan    schedule 14.04.2020


Ответы (1)


Я все еще не уверен на 100%, с чем вы имеете дело, но кажется, что словарь экранов и идентификаторов доступности был бы самым простым решением:

[Binding]
public class YourSteps
{
    private static readonly Dictionary<string, string> accessibilityIds = new Dictionary<string, string>()
    {
        { "screen1", "accessibility-id-"},
        { "screen2", "accessibility-id-2"},
        { "screen3", "accessibility-id-3"}
    };

    [When(@"the ""(.*)"" screen is open")]
    [Given(@"the ""(.*)"" screen is open")]
    public void GivenScreenIsOpen(string element)
    {
        var accessibilityId = accessbilityIds[element];

        // Or however you click on an element by its accessibility Id
        element_Interactions.ClickOnElement(accessibilityId);
    }
}
person Greg Burghardt    schedule 14.04.2020
comment
Просто я хотел создать общий файл определения шагов для нескольких функций или сценариев. Предложенное вами решение помогло с одной стороны. Спасибо - person Javed Khan; 20.04.2020
comment
@JavedKhan: определения шагов являются глобальными. Они применяются ко всем функциям. Вы не можете ограничить их определенными сценариями или файлами функций. - person Greg Burghardt; 20.04.2020
comment
да. Я попробовал еще несколько вещей и понял, что вы говорите. Спасибо за все предложения и рекомендации. - person Javed Khan; 20.04.2020