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>
...
我正在使用
获取 lival 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。
答案 0 :(得分:1)
无论如何,你需要在XPath选择器前面.
,这样才能搜索当前元素的后代/子代:
.//button[@type='submit']
有时,更精细的XPath也可以提供帮助:
.//descendant::button[@type='submit']