Итак, сначала давайте пройдемся по коду и поймем, почему это происходит.
describe('Login', function() {
it('should display Login home', function() {
browser.get('https://xxxxx.org/yyyy/');
browser.driver.manage().window().maximize();
var acrIdBtn = browser.driver.findElement(by.css('a.btn.btn-lg.btn-success'));
// click is thenable, this is okay
acrIdBtn.click().then(function() {
// This promise gets queued but this is a void function meaning. So in jasminwd, the
// function to find the element and click is a void function and the promise
// would not be awaited.
browser.driver.findElement(by.id('ContentPlaceHolder1_MFALoginControl1_UserIDView_txtUserid_UiInput')).click();
});
});
});
Быстрое исправление:
Итак, быстрое решение, убедитесь, что обратный вызов возвращает обещание:
acrIdBtn.click().then(function() {
// If we return the click, jasminewd should await this callback.
return browser.driver.findElement(by.id('ContentPlaceHolder1_MFALoginControl1_UserIDView_txtUserid_UiInput')).click();
Выход из потока управления
Кажется, это все еще зависит от потока управления. В качестве примечания я хотел бы предложить отключить поток управления с помощью SELENIUM_PROMISE_MANAGER: false,
в вашем файле конфигурации и использовать async await. См. Транспортир в STS IDE -> Не удалось найти update-config.json для довольно хорошего примера файла конфигурации и async / await.
describe('Login', () => {
it('should display Login home', async () => {
await browser.get('https://xxxxx.org/yyyy/');
await browser.driver.manage().window().maximize();
// If you are using "element" but do not want to use wait for angular
// think about using "await waitForAngularEnabled(false);"
// If you prefer to use the WebDriver findElement version, then you could just keep it the same.
// const acrIdBtn = browser.driver.findElement(by.css('a.btn.btn-lg.btn-success'));
const acrIdBtn = element(by.css('a.btn.btn-lg.btn-success'));
await acrIdBtn.click();
const contentBtn = element(by.id('ContentPlaceHolder1_MFALoginControl1_UserIDView_txtUserid_UiInput'));
await contentBtn .click();
});
});