【问题标题】:How to select custom dropdown list element with selenium如何使用硒选择自定义下拉列表元素
【发布时间】:2015-12-31 19:16:14
【问题描述】:

我有一个项目,其中隐藏了本机下拉菜单并使用了自定义下拉菜单。所以,我不能使用 selenium 选择方法(选择和选项被隐藏并且不可用)。所有下拉菜单(称呼、国家、日期等)都作为自定义下拉菜单实现。

<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)选择正确的选项。但我不知道如何实现这样的功能。是否有人已经使用自定义下拉菜单并有解决方案或提示?

【问题讨论】:

  • 当您发布 HTML 时,请花一点时间使用像 jsbeautifier.org 这样的美化工具来正确格式化它。它使它更容易阅读,从而使您的问题更有可能得到回答。谢谢!
  • 您尝试了哪些方法,结果如何?就像你在学校做的那样……请展示你的作品。 :) 这是在 SO 上回答问题的过程的一部分。它对您很有帮助,因为它迫使您调查自己的问题并仔细考虑。它还向读者证明你做了功课,并做出了合理的尝试来回答你自己的问题。第三,它可以帮助读者发现和诊断问题,从而为您提供更好的答案,减少我们浪费的时间。

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


【解决方案1】:

好的,这是我的解决方案。 “optionClass”是选项的css选择器,“option”是应该选择的值。我认为这不是最好的解决方案,而是解决它的一种方法。有任何反馈、改进或想法吗?

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.");
        }

【讨论】:

    【解决方案2】:

    对我来说,以下方法在下拉菜单也有默认值的情况下工作得很好。 假设您将大多数下拉菜单的默认值设置为“未设置”,您可以试试这个:

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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多