2016-07-28 3 views
4

У меня есть следующее angular.js на странице. Отображаемые предметы: angular.jsLi. Один из них greyed, другой включен. Когда я использую метод Selenium webdriver.isEnabled(), как серые, так и активированные элементы возвращаются «включены».Selenium webdriver, как получить активированный элемент углового элемента Li

Первый вопрос: как я могу получить .isEnabled() для работы с этим элементом? Q Второй вопрос, предполагая, что WebDriver не будет делать это, и мне нужно xpath, я предполагаю, что я мог бы использовать что-то вроде этого:

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

Первый возвращает что-то только тогда, когда данный идентификатор отключен, второй, только если данный идентификатор включен, это может быть встроено в метод Java, чтобы проверить, что для данного идентификатора элемент включен или отключен. Есть ли более простой способ сделать это?

</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 в противном случае он будет бросками NoSuchElementException

Теперь согласно вашему второму вопросу, если селен не удалось найти enabled элемент, вы можете использовать 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

элемент, вероятно, отключен с набором стиля pointer-events к none, который не со не указан .isEnabled(). Если это так, вы могли оценить значение CSS, возвращенное .getCssValue:

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, но это не гарантирует, что элемент отключен реализованным стилем.

Смежные вопросы