Selenium および css/xpath ロケーターはまだ新しいものです。CSS は機能するが、同等の XPath が機能しないという問題に出くわしました。その理由を本当に知りたいです。例では Scala を使用していますが、これは通常の Java Selenium2 ライブラリです。FirefoxDriver も使用します
HTML の興味深い部分は次のとおりです。
...
<li class="k-item k-filter-item k-state-default k-last" role="menuitem" style="z-index: auto;">
...
<form class="k-filter-menu k-secondary">
<div>
<div class="k-filter-help-text">Show items with value that:</div>
<span class="k-widget k-dropdown k-header" style="" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-owns="" aria-disabled="false" aria-readonly="false" aria-busy="false">
<span class="k-widget k-datetimepicker k-header" style="">
<div>
<button class="k-button" type="submit">Filter</button>
<button class="k-button" type="reset">Clear</button>
</div>
</div>
</form>
</li>
...
私はliを取得しています
val filter = driver.findElement(By.cssSelector("li.k-filter-item"))
これは私のために働きます。
次に、ボタンを見つけたいと思います。これはスライドアウトする動的メニューなので、表示されるまで待つ必要があります。
new WebDriverWait(driver, selectorTimeout).until(
new ExpectedCondition[Boolean] {
override def apply(d: WebDriver) = {
filter.findElement(By.cssSelector("button[type=submit]")).isDisplayed
}
})
そして、それもうまく機能します。私の質問は、なぜ xpath に相当するものが機能しないのかということです:
new WebDriverWait(driver, selectorTimeout).until(
new ExpectedCondition[Boolean] {
override def apply(d: WebDriver) = {
filter.findElement(By.xpath("//button[@type='submit']")).isDisplayed
}
})
誰か?
[編集]
Selenium バージョン: 2.35.0
FireFox ドライバー: 2.35.0
これからOperaでやってみます。