2015-10-03 176 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); 

希望這有助於一點。

相關問題