Транспортир несовместим с расположением элементов.Как решить проблему с локатором - PullRequest
0 голосов
/ 19 сентября 2019

enter image description here Новое в транспортире и проблемы.Любая помощь с благодарностью!1. Транспортир иногда находит элемент, а иногда не работает.

    public async clickForgetPasswordLink() {
    let expectedValue  = "Forgot Password";
    let link = await element(by.linkText('Forgot Password?'));
    await browser.wait(until.visibilityOf(link),
        TIMEOUT_MILLIS, 'Unable to locate forgot password link...').then(()=>{
         link.click();
    })
   // await link.click();
    let emailText = link.getAttribute("aria-label");
    await emailText.then((text) => {
        logger.info("Getting forgot password link value:" + text);
        expect(text).toEqual(expectedValue);
        browser.driver.sleep(2000);
    });

}

2.Я не могу выяснить причину проблемы с StaleElementError.Во втором наборе я копирую тот же код, но выдает ошибки только для 2-го набора, а не для первого

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019
 public async clickForgetPasswordLink() {
        let expectedValue  = "Forgot Password";
        try {
            let link = await element(by.linkText('Forgot Password?'));
            await browser.wait(await until.elementToBeClickable(link),
                TIMEOUT_MILLIS, 'Unable to locate forgot password link...').then(()=>{
                browser.driver.sleep(2000);
            });
            await link.getAttribute("aria-label").then((text) => {
                logger.info("Getting forgot password link value:" + text);
                expect(text).toEqual(expectedValue);
            });
            await link.click();
            browser.driver.sleep(2000);
        }catch (e) {logger.error("Exception error caught" + e); }

}
0 голосов
/ 20 сентября 2019

stale element означает, что транспортир видит элемент.Так что он его находит.

устаревший элемент происходит, когда вы пытаетесь await выполнить действие против нескольких элементов (20+), например, await element.all().getText(), так что найдите, где вы это делаете, и найдите обходной путь.


ваш код из фрагмента мог бы быть гораздо более читабельным

public async clickForgetPasswordLink() {
  let expectedValue  = "Forgot Password";
  let link = element(by.linkText('Forgot Password?'));

  await browser.wait(
    until.visibilityOf(link),
    TIMEOUT_MILLIS, 
    'Unable to locate forgot password link...'
  );
  await link.click();

  let emailText = await link.getAttribute("aria-label");

  logger.info("Getting forgot password link value:" + emailText);
  expect(emailText).toEqual(expectedValue);
  await browser.driver.sleep(2000);
}
...