1

ページでこれを選択しています:

<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コレクション内のすべての要素が Text オブジェクトとして空の文字列を持っているため、2 番目のアサートは失敗しています。display:none;スタイルを追加するページで JavaScript を削除すると機能します。ただし、この選択はFCBKcompleteによって拡張されているため、非表示にする必要があるため、これは永続的な解決策ではありません。

.NET で Selenium 2/WebDriver を使用して非表示の選択オプションのテキストを取得するにはどうすればよいですか?

4

2 に答える 2

2

WebDriver は、実際のユーザー操作をエミュレートするように設計されています。何かが見えない場合、実際のユーザーはそれを見ることができず、WebDriver もそれを見ることができません。

ユーザー アクション (クリック、ホバー、または選択を表示するもの) をエミュレートし、選択のオプションを見つけて検査することができます。

于 2011-02-04T19:25:49.413 に答える
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++;
    }
}
于 2011-04-06T12:32:03.803 に答える