Selenium 2 + WebDriver + .NET: невозможно получить текст параметров выбора, если для выбора отображается: нет;

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

<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. Это работает, если я удалю JavaScript на странице, которая добавляет стиль display:none;. Однако это не постоянное решение, поскольку этот выбор необходимо скрыть, поскольку он расширяется с помощью FCBKcomplete< /а>.

Как получить текст скрытых параметров выбора с помощью Selenium 2/WebDriver в .NET?


person adamjford    schedule 01.02.2011    source источник


Ответы (2)


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

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

person Sergii Pozharov    schedule 04.02.2011
comment
Это имеет смысл. Полагаю, нам нужно выяснить, как найти информацию из раскрывающегося списка автозаполнения, который отображает FCBKComplete. Спасибо! - person adamjford; 04.02.2011
comment
Также вы можете выполнить некоторый JavaScript, который изменит свойство отображения, а затем получит текст. Вы можете сделать это, приведя IWebDriver к IJavascriptExecutor (я использую Java, поэтому у меня могут быть ошибки в именах интерфейсов) для выполнения скрипта. - person Sergii Pozharov; 05.02.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++;
    }
}
person Ed Martin    schedule 06.04.2011