chromeless - щелчок по элементу на следующей странице не работает

На одном из моих тестов я вхожу в систему и перехожу на следующую страницу. На следующей странице, когда я пытаюсь щелкнуть элемент профиля с помощью .click, похоже, ничего не происходит.

Когда я использую функцию .exists, она возвращает false.

Почему chromeless не может распознать элемент после изменения DOM?

async  func(){            
   try {
     this.chromeless
    .goto(this.url)
    .click(this.switchToLogIn)                     
    .type(this.email, this.emaillAddressInput)
    .type(this.password, this.passwordInput)   
    .click(this.logInButton )
    .click(this.myProfile)
    .screenshot()        
    }
    catch(err) {
        console.log(err)
    }      

person Rotem    schedule 07.02.2018    source источник
comment
Вам может потребоваться явно подождать или дождаться элемента, прежде чем вы сможете щелкнуть его. Например, между отправкой формы и загрузкой следующей страницы должно пройти некоторое время, в течение которого, если вы попытаетесь щелкнуть что-то — этого не будет, потому что страница не загрузилась.   -  person Marco Lüthy    schedule 09.02.2018
comment
Для справки, я считаю, что ключевое слово await отсутствует в первой строке блока try.   -  person Otto G    schedule 19.04.2018


Ответы (1)


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

Итак, если предположить, что this.myProfile — это строка селектора CSS для элемента, по которому нужно щелкнуть:

// Unchanged code omitted
.click(this.logInButton)
// Since the previous click loads a new page and/or shows new content, we need to wait
.wait(this.myProfile)
.click(this.myProfile)

В качестве альтернативы можно использовать implicitWait параметр конструктора Chromeless можно установить на true, если это ни на что не влияет отрицательно.

person Otto G    schedule 19.04.2018