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

Finding elements in dynamic web page using selenium

我试图在动态页面中找到一个输入字段,该字段主要根据打开或关闭的面板数量改变网络结构 div 和样式属性。所以 Firepath 给出的 Xpath 在这里没有帮助。 我要查找的输入 field/Text 字段有一个 class

class = v-textfield v-textfield-small small

但是当我尝试使用 cssSelector 查找具有给定 class 名称的元素时,驱动程序会抓取 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"

为了便于理解,这里是包含文本字段的面板的 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>

我正在使用以下代码填写表格。但正如我所说,它仅在样式属性匹配时有效,但页面会根据打开或关闭的面板数量改变它。

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");
}
}

同样使用下面的 xpath:-

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

这将 return 输出为:-

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']

希望对您有所帮助:)

您可以使用以下 Xpath:

//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']

尝试:

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