В селене driver.wait
возвращает IThenable
или Promise
.Обещания - это просто способ выполнять асинхронное программирование в javascript, и они имеют две функции, then
и `catch, последнее - это то, как вы будете обрабатывать отклонения (ошибки) внутри обещаний.Итак, ваш код должен выглядеть примерно так:
const ATC_Button = driver.wait(
webdriver.until.elementLocated({ name: 'commit' }),
20000
).catch(function(err){
// Do something with you error
});
const GTC_Button = driver.wait(
webdriver.until.elementLocated({ xpath: '//*[@id="cart"]/a[2]' }),
20000
).catch(function(err){
// Do something with you error
});
Для дальнейшего ознакомления я считаю эту статью хорошим введением в обещания.
Обновление
Скорее всего, ваша проблема связана с тем, что вы пытаетесь click
до того, как кнопка будет расположена, поэтому, поскольку ваш driver.wait
возвращает WebElementPromise
(обещание WebElement), есть дваварианты:
1.Promise.then
driver
.wait(webdriver.until.elementLocated({ name: "commit" }), 20000)
.then(button => button.click()) // Here the WebElement has been returned
.catch(function(err) {
// Do something with you error
});
2.Синтаксис await
Примечание: Это доступно только для ES6
// Here you are waiting for the promise to return a value
const ATC_Button = await driver
.wait(webdriver.until.elementLocated({ name: "commit" }), 20000)
.catch(function(err) {
// Do something with you error
});
ATC_Button.click();
ps: Поскольку вы говорите, что еще учитесь Я предполагаю, что здесь есть термины, которые могут не знать, правда ли это, я рекомендую вам провести исследование.