Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

NoSuchElementError: no such element:Unable to locate element

protractor
cucumber
Теги: #<Tag:0x00007fedbfeaf3d0> #<Tag:0x00007fedbfeaf1c8>

#1

Использую версию 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);

(Andrew Zakordonets) #2

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


#3

Xpath находит

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

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


(Andrew Zakordonets) #4

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


#5

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


(Oleksandr Khotemskyi) #6

Почитайте доку по browser.wait - http://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.wait

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

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

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()