如何显示具有特定属性的选项的文本?

时间:2014-01-08 20:48:50

标签: java selenium

我有一个包含多个选项的下拉列表。

<select id="ctl00_cphMainContent_dq16_response" name="ctl00$cphMainContent$dq16$response">
  <option value="0" selected="selected">Please Select...</option>
  <option value="282">Technology Architecture</option>
  <option value="281">The Avengers</option>
  <option value="280">Human Resources</option>
  <option value="279">R&D</option>
  <option value="278">Quality Services</option>
  <option value="277">Publishing</option>
  <option value="275">Product Development</option>
  <option value="284">MI6 - British Secret Service</option>
  <option value="285">Finance</option>
  <option value="276">Public Relations</option>
  <option value="283">Client Services</option>
</select>

对于我的自动化测试,我有一个用于创建对象的类。所以对于我的所有下拉菜单,我都创建了一个对象。这是我为上面的下拉列表创建的对象。

public static final String Basic7_Dropdown = "css=select#ctl00_cphMainContent_dq16_response";

我在其他方法中使用此对象来测试下拉列表。例如,我有一个方法,我想验证下拉列表中的所有可用选项。

protected void verifyDropDownValues(String selector, String expectedvalue) {
List<String> listA = new ArrayList<String>();
listA.add(expectedvalue);
List<String> listB = new ArrayList<String>();
List<Element> options = driver.getElements(selector);
    for(Element opt : options){
    String actualtext = opt.getText();
    listB.add(actualtext);
}
Assert.assertEquals(listB, listA);
}

当我在测试中使用此方法时,selector参数是我创建的Basic7_Dropdown对象。

verifyDropDownValues(AppObjects.Basic7_Dropdown, "Please Select...\nTechnology Architecture\nThe Avengers\nHuman Resources\nR&D\nQuality Services\nPublishing\nProduct Development\nMI6 - British Secret Service\nFinance\nPublic Relations\nClient Services");

通过使用我创建的相同Basic7_Dropdown对象,如何创建一个方法,找到属性为selected =“selected”的选项,然后显示该文本。

我尝试了下面的代码,希望让它返回“Please Select ...”的选定值。但是,它不会返回任何选项。

List<Element> options = driver.getElements(AppObjects.Basic1_Dropdown);
    for(Element opt : options){
        if (opt.getAttribute("selected") != null) {
          String actualtext = opt.getText();
          System.out.println(actualtext);
        }
    }

我不相信我的名单会得到所有选项。当我运行下面的代码时,它只打印“null”。

List<Element> options6 = driver.getElements(AppObjects.Basic1_Dropdown);
    for(Element opt : options6){
        System.out.println(opt.getAttribute("selected"));

1 个答案:

答案 0 :(得分:1)

使用CSS只需找到<option>并返回文字。

String textValue = driver.findElement(By.cssSelector("select[id^='ct100'][id$='response'] option[selected='selected']")).getText();
// textValue = "Please Select..." now

另外,如果您是使用java的selenium的新手,我是否可以对Getting Started with Selenium框架感兴趣。它是一个经过验证的框架,我已经使用并整合到企业系统中。

打印具有selected属性的所有元素的文本..执行:

for (WebElement option : driver.findElements(By.cssSelector("select[id^='ct100'][id$='response'] option[selected='selected']")))
    System.out.println(option.getText());