【问题标题】:Verifying text between <div> using Selenium使用 Selenium 验证 <div> 之间的文本
【发布时间】:2012-07-18 13:52:20
【问题描述】:

我需要验证网页上的特定插槽是否已加载。为此,我在 main() 函数中使用 Selenium WebDriver(我应该使用 JUnit 测试用例吗?)。

有哪些方法可以在具有特定 ID 的任何 &lt;div&gt; 之间检索文本?

如果给定this page:

<div id="center-2" class="promo">
    <div class="unified_widget rcmBody">
        <span class="logo"><img src="someimage.gif" /></span>
        <span class="headline">Make money by Selling items on Amazon</span>
        <span class="link"><a href="/content/sell-on-amazon.htm">Selling On Amazon</a></span>
        <span class="body">Sell your items on Amazon.com. Amazon can help you grow your business and reach more customers.</span>
        <div class="h_rule"></div>
    </div>
</div>

&lt;div id = center-2&gt;给出时,我需要提取

“通过在亚马逊上销售商品赚钱”,
“在亚马逊上销售”,
“在 Amazon.com 上销售您的商品。亚马逊可以帮助您发展业务并吸引更多客户。”

我应该使用哪种方法?

【问题讨论】:

  • @Slanec:您是否使用任何 HTML 美化器来格式化上述代码?而且我在粘贴代码 sn-p 时也遇到问题,因为每一行都必须移动 4 space characters ,我们可以使用某种标签,比如 [code] [/code] 吗?
  • IntelliJ IDEA 具有格式化代码的功能,因此我使用了该功能,然后手动删除了(希望如此)不相关的部分。有关插入 SO 的代码,请参阅this post

标签: java selenium webdriver selenium-chromedriver


【解决方案1】:

为确保元素已加载,请使用Implicit and Explicit waits

通常,当您需要与元素交互时,隐式等待就足够了。设置后,它将用于每个元素查找。根据我的经验,这对于 95% 的情况来说已经足够了。

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

如果您需要更高级的等待(或只使用一次等待),可以使用显式等待。


我知道有三种常用的方法来检索具有特定id 的元素:

  1. 首选方式:

    driver.findElement(By.id("elemId"));
    
  2. 如果您需要从一个元素开始然后搜索其后代,这是一个好方法:

    driver.findElement(By.cssSelector("#elemId"));
    driver.findElement(By.xpath("id('elemId')"));
    
  3. 很多人使用的方式,因为他们对 XPath 很满意:

    driver.findElement(By.xpath("//*[@id='elemId']"));
    

要了解有关CSS selectorsXPath 的更多信息,请参阅网络上的任何教程。


关于正文:

String text = driver.findElement(By.id("center-2")).getText();
System.out.println(text);

输出

通过在亚马逊上销售商品赚钱 Amazon.com 上的商品。亚马逊可以帮助您发展业务并扩大影响范围 更多的客户。

如果你想独立获得这三样东西,请使用例如:

String headline = driver.findElement(By.cssSelector("#center-2 .headline")).getText();
System.out.println(headline);

String link = driver.findElement(By.cssSelector("#center-2 .link")).getText();
System.out.println(link);

String body = driver.findElement(By.cssSelector("#center-2 .body")).getText();
System.out.println(body);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-05
    • 2019-05-23
    • 2018-01-17
    • 2013-07-15
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多