如何在 IE 的下拉列表中验证所选选项
How to verify the selected option in a dropdown in IE
我在验证下拉菜单中是否 select 选项时遇到了一些问题。在我的应用程序中,我有一个包含 10 个选项的下拉列表。如果我 select 选项 5,我想验证它实际上是 selected。
使用 Firefox 和 Chrome,非常简单。下面是我的下拉列表和选项的 HTML。
<select class="Test-field-ddlist" runat="server" onchange="javascript:setTimeout('__doPostBack(\'ctl00$cphMainContent$ctl17\',\'\')', 0)" name="ctl00$cphMainContent$ctl17">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5" selected="selected">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
为了验证 selected 选项,我使用 CSS selector 创建了一个对象。然后我验证了文本等于 5.
public static final String ManagerPage_DropdownSelection = "css=.Test-field-ddlist option[selected]";
String actualtext = driver.getSingleElement(ManagerPage_DropdownSelection).getText();
Assert.assertEquals(actualtext, "5");
我在使用 IE 时遇到的问题是 HTML 不同。当我检查元素时,HTML 看起来像这样。没有什么说 5 是 selected
<SELECT name=ctl00$cphMainContent$ctl17 class=Test-field-ddlist onchange="javascript:setTimeout('__doPostBack(\'ctl00$cphMainContent$ctl17\',\'\')', 0)" runat="server" sizcache="0" sizset="0">
<OPTION value=1>1</OPTION>
<OPTION value=2>2</OPTION>
<OPTION value=3>3</OPTION>
<OPTION value=4>4</OPTION>
<OPTION value=5>5</OPTION>
<OPTION value=6>6</OPTION>
<OPTION value=7>7</OPTION>
<OPTION value=8>8</OPTION>
<OPTION value=9>9</OPTION>
<OPTION value=10>10</OPTION>
"selected" 文本似乎被隐藏了。如果我将 HTML 复制并粘贴到文本编辑器中,我就可以看到文本 "selected"。与 Firefox 和 Chrome 不同,没有 selected 的属性。相反,selected 文本被添加到 value 属性。
<SELECT name=ctl00$cphMainContent$ctl17 class=Test-field-ddlist onchange="javascript:setTimeout('__doPostBack(\'ctl00$cphMainContent$ctl17\',\'\')', 0)" runat="server" sizcache="0" sizset="0">
<OPTION value=1>1</OPTION>
<OPTION value=2>2</OPTION>
<OPTION value=3>3</OPTION>
<OPTION value=4>4</OPTION>
<OPTION value=5 selected>5</OPTION>
<OPTION value=6>6</OPTION>
<OPTION value=7>7</OPTION>
<OPTION value=8>8</OPTION>
<OPTION value=9>9</OPTION>
<OPTION value=10>10</OPTION>
我可以创建一个 select 或者它会在所有浏览器中找到 selected 下拉选项吗?或者是否有更好的方法来验证下拉列表的 selected 值?我试过下面的方法。它似乎有效,但需要很长时间才能完成(大约 5 分钟)。
protected void verifyDropDownSelection(String selector, String expectedvalue) {
List<String> listA = new ArrayList<String>();
listA.add(expectedvalue);
List<String> listB = new ArrayList<String>();
List<Element> DDSelected = driver.getSingleElement(selector).useAsDropdown().getAllSelectedOptions();
for(Element selectedoption : DDSelected) {
String actualtext = selectedoption.getText();
listB.add(actualtext);
}
log.info("INFO: Verifying the selected option in the dropdown");
Assert.assertEquals(listB, listA);
log.info("PASS: "+expectedvalue+" was the selected option in the dropdown");
}
我会让 Select
class 处理此案:
WebElement select = driver.findElement(By.name("ctl00$cphMainContent$ctl17"));
Select dropDown = new Select(select);
String selected = dropDown.getFirstSelectedOption().getText();
Assert.assertEquals(selected, "5");
我在验证下拉菜单中是否 select 选项时遇到了一些问题。在我的应用程序中,我有一个包含 10 个选项的下拉列表。如果我 select 选项 5,我想验证它实际上是 selected。
使用 Firefox 和 Chrome,非常简单。下面是我的下拉列表和选项的 HTML。
<select class="Test-field-ddlist" runat="server" onchange="javascript:setTimeout('__doPostBack(\'ctl00$cphMainContent$ctl17\',\'\')', 0)" name="ctl00$cphMainContent$ctl17">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5" selected="selected">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
为了验证 selected 选项,我使用 CSS selector 创建了一个对象。然后我验证了文本等于 5.
public static final String ManagerPage_DropdownSelection = "css=.Test-field-ddlist option[selected]";
String actualtext = driver.getSingleElement(ManagerPage_DropdownSelection).getText();
Assert.assertEquals(actualtext, "5");
我在使用 IE 时遇到的问题是 HTML 不同。当我检查元素时,HTML 看起来像这样。没有什么说 5 是 selected
<SELECT name=ctl00$cphMainContent$ctl17 class=Test-field-ddlist onchange="javascript:setTimeout('__doPostBack(\'ctl00$cphMainContent$ctl17\',\'\')', 0)" runat="server" sizcache="0" sizset="0">
<OPTION value=1>1</OPTION>
<OPTION value=2>2</OPTION>
<OPTION value=3>3</OPTION>
<OPTION value=4>4</OPTION>
<OPTION value=5>5</OPTION>
<OPTION value=6>6</OPTION>
<OPTION value=7>7</OPTION>
<OPTION value=8>8</OPTION>
<OPTION value=9>9</OPTION>
<OPTION value=10>10</OPTION>
"selected" 文本似乎被隐藏了。如果我将 HTML 复制并粘贴到文本编辑器中,我就可以看到文本 "selected"。与 Firefox 和 Chrome 不同,没有 selected 的属性。相反,selected 文本被添加到 value 属性。
<SELECT name=ctl00$cphMainContent$ctl17 class=Test-field-ddlist onchange="javascript:setTimeout('__doPostBack(\'ctl00$cphMainContent$ctl17\',\'\')', 0)" runat="server" sizcache="0" sizset="0">
<OPTION value=1>1</OPTION>
<OPTION value=2>2</OPTION>
<OPTION value=3>3</OPTION>
<OPTION value=4>4</OPTION>
<OPTION value=5 selected>5</OPTION>
<OPTION value=6>6</OPTION>
<OPTION value=7>7</OPTION>
<OPTION value=8>8</OPTION>
<OPTION value=9>9</OPTION>
<OPTION value=10>10</OPTION>
我可以创建一个 select 或者它会在所有浏览器中找到 selected 下拉选项吗?或者是否有更好的方法来验证下拉列表的 selected 值?我试过下面的方法。它似乎有效,但需要很长时间才能完成(大约 5 分钟)。
protected void verifyDropDownSelection(String selector, String expectedvalue) {
List<String> listA = new ArrayList<String>();
listA.add(expectedvalue);
List<String> listB = new ArrayList<String>();
List<Element> DDSelected = driver.getSingleElement(selector).useAsDropdown().getAllSelectedOptions();
for(Element selectedoption : DDSelected) {
String actualtext = selectedoption.getText();
listB.add(actualtext);
}
log.info("INFO: Verifying the selected option in the dropdown");
Assert.assertEquals(listB, listA);
log.info("PASS: "+expectedvalue+" was the selected option in the dropdown");
}
我会让 Select
class 处理此案:
WebElement select = driver.findElement(By.name("ctl00$cphMainContent$ctl17"));
Select dropDown = new Select(select);
String selected = dropDown.getFirstSelectedOption().getText();
Assert.assertEquals(selected, "5");