Следующая страница не загружается после нажатия кнопки с помощью транспортира

Мое предложение: используйте orm. В настоящее время есть много вариантов

0
задан Deepak Sabastein 17 January 2019 в 05:28
поделиться

2 ответа

Всегда хорошо, чтобы сначала проверить, чтобы кнопка была кликабельной:

const button = element(by.id('ContentPlaceHolder1_MFALoginControl1_UserIDView_txtUserid_UiInput'));
await browser.wait(ExpectedConditions.elementToBeClickable(button));
await button.click();
0
ответ дан Michael R. 17 January 2019 в 05:28
поделиться

Итак, сначала давайте пройдемся по коду и поймем, почему это происходит.

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();
  });
});
0
ответ дан cnishina 17 January 2019 в 05:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: