Транспортир: мне нужно подождать, пока компонент покажет на экране

1

У меня проблема, мне нужно подождать, пока компонент покажется на экране, иногда компоненты слишком долго задерживаются, чтобы отображаться. Мне нужно подождать, пока какое-то поле или переменная не станет истинным. Кто-то знает, как это сделать?

element(by.id('nextStage-button')).isPresent().then(function (visible) {
    let i = 0;
    while (visible !== true){
        browser.sleep(2000);
        console.log("test "+ i++);
        if(visible === true){
            break;
        }
    }
Теги:
protractor
jasmine

2 ответа

1
Лучший ответ

Посмотрите на использование ожидаемых условий.

Вы могли бы сделать что-то вроде этого:

const EC = protractor.ExpectedConditions;
const nextStageButton = $('#nextStage-button');
browser.wait(EC.visibilityOf(nextStageButton), 3000);
// do whatever you wanted to do once it visible
  • 0
    Спасибо, тыуууууууууууууууу. Это то что мне нужно !!!
1

browser.wait() будет планировать команду, чтобы ждать условия для удержания или обещания разрешить.

Эта функция блокирует поток управления WebDriver, а не время выполнения javascript. Это задерживает выполнение будущих команд webdriver (например, это заставит Protractor ждать, прежде чем отправлять будущие команды серверу selenium), и только тогда, когда включен поток управления webdriver.

Ссылка на документацию: https://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.wait

В вашем случае вы хотите подождать, пока не появится определенный элемент, и для этого вы должны использовать isDisplayed(), поскольку он вернет обещание, которое будет разрешено, если этот элемент в данный момент отображается на странице.

await browser.wait(async () => await el.isDisplayed(), DefaultTimeout);
  • 0
    Спасибо, это работает только с node.js версии 8+.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню