我在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
元素显示在屏幕上。
答案 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)
假设@nrbafna对于HTML的外观是正确的,那很简单。要获得“力量”列表,只需:
List<WebElement> results = driver.findElements(By.xpath("id('whatDosage')/div"));
当然,它们的数量仅仅是:
int resultsCount = results.size();
当然,打印它们是:
for (WebElement result : results) {
System.out.println(result.getText());
}