Убедитесь, что все значения находятся в раскрывающемся списке, используя селен и specflow c # - PullRequest
0 голосов
/ 06 июля 2018

я новичок в селене, я пишу некоторые функциональные тесты. Сейчас я пытаюсь проверить значения в выпадающем списке.

 1. I have my step like:

Then I confirm the Status options include
 | *Current Status*                   |
 | In Any Status                      |
 | Pending Allocation                 |
 | Work In Progress                   |

 2. My Search page method


    public void VerifyValuationStatusOptions(Table statusList)
    {
        var elementId = "myId";
        var displayedHeadings = new List<string>();

        WaitForElements(By.Id(elementId));
        IList<IWebElement> elements = FindElements(By.Id(elementId)).ToList();

        foreach (var item in elements)
        {
            displayedHeadings.Add(item.Text);
        }
        foreach (var row in statusList.Rows)
        {
            displayedHeadings.Should().Contain(row["In Any Status"]);
            displayedHeadings.Should().Contain(row["Pending Allocation"].TrimEnd());
            displayedHeadings.Should().Contain(row["Work In Progress "].TrimEnd());               
        }
    }

Затем я получаю сообщение об ошибке: System.IndexOutOfRangeException: не удалось найти столбец с именем «В любом состоянии» в таблице.

1 Ответ

0 голосов
/ 13 июля 2018

Вот как я это делаю.

Шаг сценария Specflow

    And the 'TimeZoneId' dropdown should contain the values 
    | Value                           | Text                                                          |
    |                                 | --Select--                                                    |
    | Dateline Standard Time          | (UTC-12:00) International Date Line West                      |
    | UTC-11                          | (UTC-11:00) Coordinated Universal Time-11                 |
    | Hawaiian Standard Time          | (UTC-10:00) Hawaii                                        |

И реализованное определение шага, где p0 - имя элемента select

    [Then(@"the '(.*)' dropdown should contain the values")]
    public void ThenTheDropdownShouldContainTheValues(string p0, Table table)
    {
        var dropdown = new SelectElement(Selenium.FindElement(By.Name(p0)));

        var dropDownTextValues = dropdown.Options.Select(webElement => webElement.Text).ToList();
        var textValues = table.Rows.Select(x => x[1]).ToList();

        CollectionAssert.AreEquivalent(dropDownTextValues, textValues);

        var dropDownValues = dropdown.Options.Select(webElement => webElement.GetAttribute("value")).ToList();
        var values = table.Rows.Select(x => x[0]).ToList();

        if (values.All(x => x == String.Empty))
            return;

        CollectionAssert.AreEquivalent(dropDownValues, values);
    }

Вы могли бы немного повозиться, чтобы убедиться, что значение и текст точно совпадают, но это работает для меня.

...