パネルの開閉数に応じて、主に div とスタイル属性を変更する動的ページで入力フィールドを見つけようとしています。したがって、Firepath によって提供される Xpath は、ここでは役に立ちません。検索しようとしている入力フィールド/テキスト フィールドにはクラスがあります
クラス = v-textfield v-textfield-small small
しかし、cssSelector を使用して指定されたクラス名の要素を見つけようとすると、ドライバーは 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");
}
}