我有以下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());
}
答案 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();
}