2017-06-15 3 views
1

テスト中、私はデフォルトで無効になっているWebPageのボタンがある道路ブロックを取得しました。私はボタンがデフォルトで無効になっているかどうかをテストするためにSelenium WebDriverを使用しています。ブール値は常にtrueを返します。Button.isEnabled()は、ボタンがデフォルトで無効になっていてもtrueを返します。

Boolean buttonStatus = (button XPath).isEnabled 

それは、誰かが私を助けることができる場合

Test Button is disabled by default

HTMLインフォメーション素晴らしいものだ:ISENABLEDのみボタンが正常に動作を伝えることができます

<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

、あなたがチェックする必要がありますチェックするクラスの属性は、ボタンが有効であることを確認します。

+0

* isEnabledは、ボタンがうまく動作すると伝えることができます*あなたは何を話していますか? – Guy

0

私は同じ問題を抱えていました。しかし、ページ上の私の要素は非常に奇妙でした。セレンのいくつかはクリック可能ではありませんが、クリックできませんでしたが、セレンはクリックできませんでしたが、キーを送信できました。数時間の思考の後、要素が有効かどうかをチェックする普遍的なメソッドを書いています。

プログラマーと話した後、私はこのページでいくつかの特別なセレクトを使用していることを知っていました。そして、彼はDivの属性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; 
} 
関連する問題