2016-07-28 2 views
4

Ich habe das folgende angular.js auf einer Seite. Die angezeigten Artikel sind angular.jsLi Artikel. Einer ist ausgegraut, der andere ist aktiviert. Wenn ich die Selenium webdriver Methode .isEnabled() verwende, geben sowohl die ausgegrauten als auch die aktivierten Elemente "aktiviert" zurück.Selenium webdriver, wie man den aktivierten Status eines angularjs Li-Elements erhält

Die erste Frage ist, wie bekomme ich .isEnabled(), um mit dieser Art von Element zu arbeiten? Q Die zweite Frage ist, unter der Annahme, WebDriver wird es nicht tun, und ich muss xpath, ich denke, ich so etwas wie diese verwenden:

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

Der erste kehrt etwas nur, wenn die angegebene ID deaktiviert ist, die 2. Nur wenn die angegebene ID aktiviert ist, könnte dies in eine Java-Methode eingebaut werden, um zu überprüfen, ob das Element für eine bestimmte ID aktiviert oder deaktiviert ist. Gibt es einen einfacheren Weg, dies zu tun?

</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> 

Antwort

0

Nach Ihre erste Frage kann man einfach erhalten Element By.id und überprüfen isEnabled() wie folgt: -

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

oder

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

und überprüfen aktiviert wie: -

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

Hinweis: - findElement gibt Ihnen Element immer wenn es auf die DOM sonst vorhanden ist, es NoSuchElementException

nun nach Ihrer zweiten Frage führt, ob Selen enabled Element zu finden ist fehlgeschlagen, können Sie By.cssSelector wie unten verwenden: -

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 

Hoffe, es hilft ... :)

1

Das Element wahrscheinlich mit dem Stil pointer-events Satz none deaktiviert wird, die nicht co nsidered von .isEnabled(). Wenn dies der Fall ist, können Sie den CSS-Wert von .getCssValue zurück bewerten:

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

Oder mit einem Stück JavaScript:

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

Sie könnten auch den Status bestimmen, indem die Anwesenheit der Klasse disable Überprüfung, aber es wird nicht garantieren, dass das Element durch den implementierten Stil deaktiviert ist.

Verwandte Themen