【问题标题】:getText() method prints all the strings in the list instead of single string using Selenium and JavagetText() 方法使用 Selenium 和 Java 打印列表中的所有字符串而不是单个字符串
【发布时间】:2022-01-11 03:10:45
【问题描述】:

HTML 代码:

<div id="ajax_listOfOptions" style="display: block; top: 243px; left: 373px; z-index: 10009;">
    <div id="13020007" class="optionDivSelected">Infosys Ltd.</div>
    <div id="14094980" class="optionDiv">India Infrastructure Trust</div>
    <div id="13020033" class="optionDiv">Tata Consultancy Services Ltd.</div>
    <div id="12150008" class="optionDiv">Reliance Industries Ltd.</div>
    <div id="14030001" class="optionDiv">State Bank of India</div>
    <div id="14030055" class="optionDiv">HDFC Bank Ltd.</div>
    <div id="12520002" class="optionDiv">Hindustan Unilever Ltd.</div>
    <div id="14080001" class="optionDiv">Housing Development Finance Corporation Ltd.</div>
    <div id="14030056" class="optionDiv">ICICI Bank Ltd.</div>
    <div id="14060023" class="optionDiv">Bajaj Finance Ltd.</div>
</div>

示例代码:

List<WebElement>li=driver.findElements(By.id("ajax_listOfOptions"));
for(WebElement wb:li)
{
if(wb.getText().contains("Tata"))
System.out.print(wb.getText());
}

这应该只打印包含“Tata”的字符串(即 Tata Consultancy Services),但代码正在打印列表中的所有字符串

注意:该列表包含填充有 ajax 自动建议的字符串。

输出:

Infosys Ltd.
India Infrastructure Trust
Tata Consultancy Services Ltd.
Reliance Industries Ltd.
State Bank of India
HDFC Bank Ltd.
Hindustan Unilever Ltd.
Housing Development Finance Corporation Ltd.
ICICI Bank Ltd.
Bajaj Finance Ltd.

【问题讨论】:

  • 您需要遍历driver.findElements(By.id("ajax_listOfOptions"));返回的列表中唯一项的子元素。
  • 当我使用 Listli=driver.findElements(By.className("optionDiv"));那么它工作正常,但不是上面的代码。为什么?
  • 因为您上面的代码找到了div id="ajax_listOfOptions" 并对其执行了getText
  • 如果您使用By.className("optionDiv"),则永远不会在列表中选择包含optionDivSelectedInfosys Ltd.。请参阅下面的answer
  • 是的,明白了。非常感谢

标签: java html selenium xpath css-selectors


【解决方案1】:

根据您的代码行,您使用的是By.id("ajax_listOfOptions"),它标识整个TABLE 元素。所以列表 LI 只包含一个元素,它确实包含字符串 Tata。因此整个 TABLE 文本被打印出来。


要打印文本Tata Consultancy Services Ltd.,您可以使用以下Locator Strategies

  • 使用cssSelector

    List<WebElement>li=driver.findElements(By.cssSelector("div#ajax_listOfOptions div"));
    for(WebElement wb:li)
    {
        if(wb.getText().contains("Tata"))
            System.out.print(wb.getText());
    }
    
  • 使用xpath

    List<WebElement>li=driver.findElements(By.xpath("//div[@id='ajax_listOfOptions']//div"));
    for(WebElement wb:li)
    {
        if(wb.getText().contains("Tata"))
            System.out.print(wb.getText());
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多