nikitoz777
(Nikitoz777)
21.Октябрь.2016 15:46:37
#1
есть такое подозрение что данный метод работает некорректно при автоматизации морды на ангуляре, а именно:
если элемент скрыт, то в аттрибут class приписывается значение “ng-hide” и более никаких изменений в этом элементе. соотвественно, вебдрайвер такое не распознает.
прав ли я?
newromka
(Роман Марінський)
21.Октябрь.2016 18:43:20
#2
Используй ожидание атрибута со значением, как раз таки ng-hide
1 лайк
sergueik
(Сергей Кузьмин)
22.Октябрь.2016 22:45:30
#4
если можно - покажите код
попробуйте вычислить этот атрибут средствами Angular а не WebDriver
angular.element(element).scope().$eval(expression);
nikitoz777
(Nikitoz777)
23.Октябрь.2016 19:22:07
#5
location=".spinner:not(.ng-hide)"
def static wait(String location, long timeout = 20) {
new WebDriverWait(DriverManager.getWebDriver(), timeout).pollingEvery(2, TimeUnit.SECONDS).until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver d) {
return (d.findElements(By.cssSelector(location)).size() == 0);
}
})
}
sergueik
(Сергей Кузьмин)
23.Октябрь.2016 20:25:19
#6
я недавно занимался
.net и java портами Protracror (я недостаночно пока себя комфортно чувствую с node и поэтому …)
в частности практиковался на примерах
в проекте найдете детали как это реализовано. вот ссылка на PDF презентации
специально ng-hide
по-моему примера до сих п нет
но есть другие (их достаточно много) выглядит это так:
public void testButtonNgIf() throws Exception {
//if (isCIBuild) { // Alert not handled by PhantomJS
// return;
//}
getPageContent("ng_watch_ng_if.htm");
WebElement button = seleniumDriver.findElement(By.cssSelector("button.btn"));
ngDriver.waitForAngular();
highlight(button);
NgWebElement ng_button = new NgWebElement(ngDriver, button);
assertThat(ng_button, notNullValue());
assertThat(ng_button.getAttribute("ng-click"), equalTo("house.frontDoor.open()"));
assertThat(ng_button.getText(), equalTo("Open Door"));
ngDriver.waitForAngular();
try {
state = ((Boolean) ng_button.evaluate("!house.frontDoor.isOpen")).booleanValue();
} catch(Exception ex) {
System.err.println("evaluate was not handled : " + ex.getStackTrace().toString());
}
assertTrue(state);
button.click();
try{
// confirm alert
seleniumDriver.switchTo().alert().accept();
} catch (NoAlertPresentException ex){
// Alert not present - ignore
} catch(WebDriverException ex){
System.err.println("Alert was not handled : " + ex.getStackTrace().toString());
return;
}
button = seleniumDriver.findElement(By.cssSelector("button.btn"));
highlight(button);
ng_button = new NgWebElement(ngDriver, button);
assertThat(ng_button, notNullValue());
assertThat(ng_button.getAttribute("ng-click"), equalTo("house.frontDoor.close()"));
assertThat(ng_button.getText(), equalTo("Close Door"));
try {
state = ((Boolean) ng_button.evaluate("house.frontDoor.isOpen")).booleanValue();
} catch(Exception ex) {
// [JavaScript Error: "e is null"] ?
System.err.println("evaluate was not handled : " + ex.getStackTrace().toString());
}
assertTrue(state);
}
во всем этом интересно
ng_button.evaluate("!house.frontDoor.isOpen")).booleanValue();
если можете дать url или fiddle вашей страницы создать test ничего не стоит (для проверки ng-hide наверное несложно выделить работающую страницу как standalone) .
то есть надо найти что Angular присваивает
ng-show=“???”
и попросить это вычислить и ждать пока изменится…
1 лайк