2011-02-01 50 views
1

我有這個選擇頁面上:Selenium 2 + WebDriver + .NET:如果select爲「display:none;」,則無法檢索select選項的文本

<select multiple="" class="recipientsList" name="Recipients[]" id="To" style="display: none;"> 
    <option value="User-6" class="">Coordinator, Test</option> 
    <option value="Course-4" class="">New Course 1</option> 
    <option value="UserType-6" class="">Coordinators</option> 
    <option value="UserTypeInCourse-4-6" class="">New Course 1 Coordinator</option> 
</select> 

而且我運行這個測試:

public IWebDriver WebDriver 
{ 
    get 
    { 
     // gets the current WebDriver instance, set up elsewhere at the beginning 
     // of the fixture 
     return ScenarioContext.Current.WebDriver(); 
    } 
} 

public void SelectTest() 
{ 
    // code to navigate to proper page 

    var options = WebDriver.FindElements(By.CssSelector("select.recipientsList option")); 

    Assert.That(options, Is.Not.Empty, "No options found."); 
    Assert.That(!options.Any(option => string.IsNullOrEmpty(option.Text)), "Some or all options have blank text."); 
    // Actual useful assert 
} 

第二斷言是失敗的,因爲所有的options集合中的元素都有空字符串他們的文本對象。如果我刪除頁面上添加display:none;樣式的JavaScript,它將起作用。這不是一個永久的解決方案,因爲這個選擇需要被隱藏,因爲它被擴展了FCBKcomplete

如何在.NET中使用Selenium 2/WebDriver獲取隱藏選擇選項的文本?

回答

2

WebDriver旨在模擬真正的用戶交互。如果某些內容不可見,那麼真正的用戶將無法看到它,WebDriver也無法看到它。

您可以模擬用戶操作 - 單擊,懸停或使您的選擇可見 - 然後找到您選擇的選項並檢查它們。

+0

這是有道理的。我想,我們必須弄清楚如何從FCBKComplete呈現的自動完成下拉菜單中找到信息。謝謝! – adamjford 2011-02-04 19:37:11

1

我遇到了同樣的問題。我發現,如果我檢索了所有元素並通過它們循環,我可以確定哪些元素被設置爲通過JS或CSS顯示,然後與它們進行交互。

我有一個同名的動態ID的表單域,比如「fieldname _」+ id作爲域ID。這裏的示例代碼:

List<WebElement> displayNames = driver.findElements(By.xpath("//input[starts-with(@id, 'calendarForm_calendarDisplayNameM')]")); 

int name_count = 1; 
for (WebElement thisDisplayName : displayNames) { 
    RenderedWebElement element = (RenderedWebElement)thisDisplayName; 
    if (element.isDisplayed()) { 
     String calendarDisplayNameText = testCalendarName + "_display_" + name_count; 
     thisDisplayName.sendKeys(calendarDisplayNameText); 
     name_count++; 
    } 
} 
相關問題