2017-06-15 3 views
1

Während des Tests habe ich eine Blockade bekommen, wo ich eine Schaltfläche in einer WebPage habe, die standardmäßig deaktiviert ist. Ich verwende Selenium WebDriver, um zu testen, ob die Schaltfläche standardmäßig deaktiviert ist. Der Boolesche Wert gibt immer "True" zurück.Button.isEnabled() gibt True zurück, obwohl die Schaltfläche standardmäßig deaktiviert ist.

Boolean buttonStatus = (button XPath).isEnabled 

wird es toll, wenn mir jemand

Test Button is disabled by default

HTML Informationen helfen können:

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

Bitte kopieren Sie Ihre HTML-Quelle als Text, kein Bild. – slim

+0

Ich habe den HTML-Quelltext zu dieser Frage hinzugefügt. – SKV

Antwort

1

Von isEnabled docs

Dies wird in der Regel true zurück, für alles, aber deaktiviert Eingang Elemente.

Aber es funktioniert auch auf Tasten. isEnabled() überprüft jedoch das Attribut disabled. Wenn die Schaltfläche durch JavaScript oder andere Mittel deaktiviert ist, wird isEnabled() dies nicht erkennen.

Meine Vermutung ist, dass die Schaltfläche andere Klassen hat, wenn es aktiviert oder deaktiviert ist. Zum Beispiel, wenn aktiviert, wird es wahrscheinlich nicht commandbutton-button--disabled Klasse haben. Sie können dafür prüfen

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

Es hat für mich funktioniert. Danke vielmals. – SKV

0

isEnabled kann nur sagen, die Taste funktioniert, müssen Sie prüfen, die Zu überprüfendes Klassenattribut ist die Schaltfläche ist aktiviert.

+0

* isEnabled kann nur sagen, dass der Button funktioniert * worüber sprichst du? – Guy

0

Ich hatte das gleiche Problem. Aber meine Elemente auf der Seite waren sehr seltsam. Einige von ihnen konnten klicken, obwohl sie nicht anklickbar waren, einige von ihnen Selen konnten nicht klicken, aber konnten Schlüssel an sie senden. Nach einigen Stunden des Nachdenkens habe ich eine universelle Methode geschrieben, die prüft, ob Elemente aktiviert sind oder nicht.

Nach dem Gespräch mit dem Programmierer, habe ich gewusst, dass sie auf dieser Seite einige spezielle Select verwenden, und es sieht aus wie Div mit Input drin. Und er sagt, dass ich es deaktivieren kann, indem ich das Attribut "Class of Div" überprüfe. Wenn 'select2-container-disabled' ausgewählt ist, ist diese Eingabe deaktiviert.

Und ich ändere meine Methode. Jetzt sieht es so aus:

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; 
} 
Verwandte Themen