Транспортир - ввод не кликабелен, несмотря на использование ExpectedConditions.elementToBeClickable - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь протестировать приложение Ionic с помощью Protractor, и у меня есть следующий код в объекте моей страницы, который пытается установить флажок:

  async shareWithPerson(name): Promise<void> {
    var input = this.inputWithName(name)
    await browser.wait(ExpectedConditions.invisibilityOf($('.toast-message')), 5000);
    await browser.wait(ExpectedConditions.invisibilityOf($('ion-backdrop')), 5000);
    await browser.wait(ExpectedConditions.elementToBeClickable(input), 5000);
    return input.click();
  }

  inputWithName(name): ElementFinder {
    var xpath = `//ion-label/div/span[@class="text"][contains(text(),'${name}')]/ancestor::ion-item/ion-checkbox`
    return element(by.xpath(xpath));
  }

Однако, как бы я ни старалсяЯ всегда получаю сообщение об ошибке:

unknown error: Element <button ion-button="" ion-item="" class="button-full-width float-right">...</button> is not clickable at point (897, 369). Other element would receive the click: <ion-backdrop tabindex="-1" class="backdrop-no-tappable hydrated" style="opacity: 0; will-change: opacity; transition-duration: 200ms; transition-timing-function: ease-in-out;"></ion-backdrop>

Несмотря на то, что я жду, чтобы фон был невидимым, и я жду, чтобы элемент стал кликабельным.Я могу обойти это, используя browser.sleep(3000), но я бы предпочел не прибегать к арбитражным снам, чтобы обойти проблему.Куда я иду не так?

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Поскольку наличие элемента в DOM по своей природе является более строгой проверкой, я бы попробовал проверить это вместо видимости элемента:

await browser.wait(ExpectedConditions.stalenessOf($('ion-backdrop')), 5000);

Ссылка: stalenessOf.

Это все еще выстрел в темноте, так как я помню необходимость помещать все эти "маленькие" browser.sleep() звонки здесь и там, чтобы решать подобные проблемы синхронизации.

0 голосов
/ 12 декабря 2018

Эта ошибка вызвана тем, что элемент на веб-странице, но транспортир не может увидеть элемент.Попробуйте прокрутить до элемента, а затем выполнить действие щелчка.

Пример: browser.executeScript («arguments [0] .scrollIntoView (); arguments [0] .click;», inputElement);

0 голосов
/ 12 декабря 2018

Попробуйте связать метод perform с кликом.

input.click().perform();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...