2017-06-15 267 views
1

在测试过程中,我得到了一个路障,其中默认禁用了WebPage中的按钮。我使用Selenium WebDriver来测试按钮是否被默认禁用,布尔值总是返回true。即使默认禁用按钮,Button.isEnabled()也会返回true

Boolean buttonStatus = (button XPath).isEnabled 

这将是巨大的,如果有人能帮助我

Test Button is disabled by default

HTML信息:

<div class="commandbutton commandbutton--theme-disabled commandbutton--recommended"> 
<button class="commandbutton-button commandbutton-button--disabled" type="button" tabindex="-1"> 
+0

请将您的HTML源代码复制/粘贴为文本,而不是图片。 – slim

+0

我已将HTML源文本添加到此问题。 – SKV

回答

1

isEnabled docs

这通常会为一切,但禁用输入 元素返回true。

但它也可以在按钮上工作。但是,isEnabled()检查disabled属性。如果按钮被JavaScript或其他任何手段禁用,isEnabled()将不会检测到它。

我的猜测是该按钮在启用或禁用时还有其他类。例如,启用时,它可能不会有commandbutton-button--disabled类。你可以检查它

WebElement button = driver.findElement(By.xpath("button XPath")); 
String classes = button.getAttribute("class"); 
boolean isDisabled = classes.contains("commandbutton-button--disabled"); 
+0

它为我工作。非常感谢。 – SKV

0

的IsEnabled只能告诉您该按钮正常工作,您需要检查要检查的类属性是该按钮已启用。

+0

* isEnabled只能告诉你按钮工作正常*你在说什么? – Guy

0

我有同样的问题。但是我在页面上的元素非常奇怪。其中一些硒可以点击,虽然他们不可点击,其中一些硒不能点击,但可以发送钥匙给他们。经过几个小时的思考,我写了通用方法,检查元素是否启用。

与程序员交谈之后,我已经知道,他们在这个页面上使用了一些特殊的Select,它看起来像Div和Input一样。他说,我可以通过检查属性Class来检查它是否失效。如果有'select2-container-disabled',那么这个输入被禁用。

我改变我的方法。现在看起来是这样的:

public boolean isNotClickable(WebElement... elements) { 
    List<WebElement> elementsChecked = new ArrayList<>(); 
    List<WebElement> elementsToCheckByClass = new ArrayList<>(); 
    List<WebElement> elementsToCheckByClick = new ArrayList<>(); 
    List<WebElement> elementsToCheckBySendKeys = new ArrayList<>(); 

    for (WebElement checkedElement : elements) { 
     log.info("Checking, that element [" + getLocator(checkedElement) + "] is not clickable by isEnabled()"); 
     if (checkedElement.isEnabled()) { 
      elementsToCheckByClass.add(checkedElement); 
     } else { 
      elementsChecked.add(checkedElement); 
     } 
    } 
    if (!elementsToCheckByClass.isEmpty()) { 
     for (WebElement checkedByClassElement : elementsToCheckByClass) { 
      log.info("Checking, that element [" + getLocator(checkedByClassElement) + "] is not clickable by class"); 
      String classOfElement = checkedByClassElement.getAttribute("class"); 
      List<String> classes = new ArrayList<>(Arrays.asList(classOfElement.split(" "))); 
      if (!classes.contains("select2-container-disabled")) { 
       elementsToCheckByClick.add(checkedByClassElement); 
      } else { 
       elementsChecked.add(checkedByClassElement); 
      } 
     } 
    } 
    if (!elementsToCheckByClick.isEmpty()) { 
     WebDriverWait wait = new WebDriverWait(driverUtils.getDriver(), 1); 
     for (WebElement checkedByClickElement : elementsToCheckByClick) { 
      log.info("Checking, that element [" + getLocator(checkedByClickElement) + "] is not clickable by clicking it"); 
      try { 
       wait.until(elementToBeClickable(checkedByClickElement)); 
       elementsToCheckBySendKeys.add(checkedByClickElement); 
      } catch (Exception e) { 
       elementsChecked.add(checkedByClickElement); 
      } 
     } 
    } 
    if (!elementsToCheckBySendKeys.isEmpty()) { 
     for (WebElement checkedBySendKeysElement : elementsToCheckBySendKeys) { 
      log.info("Checking, that element [" + getLocator(checkedBySendKeysElement) + "] is not clickable by sending keys"); 
      try { 
       checkedBySendKeysElement.sendKeys("checking"); 
       return false; 
      } catch (Exception e) { 
       elementsChecked.add(checkedBySendKeysElement); 
      } 
     } 
    } 
    return elementsChecked.size() == elements.length; 
} 
相关问题