使用硒在动态网页中查找元素
Finding elements in dynamic web page using selenium
我试图在动态页面中找到一个输入字段,该字段主要根据打开或关闭的面板数量改变网络结构 div 和样式属性。所以 Firepath 给出的 Xpath 在这里没有帮助。
我要查找的输入 field/Text 字段有一个 class
class = v-textfield v-textfield-small small
但是当我尝试使用 cssSelector 查找具有给定 class 名称的元素时,驱动程序会抓取 3 个相似的文本字段:
- "v-textfield v-textfield-small small readonly"
- "v-textfield v-textfield-small small ws-right"
- "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)
我试图在动态页面中找到一个输入字段,该字段主要根据打开或关闭的面板数量改变网络结构 div 和样式属性。所以 Firepath 给出的 Xpath 在这里没有帮助。 我要查找的输入 field/Text 字段有一个 class
class = v-textfield v-textfield-small small
但是当我尝试使用 cssSelector 查找具有给定 class 名称的元素时,驱动程序会抓取 3 个相似的文本字段:
- "v-textfield v-textfield-small small readonly"
- "v-textfield v-textfield-small small ws-right"
- "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)