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 试试。