使用selenium在动态网页中查找元素

时间:2015-10-09 11:14:17

标签: java selenium dynamic input firepath

我试图在动态页面中找到一个输入字段,它根据面板的数量打开或关闭来改变网页结构,主要是div和样式属性。因此,Firepath给出的Xpath在这里没有用。 我想要查找的输入字段/文本字段有一个类

  

class = v-textfield v-textfield-small small

但是当我尝试使用cssSelector找到具有给定类名的元素时,驱动程序会抓取3个类似的文本字段:

  1. " v-textfield v-textfield-small small readonly"
  2. " v-textfield v-textfield-small small ws-right"
  3. " v-textfield v-textfield-small small"
  4. 这里简单易懂的是包含文本字段的面板的html代码。

    
    
    <div id="formpanel">
      ...
      <div class="v-absolutelayout-wrapper" style="top: 50px">Some label</div>
      <div class="v-absolutelayout-wrapper" style="top: 57px">
        <input class="v-textfield v-textfield-small small readonly"></input>
      </div>
      <div class="v-absolutelayout-wrapper" style="top: 65px">Some label2</div>
      <div class="v-absolutelayout-wrapper" style="top: 69px">
        <input class="v-textfield v-textfield-small small"></input>
      </div>
      <div class="v-absolutelayout-wrapper" style="top: 75px">Some label</div>
      <div class="v-absolutelayout-wrapper" style="top: 79px">
        <input class="v-textfield v-textfield-small small ws-right"></input>
      </div>
    </div>
    &#13;
    &#13;
    &#13;

    我使用以下代码填写表单。但正如我所说它只适用于样式属性匹配但页面根据面板数量打开或关闭而改变它。

    String style;
    
        List<WebElement> ttN = driver.findElements(By.cssSelector("div.v-absolutelayout-wrapper"));
        for(WebElement div : ttN){
    style = div.getAttribute("style").toString();
    if(style.equals("top: 69px")){
    div.findElement(By.cssSelector("input.v-textfield.v-textfield-small.small")).sendKeys("111-Auto");
    }
    else if(style.equals("top: 79px")){
    div.findElement(By.tagName("input.v-textfield.v-textfield-small.small.v-textfield-ws-right.ws-right")).sendKeys("5000");
    }
    }
    

3 个答案:

答案 0 :(得分:1)

使用以下xpath: -

//div[@class='v-absolutelayout-wrapper' and contains(.,'Some')]

这将返回输出: -

1:某些标签

2:某些标签2

3:某些标签

如果只需要带有label2输入标记的元素

,请使用此xpath
//input[@class='v-textfield v-textfield-small small']

更具体

//div[@id='formpanel']//input[@class='v-textfield v-textfield-small small']

希望它会对你有所帮助:)。

答案 1 :(得分:0)

您可以使用以下X路径:

//input[@class='v-textfield v-textfield-small small readonly']
//input[@class='v-textfield v-textfield-small small']
//input[@class='v-textfield v-textfield-small small ws-right']

答案 2 :(得分:0)

尝试:

.v-textfield.v-textfield-small.small:not(.readonly):not(.ws-right)