为输入找到正确的嵌套类 - Java - Selenium Webdriver

时间:2015-08-25 12:58:19

标签: java selenium selenium-webdriver

我正在测试的页面有用于数据输入的文本框,但它们嵌套在同名的类中。我如何找到正确的人知道哪一个输入数据?

示例代码:

<span class="sectionWrapper"
   <div class="lineItem"
      <div class="Name" title="Fire" </div>
      <div class="itmeLimit"
         <input name="limit">
      </div>
   </div>
   <div class="lineItem"
      <div class="Name" title="Wind" </div>
      <div class="itmeLimit"
         <input name="limit">
      </div>
   </div>
   <div class="lineItem"
      <div class="Name" title="Hail" </div>
      <div class="itmeLimit"
         <input name="limit">
      </div>
   </div>
</span>

所以基本上,我需要在输入名称=“限制”字段中输入值。如何为标题Wind输入“20,000”?

以下是一段实际代码:

<span class="sectionWrapper" sort-order="27">
     <div class="linItm_tableTopWrap tableTopWrap_ifSubLine">
     <div class="subLine_tableRowsHeader">
<div class="linItm_tableRow subLine_tableRow" sort-order="28">
<div class="linItm_visibleRow visibleRow_ifSubLine">
<a class="linItm_accordionArrow subLine" href="#" style="display: none;"/>
<a class="remove removeLineItem" style="visibility: hidden" name="A. Dwelling - Fire" href="#"/>
<div class="linItm_lineItemName" title="A. Dwelling - Fire">A. Dwelling - Fire</div>
<div class="linItm_date">08/25/2015</div>
<div class="linItm_limit_wrap">
<div class="linItm_limit_dollarInput">
<input class="currencyInput contentRow_amountInput resetPremiums limitInput maxMin" type="text" style="text-align:right" value="0.00" name="limit"/>
<div class="inputDollarSign">$</div>
</div>
</div>
<div class="linItm_deductible_wrap">
<div class="linItm_proRataPremium_wrap contentRow_rataPremium black">
<div class="linItm_annualPremium_wrap black">
<input class="linItm_manualCheckbox" type="checkbox" name="manual"/>
<a class="view" href="#" style="display: none;"/>
</div>
<div class="linItm_accordionRow accordionRow_ifSubLine" style="height: 0px;"/>
</div>
     <div class="linItm_tableRow subLine_tableRow" sort-order="29">
     <div class="linItm_tableRow subLine_tableRow" sort-order="30">
     <div class="linItm_tableRow subLine_tableRow" sort-order="31">
     <div class="linItm_tableRow subLine_tableRow" sort-order="32">
     <div class="linItm_tableRow subLine_tableRow" sort-order="33">
     <div class="linItm_tableRow subLine_tableRow" sort-order="34">
     <div class="linItm_tableRow subLine_tableRow" sort-order="36">
     <div class="linItm_tableRow subLine_tableRow" sort-order="37">
     <div class="visibleRow_ifSubLine_bottomArea"/>
</span>

2 个答案:

答案 0 :(得分:1)

查找可以包含输入的所有div:

List<WebElement> lineItemDivs = driver.findElements(By.cssSelector(".lineItem"));

遍历每个div的子节点,直到找到具有适当属性键/值的元素。如果找到这样的元素,找到该特定div的输入字段并输入所需的值:

for (WebElement div : lineItemDivs)
{
    if (div.findElements(By.cssSelector("[title='Wind']")).size() > 0)
    {
        div.findElement(By.tagName("input")).sendKeys("20000");
    }
}

答案 1 :(得分:0)

保持简单。您可以使用XPath定位器并一次性找到输入:

//div[contains(@class, "linItm_visibleRow") and div/@title="A. Dwelling - Fire"]//input[@name="limit"]