从下拉列表中选择随机选项

时间:2018-02-22 16:16:04

标签: c# selenium selenium-webdriver

我需要从下拉列表中选择一个随机选项。我的理解是我需要计算可用选项的数量,然后选择0和可用选项数之间的随机索引。

到目前为止,我有这个 -

public static void selectRandomIndexDropdown(this IWebDriver driver, By elementName)
{
    var element = driver.FindElement(elementName);
    element.selectRandomIndexDropdown();
}

public static void selectRandomIndexDropdown(this IWebElement element)
{
    if (element == null || element.TagName.ToLower() != "select")
        return;

    int indexCount = element.FindElements(By.TagName("option")).Count();
    new SelectElement(element).SelectByIndex(Rnd.Next(0, indexCount));
}

试图称之为 -

driver.selectRandomIndexDropdown(By.XPath("//*[@id='ASPxGridViewDeskFees_DXEFL_DXEditor1_I']"));

这似乎不起作用。没有显示错误或抛出异常,看起来好像代码执行但只是没有单击列表中的选项。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我正在使用Java,但我确信C#的答案是相似的

我通常使用一种方法来提供当前可用选项列表:

public static List<WebElement> getOptions(WebElement selectField) {
    Select dropdown = new Select(selectField);
    return dropdown.getOptions();
}

从那里,您可以选择介于0和.size()之间的随机数来获取要传递给选择方法的值:

public static void selectOptionByIndex(WebElement selectField, int index) {
    wait.until(ExpectedConditions.elementToBeClickable(selectField));
    Select dropdown = new Select(selectField);
    dropdown.selectByIndex(index);
}

答案 1 :(得分:0)

或者简单地从2生成randum X nuber,到选项的数量并找到这样的元素:

string myxpath = "//*[@id='select_id']/option[" + X + "]";
IWebElement element = driver.FindElement(By.XPath(myxpath));