2017-06-15 270 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; 
} 
相關問題