如何使用 selenium webdriver 打印 <nobr> 标签中的值

How to print values present in <nobr> tag using selenium webdriver

如果有人能向我指出正确的方向,那将非常有帮助。 我正在尝试打印 nobr 标签中存在的值。

这是我的代码。

import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.AfterTest;

public class appannieuserrating {
    public static WebDriver driver;
  @Test
  public void f() throws Exception{
      driver.findElement(By.id("login-button")).click();
         driver.findElement(By.id("username")).sendKeys("sample.test@gmail.com");
         driver.findElement(By.id("password")).sendKeys("password");
         driver.findElement(By.id("login_submit_button")).click();
         Thread.sleep(5000);
         driver.navigate().to("https://www.appannie.com/apps/ios/app/storage-hunters-uk-the-game/reviews/?date=2015-07-06~2015-07-06");
         Thread.sleep(5000);

         String s1 = driver.findElement(By.cssSelector(".ngCellText.cell-inner.ng-scope")).findElement(By.tagName("img")).getAttribute("src");
         System.out.println(s1);

  }
  @BeforeTest
  public void beforeTest() {
      driver = new FirefoxDriver();
      driver.get("https://www.appannie.com/");
  }

  @AfterTest
  public void afterTest() {
  }

}



    <div class="ngCanvas" ng-style="canvasStyle()" style="height: 467px;">
<div class="ng-scope ngRow even" ng-row="" ng-class="row.alternatingRowClass()" ng-click="row.toggleSelected($event)" ng-repeat="row in renderedRows" ng-style="rowStyle(row)" style="top: 0px; height: 58px;">
<div class="ngCell col0 colt0" ng-class="{'sorted': col.sortDirection}" ng-repeat="col in renderedColumns" style="height: 58px;">
<div class="ngVerticalBar ngVerticalBarVisible" ng-class="{ ngVerticalBarVisible: !$last }" ng-style="{height: rowHeight}" style="height: 58px;"> </div>
<div ng-cell="">
<div class="ngCellText cell-inner ng-scope">
<span stars="row.getProperty(col.field)" aa-stars="">
<nobr>
<img alt="*" src="/media/pictures/star-whole.png">
<img alt="*" src="/media/pictures/star-whole.png">
<img alt="*" src="/media/pictures/star-whole.png">
<img alt="*" src="/media/pictures/star-whole.png">
<img alt="*" src="/media/pictures/star-whole.png">
</nobr>
</span>
</div>
</div>
</div>

这里我正在尝试计算 "nobr" 标签中的星星数量,以某种方式打印空值。

伙计们,请给我指明正确的方向。

我会这样做:

 List<WebElement> elements = driver.findElement(By.xpath("//span[@aa-stars]/nobr")).findElements(By.tagName("img"));
 int counter = 0;

 for(WebElement we: elements) {
     if("*".equals(we.getAttribute("alt"))) {
         counter++;
     }
 }

 System.out.println(counter);

不幸的是,您的密码不正确,所以我无法自己尝试 :D :D 在本地尝试了相同的密码 html - 应该可以。

UPD:

我忘了告诉您 - 在您尝试查找 img 元素时 - 您忽略了 nobr。是的。它也在 DOM 中。如果你想找到任何下一个 img - 这样做:

.findElement(By.xpath("//img"));

如果您使用 by tagName - 假定您搜索的是直系子代。

UPD 2

如果你依赖src,认为这个img应该是star,考虑一下:

 for(WebElement we: elements) {

     String text = we.getAttribute("src");
     if(text!=null) {
         if(text.contains("star"){
              counter++;
         }
     }
 }

UPD 3

        List<WebElement> elements = driver.findElement(By.xpath("//span[@aa-dtars]/nobr")).findElements(
            By.tagName("‌​img"));

    int counter = 0;

    String starPicLink = "/media/pictures/star-whole.png";
    for (WebElement we : elements) {
        String text = we.getAttribute("src");

        if (starPicLink.equals(text)) {
           counter++;
        }
    }

    System.out.println(counter + " Star");

UPD 4

pastie.org/10292596#34 - 工作版本

我在下面尝试了一些 link 来识别 nobr 标签内的输入标签:

xpath=//div[@id='div0_17']/span[@id='outer0_366']/nobr/input