在javascript中使用selenium没有可用的按钮元素时,使用console.log(“text”)

在javascript中使用selenium没有可用的按钮元素时,使用console.log(“text”),javascript,node.js,selenium,debugging,setinterval,Javascript,Node.js,Selenium,Debugging,Setinterval,当没有可用的按钮元素但它不工作时,我想console.log(“无元素”) const {Builder, By} = require("selenium-webdriver"); let driver = new Builder().forBrowser("chrome").build(); async function myfun(){ await driver.get("website") await driver.findElement(By.linkText("y

当没有可用的按钮元素但它不工作时,我想
console.log(“无元素”)

const {Builder, By} = require("selenium-webdriver");

let driver = new Builder().forBrowser("chrome").build();

async function myfun(){

    await driver.get("website")
    await driver.findElement(By.linkText("yes")).click();
    await driver.findElement(By.linkText("yes")).click();
    await driver.sleep(500);
    await driver.findElement(By.id("inputfield")).sendKeys("name");

    setInterval(function(err){
        if (err){
            console.log("No element");
        }else{
            driver.findElement(By.tagName("button")).click();
        }
    }, 1000);

}
myfun()
我发现以下错误:

(node:16248) UnhandledPromiseRejectionWarning: NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"button"}
  (Session info: chrome=81.0.4044.92)
我也尝试过try/cath方法,但没有成功

try {
    driver.findElement(By.tagName("button")).click();
} catch(err) {
    console.log("No element")
}
用户信用。我发现这个帖子完美地解决了我的问题。它是从另一个线程复制的。要获得更清晰的理解,请参阅全文

所选答案未按预期工作(
err.state
undefined
,并且始终抛出
NoSuchElementError
)——尽管使用可选回调的概念仍然有效

因为我得到的错误与OP引用的错误相同,所以我认为在确定目标元素是否存在时应该引用。顾名思义,就是当元素不存在时抛出的错误。因此errorCallback中的条件应为:

webdriver.error.NoSuchElementError的错误实例

因此,完整的代码块如下所示(我还使用
async
/
wait
来帮助那些利用该语法的人):

用户信用。我发现这个帖子完美地解决了我的问题。它是从另一个线程复制的。要获得更清晰的理解,请参阅全文

所选答案未按预期工作(
err.state
undefined
,并且始终抛出
NoSuchElementError
)——尽管使用可选回调的概念仍然有效

因为我得到的错误与OP引用的错误相同,所以我认为在确定目标元素是否存在时应该引用。顾名思义,就是当元素不存在时抛出的错误。因此errorCallback中的条件应为:

webdriver.error.NoSuchElementError的错误实例

因此,完整的代码块如下所示(我还使用
async
/
wait
来帮助那些利用该语法的人):

检查此项:检查此项:
try {
    driver.findElement(By.tagName("button")).click();
} catch(err) {
    console.log("No element")
}
var existed = await driver.findElement(webdriver.By.id('test')).then(function() {
    return true;//it existed
}, function(err) {
    if (err instanceof webdriver.error.NoSuchElementError) {
        return false;//it was not found
    } else {
        webdriver.promise.rejected(err);
    }
});
//handle value of existed appropriately here