0

我正在使用 Java 和 Webdriver 和 TestNG。我有一个文本框,用户在其中输入药物名称,然后单击“开始”按钮。然后程序运行对 RxNorm 的查询并返回药物名称的强度和形式。该网页有一个 id 的 div whatDosage,其中 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 的输出。我输入的药物名称将 11 个结果返回到whatDosagediv

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元素是屏幕上显示的元素。

4

2 回答 2

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

You will want to change the strategy to locate the strength/form elements as per your code. Some apporoached are By.id, By.className, By.xpath, etc. and can refer to the selenium docs for Locating UI elements.

于 2013-02-12T04:51:15.207 回答
0

Assuming @nrbafna is correct about what your HTML looks like, it's simple. To get the list of "strength"s, just:

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

Then of course the count of them is merely:

int resultsCount = results.size();

And of course printing them all is:

for (WebElement result : results) {
    System.out.println(result.getText());
}
于 2013-02-12T23:02:39.020 回答