0

以下は、編集フィールドの HTML コードです。

<input class="inputField" id="CG.28443436.1.10.C.28443608.4.ATTATLD.28447933.DPSE.28447934.1.PSE.4974685.1.ATT.3115546.4.ATTRIBUTE" onmouseout="HideTextBoxValueinAltText()" onmousemove="DisplayTextBoxValueasAltText(this);" onfocus="closePopup(this.id);" onblur="enforceNumericEntry('','','',this.value,'Forward SCR/MCR', this, this.id,false);" type="text" size="30"/>

ID は動的に生成されます。このオブジェクトを識別する方法はありますか?

これは、編集フィールドの横にある「Forward SCR/MCR」というテキストです。

4

1 に答える 1

0

CSS セレクターを使用します。したがって、以下の css は次のようになります。"input of class name inputField which has id that starts with 'CG'"

WebElement element = driver.findElement(By.cssSelector("input.inputField[id^='CG']"));

また

@FindBy(css="input.inputField[id^='CG']")
WebElement element

コメントに基づいて更新します。

CSS セレクターを適切に使用できるように、開発者に相談して要素の一意の属性を要求することをお勧めします。アプリケーションのテスト容易性は重要です。とはいえ、残念なことに、そのような戦いに常に勝てるわけではありません。そこに行ったことがあります!

onBlurはイベントであり、属性ではありません。イベントで CSS を使用できるかどうかは 100% わかりません。だからここにあなたができる汚いハックがあります. 繰り返しますが、これはお勧めできません。値に基づいて入力ボックスを返すプライベート メソッドをページに配置します。DOM を見ると、この入力ボックスの属性は にvalue設定されていForward SCR/MCRます。

WebElement element = getInputElement(Forward SCR/MCR");

private WebElement getInputElement(String value) {
  List<WebElement> elements = driver.findElements(By.cssSelector("input.inputField[id^='CG']"));
  for(WebElement element:elements) {
     if(element.getAttribute("value").equals(value))
       return element;
  }
  throw new RunTimeException("Couldn't find an element with value "+value);
}
于 2013-05-20T17:50:27.163 に答える