2016-07-28 5 views
4

私は次のようなページにangular.jsを持っています。表示されている項目はangular.jsLiです。一方がグレー表示され、もう一方が有効になります。 Selenium webdriverメソッド.isEnabled()を使用すると、グレー表示項目と有効項目の両方が「有効」に戻ります。Selenium webdriver anglejs Li要素の有効状態を取得する方法

最初の質問は、.isEnabled()をこのタイプの要素でどのように動作させるのですか? 2番目の質問は、webdriverをはそれをしないだろうと私はxpathに必要と仮定すると、ある Qは、私はこのようなものを使用することができると思います:

$x("//li[@class ='ng-scope disabled' and @id='actionCUSTARD']") 
$x("//li[@class ='ng-scope' and @id='actionRHUBARB']") 

与えられたIDは、無効になっている場合にのみ、最初のリターンの何か指定されたIdが有効な場合にのみ二番目に、このメソッドをJavaメソッドに組み込んで、指定されたidの要素が有効か無効かを確認できます。これを行う簡単な方法はありますか?

</li> 
<li id="actionRHUBARB" class="ng-scope" on="deriveInvokeType(action)" ng-switch="" ng-class="{'disabled': false}" ng-repeat="action in getActionList()"> 
    <!-- 
    ngSwitchWhen: LINK_DYNAMIC 
    --> 
    <!-- 
    ngSwitchWhen: NO_INVOKE_PERMISSION 
    --> 
    <!-- 
    ngSwitchDefault: 
    --> 
    <a class="ng-scope ng-binding" ng-click="doAction(action)" ng-switch-default="" href=""></a> 
</li> 
<li id="actionCUSTARD" class="ng-scope disabled" on="deriveInvokeType(action)" ng-switch="" ng-class="{'disabled': true}" ng-repeat="action in getActionList()"> 
    <!-- 
    ngSwitchWhen: LINK_DYNAMIC 
    --> 
    <!-- 
    ngSwitchWhen: NO_INVOKE_PERMISSION 
    --> 
    <!-- 
    ngSwitchDefault: 
    --> 
    <a class="ng-scope ng-binding" ng-click="doAction(action)" ng-switch-default="" href=""></a> 
</li> 

答えて

0

あなたは、単にBy.idを使用して要素を取得し、以下のようにisEnabled()を確認することができますあなたの最初の質問によると: -

WebElement el = driver.findElement(By.id("actionRHUBARB")) 

または

WebElement el = driver.findElement(By.id("actionCUSTARD")) 

をとして有効かどうかを確認: -

if(el.isEnabled()) { 
    //do your stuff 
} 

注: - :

- findElementは、それがDOM上に存在する場合は、常にあなたの要素を与え、それ以外の場合は、意志セレンがenabled要素を見つけることができなかった場合NoSuchElementException

今すぐあなたの2番目の質問に応じて、あなたは以下のようにBy.cssSelectorを使用することができますがスローされます

WebElement el = driver.findElement(By.cssSelector(":not(.disabled)[id = 'actionRHUBARB']")); 
//it will find enabled element with id actionRHUBARB 

WebElement el = driver.findElement(By.cssSelector(":not(.disabled)[id = 'actionCUSTARD']")); 
//it will throw NoSuchElementException because it is not enabled 

はそれが役に立てば幸い... :)

1

要素は、おそらく共同されていないnoneにスタイルpointer-eventsセットで無効になっています.isEnabled()によってnsidered。それはケースだ場合は、.getCssValueによって返されたCSS値を評価することができます:

boolean isEnabled = !"none".equals(element.getCssValue("pointer-events")); 

またはJavaScriptの切れ端で

boolean isEnabled = (boolean)((JavascriptExecutor)driver).executeScript(
    "return window.getComputedStyle(arguments[0], null).getPropertyValue('pointer-events') === 'none'" 
    , element); 

ます。また、クラスdisableの存在を確認することで状態を決定することができます、実装されたスタイルによって要素が無効になることを保証するものではありません。

関連する問題