2015-10-03 121 views
1

我有一个隐藏本地下拉列表并使用自定义下拉列表的项目。所以,我不能使用硒选择方法(选择和选项隐藏和不可用)。所有下拉菜单(称呼,国家,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)选择正确的选项。但我不知道如何实现这样的功能。有没有人已经使用自定义下拉菜单并有解决方案或技巧?

+0

当您发布HTML时,请花一分钟时间使用像http://jsbeautifier.org/这样的美化工具来正确格式化它。它使得它更容易阅读,这使得你的问题更可能得到解答。谢谢! – JeffC

+0

你有什么试过,结果是什么?正如你在学校所做的那样,请展示你的工作。 :)这是在SO上获得问题的过程中的一部分。这对你很有帮助,因为它会迫使你调查自己的问题并思考问题。这也向读者证明你做了功课,并做出了合理的尝试来回答你自己的问题。第三,它可以帮助读者找到和诊断问题,为您提供更好的答案,减少浪费时间。 – JeffC

回答

0

好的,这是我的解决方案。 “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."); 
     } 
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); 

希望这有助于一点。

相关问题