WebDriver发现Element不包含属性

时间:2013-09-12 17:14:54

标签: java extjs selenium webdriver selenium-webdriver

我有以下HTML

<button class="x-btn-text " style="position: relative; width: 69px;" type="button" tabindex="0" aria-disabled="false">OK</button>
<button class="x-btn-text" style="position: relative; width: 69px;" type="button" tabindex="0">OK</button>

第一个按钮被禁用,第二个按钮被启用,因为我想点击启用的按钮。有没有办法找到没有属性aria-disabled

的元素

3 个答案:

答案 0 :(得分:3)

ExtJs案例。在这里,您需要使用aria-disabled="false"或XPath / CssSelector确定属性getAttribute("aria-disabled")是否已启用。

所以Code Enthusiastic的逻辑应该是正确的,但是ExtJS总是很特别。

List<WebElement> okButtons = driver.findElements(By.xpath("//button[text() = 'OK']"));
for (WebElement okButton : okButtons) { 
    if (!okButton.getAttribute("aria-disabled").equals("false")) {
        okButton.click();
        break;
    }
}

甚至更容易,排除定位器中启用的一个。 (因为你需要在这里发短信,所以没有合适的定位器使用CssSelector,只有XPath)

WebElement enabledokButton = driver.findElement(By.xpath("//button[text() = 'OK' and not(@aria-disabled = 'false')]"));
enabledokButton.click();

答案 1 :(得分:2)

  

有没有办法可以找到没有属性aria-disabled的元素?

YES! 利用CSS!

找到没有aria-disabled属性的按钮的选择器是button:not([aria-disabled])

driver.findElement(By.cssSelector("button:not([aria-disabled])").click();

答案 2 :(得分:1)

List<WebElement> okButtons = driver.findElements(By.xpath("//button[text() = 'OK']"));
for (WebElement okButton : okButtons) { 
    if (okButton.isEnabled()) {
        okButton.click();
        break;
    }
}