从Selenium中获取UL标签的所有值

时间:2014-03-31 13:08:37

标签: java selenium selenium-webdriver css-selectors

我有以下HTML代码。我想获取超链接标记中的所有文本。

<div ng-model='sCur'>
   <ul sa-toggle-menu="" role="menu" class="sa-dropdown-menu">
      <li><a ng-bind="item[lebel]" ng-click="itemSelect(item)" class="ng-binding">1</a>
      <li><a ng-bind="item[lebel]" ng-click="itemSelect(item)" class="ng-binding">2</a>
      <li><a ng-bind="item[lebel]" ng-click="itemSelect(item)" class="ng-binding">3</a> 
   </ul>
</div>

我正在尝试下面的java代码。但我得到空文本值。

List<WebElement> currencies = driver.findElements(By.cssSelector("div[ng-model='sCur'] ul li"));

for (WebElement option : currencies) {
    System.out.println("Text :" + option.getText());
}

4 个答案:

答案 0 :(得分:1)

好的..这是问题所在。

由于数据绑定到运行时的元素,因此DOM中不存在该列表。只有在单击下拉箭头时,元素才会添加到DOM中。

触发组合框单击后,所有元素都变为有效且getText()工作。

driver.findElements(By.cssSelector("div[ng-model='sCur'] ul")).click();

List<WebElement> currencies = driver.findElements(By.cssSelector("div[ng-model='sCur'] ul li a"));

for (WebElement option : currencies) {
    System.out.println("Text :" + option.getText());
}

答案 1 :(得分:0)

因为您选择的是li元素,而不是a元素。使用

By.cssSelector("div[ng-model='sCur'] ul li a")

答案 2 :(得分:0)

试试这个:

List<WebElement> currencies = driver.findElements(By.className("ng-binding"));  
for (WebElement option : currencies) {
  System.out.println("Text :" + option.getAttribute("ng-bind"));
  System.out.println("Text :" + option.getText());
}

答案 3 :(得分:0)

WebDriver driver=new FirefoxDriver();
driver.get("http://www.naukri.com/");
// Click on dropdown
driver.findElement(By.xpath(".//[@id='exp_dd']/div[1]/span")).click();
//Capture all dropdown element in a List
java.util.List<WebElement> elements =driver.findElements(By.xpath(".//*[@id='exp_dd']/div[2]//ul/li"));

for(WebElement ele:elements){
    String str=ele.getText();
    if(str.equalsIgnoreCase("8"))
        ele.click();
}