각도기 : 버튼 클릭 후 페이지 완료를 기다리는 방법은 무엇입니까?
테스트 사양에서 웹 페이지의 버튼을 클릭하고 새 페이지가 완전히로드 될 때까지 기다려야합니다.
emailEl.sendKeys('jack');
passwordEl.sendKeys('123pwd');
btnLoginEl.click();
// ...Here need to wait for page complete... How?
ptor.waitForAngular();
expect(ptor.getCurrentUrl()).toEqual(url + 'abc#/efg');
수행하려는 작업에 따라 다음을 시도 할 수 있습니다.
browser.waitForAngular();
또는
btnLoginEl.click().then(function() {
// do some stuff
});
약속을 해결합니다. 에서 할 수 있다면 더 좋을 것 beforeEach
입니다.
NB : 나는 expect ()이 내부의 promise (즉, getCurrentUrl)가 비교하기 전에 해결되기를 기다린다는 것을 알았습니다.
방금 소스를 살펴 봤습니다. Protractor는 몇 가지 경우에만 Angular를 기다리고 있습니다 (예 : 언제 element.all
호출되거나 위치 설정 / 가져 오기).
따라서 각도기는 모든 명령 후에 Angular가 안정화되기를 기다리지 않습니다.
또한 때때로 내 테스트에서 Angular 다이제스트주기와 클릭 이벤트 사이에 경쟁이있는 것처럼 보이므로 때때로 수행해야합니다.
elm.click();
browser.driver.sleep(1000);
browser.waitForAngular();
실행이 AngularJS 컨텍스트 ( click
이벤트 에 의해 트리거 됨 ) 로 들어갈 때까지 대기하기 위해 절전을 사용 합니다.
기다릴 필요가 없습니다. 각도기는 자동으로 각도가 준비 될 때까지 기다린 다음 제어 흐름의 다음 단계를 실행합니다.
각도기를 사용하면 다음 접근 방식을 사용할 수 있습니다.
var EC = protractor.ExpectedConditions;
// Wait for new page url to contain newPageName
browser.wait(EC.urlContains('newPageName'), 10000);
따라서 코드는 다음과 같습니다.
emailEl.sendKeys('jack');
passwordEl.sendKeys('123pwd');
btnLoginEl.click();
var EC = protractor.ExpectedConditions;
// Wait for new page url to contain efg
ptor.wait(EC.urlContains('efg'), 10000);
expect(ptor.getCurrentUrl()).toEqual(url + 'abc#/efg');
참고 : 이것은 새 페이지가로드를 완료하고 DOM이 준비되었음을 의미하지 않을 수 있습니다. 후속 'expect ()'문은 Protractor가 DOM을 테스트에 사용할 수있을 때까지 기다립니다.
이 경우 다음을 사용할 수 있습니다.
페이지 개체 :
waitForURLContain(urlExpected: string, timeout: number) {
try {
const condition = browser.ExpectedConditions;
browser.wait(condition.urlContains(urlExpected), timeout);
} catch (e) {
console.error('URL not contain text.', e);
};
}
페이지 테스트 :
page.waitForURLContain('abc#/efg', 30000);
일반적으로 제어 흐름에 다음을 추가합니다.
it('should navigate to the logfile page when attempting ' +
'to access the user login page, after logging in', function() {
userLoginPage.login(true);
userLoginPage.get();
logfilePage.expectLogfilePage();
});
logfilePage :
function login() {
element(by.buttonText('Login')).click();
// Adding this to the control flow will ensure the resulting page is loaded before moving on
browser.getLocationAbsUrl();
}
이것을 사용하면 더 좋다고 생각합니다
*isAngularSite(false);*
browser.get(crmUrl);
login.username.sendKeys(username);
login.password.sendKeys(password);
login.submit.click();
*isAngularSite(true);*
이 isAngularSite 설정을 사용하려면 여기에 protractor.conf.js를 넣어야합니다.
global.isAngularSite = function(flag) {
browser.ignoreSynchronization = !flag;
};
당신은 이렇게 할 수 있습니다
emailEl.sendKeys('jack');
passwordEl.sendKeys('123pwd');
btnLoginEl.click().then(function(){
browser.wait(5000);
});
browser.waitForAngular();
btnLoginEl.click().then(function() { Do Something });
to solve the promise.
'program tip' 카테고리의 다른 글
자동으로 가져 오기 구성 (0) | 2020.11.01 |
---|---|
Html.BeginForm ()에 CSS 클래스 추가 (0) | 2020.11.01 |
TypeScript에서“=>”의 의미는 무엇입니까? (0) | 2020.11.01 |
Vb.NET 또는 C #을 사용하여 프로세스를 어떻게 종료합니까? (0) | 2020.11.01 |
Git : 커밋간에 앞뒤로 이동하는 방법 (0) | 2020.11.01 |