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