使用Selenium和Specflow C#验证所有值都在下拉列表中

时间:2018-07-06 14:10:30

标签: c# selenium-webdriver specflow

硒新手,进行了一些功能测试。我现在正在努力验证下拉列表中的值。

\$var

然后我得到错误:System.IndexOutOfRangeException:在表中找不到名为“处于任何状态”的列。

1 个答案:

答案 0 :(得分:0)

这就是我的方法。

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是选择元素名称

    [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);
    }

您可能会喜欢一点,以确保值和文本完全匹配,但这对我有用。