如何获得计数甚至是一个Div中的儿童文本列表

时间:2013-02-11 19:58:38

标签: java testing selenium webdriver

我在TestNG上使用Java和Webdriver。我有一个文本框,用户输入药物名称,然后单击Go按钮。然后程序运行对RxNorm的查询并返回药物名称的强度和形式。该网页有一个ID为whatDosage的div,其中div是一个按钮列表,其中包含该药物的相应强度/形式。

我的问题是,如何获得该div中的元素数量或显示给用户的力量/表单列表?最后,我将使用相同的药物名称调用RxNorm并比较结果。

我尝试了以下内容:

(1) String resultsWebPage = driver.findElements(By.id("whatDosage")).toString();
System.out.println(resultsWebPage);

(2) int resultsWebPage = driver.findElements(By.id("whatDosage")).size();
System.out.println(resultsWebPage);

第一个示例simple返回id。第二个只给了我1的输出。我输入的药物名称将11个结果返回到whatDosage div

div看起来像这样:

<div id="whatDosage" class="btn-group btn-group-vertical buttons-radio span12"    role="radiogroup">
    <input id="dosage1" class="hide" type="radio" value="20 MG Enteric Coated Capsule" name="dosage">
    <button class="btn btn-large" rel="dosage1" role="radio" type="button">20 MG Enteric Coated Capsule</button>
    <input id="dosage2" class="hide" type="radio" value="30 MG Enteric Coated Capsule" name="dosage">
    <button class="btn btn-large" rel="dosage2" role="radio" type="button">30 MG Enteric Coated Capsule</button>
    <input id="dosage3" class="hide" type="radio" value="60 MG Enteric Coated Capsule" name="dosage">
    <button class="btn btn-large" rel="dosage3" role="radio" type="button">60 MG Enteric Coated Capsule</button>
</div>

input元素被隐藏,button元素显示在屏幕上。

2 个答案:

答案 0 :(得分:3)

这可以通过更改元素定位策略来解决。

我假设您网页的骨架如下所示。虽然这可能不准确,但它会让您了解使用方法。

<div id="whatDosage">
    <div class="strength>Data 1</div>
    <div class="strength>Data 2</div>
    <div class="strength>Data 3</div>
</div>

运行代码(2)时:

int resultsWebPage = driver.findElements(By.id("whatDosage")).size();

它的作用是它选择“whatDosage”div而不是你需要的子元素。现在因为有一个“whatDosage”div,这解释了做.size()返回1。

你应该做的就是:

List<WebElements> results = driver.findElements(By.className("strength"));
System.out.println(results.size());

for (WebElement result : results){
    System.out.println(result.getText());
}

这将为您提供以下输出:

3
Data 1
Data 2
Data 3

您需要更改策略,以根据您的代码找到strength / form元素。一些apporo的是By.id,By.className,By.xpath等,可以参考Locating UI elements的selenium文档。

答案 1 :(得分:0)

假设@nrbaf​​na对于HTML的外观是正确的,那很简单。要获得“力量”列表,只需:

List<WebElement> results = driver.findElements(By.xpath("id('whatDosage')/div"));

当然,它们的数量仅仅是:

int resultsCount = results.size();

当然,打印它们是:

for (WebElement result : results) {
    System.out.println(result.getText());
}