在Selenium中标识具有相同类名的Web元素

时间:2014-06-10 12:59:35

标签: selenium twitter selenium-webdriver selenium-ide

我试图通过selenium获取推文数量(推文数)

以下是页面来源:

  <li class="DashboardProfileCard-stat Arrange-sizeFit">
    <a class="DashboardProfileCard-statLink u-textUserColor u-linkClean u-block"
        title="1 Tweet"
        href="/saisiva14"
        data-element-term="tweet_stats">
      <span class="DashboardProfileCard-statLabel u-block">Tweets</span>
      <span class="DashboardProfileCard-statValue" data-is-compact="false">1</span>
    </a>
  </li>
  <li class="DashboardProfileCard-stat Arrange-sizeFit">
      <a class="DashboardProfileCard-statLink u-textUserColor u-linkClean u-block"
          title="38 Following"
          href="/following"
          data-element-term="follower_stats">
        <span class="DashboardProfileCard-statLabel u-block">Following</span>
        <span class="DashboardProfileCard-statValue" data-is-compact="false">38</span>
      </a>
    </li>
    <li class="DashboardProfileCard-stat Arrange-sizeFit">
      <a class="DashboardProfileCard-statLink u-textUserColor u-linkClean u-block"
          title="4 Followers"
          href="/followers"
          data-element-term="following_stats">
        <span class="DashboardProfileCard-statLabel u-block">Followers</span>
        <span class="DashboardProfileCard-statValue" data-is-compact="false">4</span>
      </a>
    </li>

我无法找到网页元素以获取推文,关注者和以下。原因是span类名称对所有这些元素都很常见。请帮助我。

4 个答案:

答案 0 :(得分:1)

要获得推文/关注/关注者的数量,您可以尝试以下语句:

System.out.println(driver.findElement(By.xpath("//a[contains(@title, 'Tweet')]/span[2]")).getText());
System.out.println(driver.findElement(By.xpath("//a[contains(@title, 'Following')]/span[2]")).getText());
System.out.println(driver.findElement(By.xpath("//a[contains(@title, 'Followers')]/span[2]")).getText());

要点击推文/关注/关注者链接,您可以尝试以下声明:

driver.findElement(By.xpath("//a[contains(@title, 'Tweet')]")).click();
driver.findElement(By.xpath("//a[contains(@title, 'Following')]")).click();
driver.findElement(By.xpath("//a[contains(@title, 'Followers')]")).click();

driver.findElement(By.xpath("//a[./span[text()='Tweets']]")).click();
driver.findElement(By.xpath("//a[./span[text()='Following']]")).click();
driver.findElement(By.xpath("//a[./span[text()='Followers']]")).click();

以上陈述对我来说很好。

答案 1 :(得分:0)

试试这个

IList<IWebElement> elements = driver.FindElements(By.ClassName("DashboardProfileCard-stat"));
foreach (IWebElement element in elements)
   {
     IWebElement ele = element.FindElement(By.ClassName("DashboardProfileCard-statLabel"));
     if (ele.Text == "Tweets")
        {
          return element.FindElement(By.ClassName("DashboardProfileCard-statValue")).Text;
        }
   }

这是使用C#,如果使用任何其他语言,您可以相应地进行修改。

答案 2 :(得分:0)

选择器.DashboardProfileCard-stat span:nth-child(2)应该为您提供指向计数的Web元素的集合。例如在Java中:

ArrayList<WebElement> elements = driver.findElements(By.cssSelector(".DashboardProfileCard-stat span:nth-child(2)"))

然后,您可以使用elements.get(0).getText()来发送推文。 elements.get(1).getText()跟随。追随者elements.get(2).getText()。所以:

ArrayList<WebElement> elements = driver.findElements(By.cssSelector(".DashboardProfileCard-stat span:nth-child(2)")); int tweets = elements.get(0).getText(); int following = elements.get(1).getText(); int followers = elements.get(2).getText();



当然,请进行适当的安全检查等。在访问之前检查阵列的长度。

答案 3 :(得分:0)

此代码在Java :)

  1. 将“SPAN”的所有父母捕获到一个集合项中。
  2. 迭代集合以查找span元素(<a>标记的子元素)并根据类名变体 statLabel / statValue <捕获文本/强>”。

    List<WebElement> webElement = driver.findElements(By.xpath("//li[@class='DashboardProfileCard-stat Arrange-sizeFit']//a"));
    
    for (WebElement element : webElement) {
        System.out.println(element.findElement(By.xpath("//span[contains(@class,'statLabel')]")).getText());
        System.out.println(element.findElement(By.xpath("//span[contains(@class,'statValue')]")).getText());
    }