NoSuchElementError: no such element:Unable to locate element

Использую версию 5.1.0
Я хочу нажать на кнопку
У меня (не) получается нажать на кнопку
Подскажите как решить эту проблему
Выдает вот такую ошибку no such element: Unable to locate element: {"method":"xpath","selector":"//button[@class="mat-button"]"}

Пример кода:

        return browser.driver.wait(function () {
            return browser.driver.findElement(by.xpath('//button[@class="mat-button"]')).then(function (elem) {
                return elem.click();
            })
        }, 5000);

Для того что бы понять проблему, было бы замечательно увидеть код страницы, где этот элемент находится. Ошибка говорит о том что элемент по такому xpath не существует. Скорей всего xpath не правильный. Попробуйте установить себе Firepath в Firefox, открыть там страницу и проверить свой xpath с помощью Firepath. Если найдет, тогда ошибка в коде, но скорей он его не найдет :slight_smile:

Xpath находит

Иванов Иван Александрович
person
arrow_drop_down

Я проверяю в Google Chrome XPATH

A это у вас кнопка или drop down ? Если drop down, то в selenium есть другой метод для работы с подобными элементами. Еще один вариант могу предположить что вы не дожидаетесь пока элемент отобразится на странице и ищете его. Попробуйте добавить wait for element. Что то типа этого :
driver.wait(until.elementLocated(By.name('username')), 5 * 1000).then..

У меня кнопка. Я пробовал поставить задержку больше через browser.driver.wait, но это не помогло.

Почитайте доку по browser.wait - Protractor - end-to-end testing for AngularJS

Эта функция первым параметром принимает функцию-предикат, а не ваш код который вы хотите исполнить.

Плюс вы не используете возможности Control Flow (selenium-webdriver/lib/promise). Код может быть намного проще:

const clickable = protractor.ExpectedConditions.elementToBeClickable
const button = $('button.mat-button')
browser.wait(clickable(button), 5000, 'Button should be clickable in 5 seconds, but it wasnt'
button.click()
1 лайк