如何使用selenium

时间:2015-10-03 19:13:51

标签: java selenium drop-down-menu selenium-webdriver webdriver

我有一个隐藏原生下拉菜单并使用自定义下拉菜单的项目。所以,我不能使用selenium select方法(select和options是隐藏的,不可用)。所有下拉列表(称呼,国家,bithdate等)都是作为自定义下拉列表实现的。

<div class="medium-8 large-4 left column">
   <select name="register[personal][salutation]" id="register_personal_salutation" style="display: none;">
      <option value="mr">Herr</option>
      <option value="ms">Frau</option>
   </select>
   <div class="select-dropdown">
      <div class="selected">Herr</div>
      <div class="choices">
         <ul>
            <li>Herr</li>
            <li>Frau</li>
         </ul>
      </div>
   </div>
</div>

解决方案1(不太好):点击“select-dropdown”并点击选项。它的工作,但不能重复使用。

解决方案2(首选):实现一个自己可重复使用的“customSelect”方法,以便我可以通过给定的选择器和选项字符串(如webdriver select)选择正确的选项。但我不知道如何实现这样的功能。有没有人已经使用自定义下拉菜单并有解决方案或提示?

2 个答案:

答案 0 :(得分:0)

好的,这是我的解决方案。 &#34; optionClass&#34;是选项的css选择器,&#34;选项&#34;是应该选择的值。我认为它不是最好的解决方案,而是解决问题的一种方法。任何反馈,改进或想法?

public void customSelect(String optionClass, String option) {
            log.trace("I custom select the option " + option + " from the dropdown");
            int amountOptions = this.getNumOfElements(By.cssSelector(optionClass));
            for (int pos = 1; pos <= amountOptions; pos++) {
                String sortOption = this.getText(By.cssSelector(optionClass + ":nth-child(" + pos + ")"));
                if (sortOption.equalsIgnoreCase(option)) {
                    this.click(By.cssSelector(optionClass + ":nth-child(" + pos + ")"));
                    return;
                }
            }
            throw new NoSuchElementException("The dropdown does not contain the option " + option
                    + " and therefore it is not possible to select it.");
        }

答案 1 :(得分:0)

对我来说,以下方法在下拉列表中也可以正常工作,该下拉列表也具有默认值。 假设您的大多数下拉列表都有'未设置'作为默认值,您可以尝试这样做:

internal static void DropDownByValue(string defaultValue, string chosenValue)
    {
        DriverInstance.Wait(TimeSpan.FromSeconds(1.5));
        var valueName =
            DriverInstance.Driver.FindElement(By.XPath("//option[contains (text (), '" + defaultValue + "')]"));
        var parent = valueName.FindElement(By.XPath(".."));
        SelectFromDropdown(parent, chosenValue);
    }

    public static void SelectFromDropdown(IWebElement button, string value)
    {
        var dropdown = new SelectElement(button);
        dropdown.SelectByText(value);

希望这有点帮助。