Java 如何获取Div中的子项计数甚至文本列表

Java 如何获取Div中的子项计数甚至文本列表,java,testing,selenium,webdriver,Java,Testing,Selenium,Webdriver,我在TestNG中使用Java和Webdriver。我有一个文本框,用户在其中输入药物名称,然后单击Go按钮。然后,程序运行对RxNorm的查询,并返回药物名称的强度和形式。该网页有一个id为WhatDage的div,该div是一个按钮列表,具有该药物的适当强度/形式 我的问题是,如何获得该div中的元素数或显示给用户的强度/形式列表?最后,我将用相同的药物名称给RxNorm打电话,并比较结果 我尝试了以下方法: (1) String resultsWebPage = driver.findEl

我在TestNG中使用Java和Webdriver。我有一个文本框,用户在其中输入药物名称,然后单击Go按钮。然后,程序运行对RxNorm的查询,并返回药物名称的强度和形式。该网页有一个id为
WhatDage
的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);
第一个简单示例返回id。第二个示例只给出了1的输出。我输入的药物名称在
whatDage
div中返回11个结果

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>

20毫克肠溶胶囊
30mg肠溶胶囊
60毫克肠溶胶囊

输入
元素被隐藏,而
按钮
元素就是屏幕上显示的元素

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

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

<div id="whatDosage">
    <div class="strength>Data 1</div>
    <div class="strength>Data 2</div>
    <div class="strength>Data 3</div>
</div>
它所做的是选择“whatDage”div,而不是您所需要的子元素。既然有一个“whatDage”div,这就解释了doing.size()返回1

你应该做一些这样的事情:

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

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

您需要更改策略,以便根据代码定位strength/form元素。有些approach是By.id、By.className、By.xpath等,可以参考selenium文档。

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

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

<div id="whatDosage">
    <div class="strength>Data 1</div>
    <div class="strength>Data 2</div>
    <div class="strength>Data 3</div>
</div>
它所做的是选择“whatDage”div,而不是您所需要的子元素。既然有一个“whatDage”div,这就解释了doing.size()返回1

你应该做一些这样的事情:

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

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

您需要更改策略,以便根据代码定位strength/form元素。有些approach是By.id、By.className、By.xpath等,可以参考selenium文档。

假设@nrbafna对HTML外观的描述是正确的,这很简单。要获得“力量”列表,只需:

当然,将它们全部打印出来是:

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

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

当然,将它们全部打印出来是:

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

如果你想要一个有用的答案,你需要分享HTML的外观。如果你想要一个有用的答案,你需要分享HTML的外观。谢谢你,你的解决方案也很有用。谢谢你,你的解决方案也很有用。
for (WebElement result : results) {
    System.out.println(result.getText());
}