Selenium 2 + WebDriver + .NET: невозможно получить текст параметров выбора, если выбрано «display: none;» - PullRequest
1 голос
/ 01 февраля 2011

У меня есть этот выбор на странице:

<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
}

Второй утверждение не выполняется, потому что все элементы в *Коллекция 1007 * имеет пустую строку в качестве своих текстовых объектов.Это работает, если я удаляю JavaScript на странице, которая добавляет стиль display:none;.Это не постоянное решение, так как этот выбор должен быть скрыт, поскольку он расширен на FCBKcomplete .

Как получить текст скрытых опций выбора с Selenium2 / WebDriver в .NET?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2011

WebDriver предназначен для эмуляции реальных взаимодействий с пользователем. Если что-то не видно, то реальный пользователь не может его видеть и WebDriver тоже не видит.

Вы можете эмулировать действия пользователя - щелкнуть, навести курсор мыши или что-то еще, что делает ваш выбор видимым - и затем найти параметры выбора и просмотреть их.

1 голос
/ 06 апреля 2011

Я столкнулся с той же проблемой. Я обнаружил, что, если бы я извлек все элементы и прошел через них, я мог бы определить, какие из них были установлены для отображения с помощью JS или CSS, а затем взаимодействовать с ними.

У меня есть поле формы с тем же именем, к которому прикреплен динамический идентификатор, например "fieldname _" + 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++;
    }
}
...