Selenium 2+WebDriver+.NET:如果select为“显示:无”,则无法检索select选项的文本

Selenium 2+WebDriver+.NET:如果select为“显示:无”,则无法检索select选项的文本,.net,.net-3.5,nunit,webdriver,selenium-webdriver,.net,.net 3.5,Nunit,Webdriver,Selenium Webdriver,我在页面上选择了以下内容: <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<

我在页面上选择了以下内容:

<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>
第二个断言失败,因为options集合中的所有元素的文本对象都是空字符串。如果我删除添加显示的页面上的JavaScript,它就会工作:无;风格但这并不是一个永久的解决方案,因为这个选择需要隐藏,因为它是由扩展的


如何使用.NET中的Selenium 2/WebDriver获取隐藏选择选项的文本?

WebDriver旨在模拟真实的用户交互。如果某个东西不可见,那么真正的用户就看不到它,WebDriver也看不到它


您可以模拟用户操作—单击、悬停或使您的选择可见的任何操作—然后找到您的选择的选项并检查它们。

我遇到了相同的问题。我发现,如果我检索所有元素并遍历它们,我就可以确定哪些元素是由JS或CSS设置为显示的,然后与它们交互

我有一个表单字段,它的名称与附加的动态ID相同,就像字段ID的fieldname_u2;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++;
    }
}

这是有道理的。我想,我们必须找出如何从FCBKComplete呈现的自动完成下拉列表中找到信息。谢谢您还可以执行一些JavaScript来更改显示属性,然后获取文本。您可以通过将IWebDriver强制转换为IJavascriptExecutor来实现这一点,因为我正在使用Java,所以在执行脚本时可能会出现接口名称错误
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++;
    }
}