javascript – 如何使用WebDriverJS捕获Selenium错误

前端之家收集整理的这篇文章主要介绍了javascript – 如何使用WebDriverJS捕获Selenium错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我使用的是Selenium的 JavaScript实现,WebDriverJS.与任何Web浏览器自动化一样,最大的障碍是让代码减慢足够长的时间以加载页面元素.我的解决方案是:

对于我想与之交互的每个元素,我都有这样的代码

xpath = "//div[@id='gs_lc0']/input[@id='gbqfq']"
driver.wait(function(){
    return waitForElement(xPath,driver);
});
try{
    element = driver.findElement(webdriver.By.xpath(xPath));
}catch(e){
    console.log("Wait Function False Positive")
}
element.sendKeys("Let Me Google That For You\n";

用这个函数在wait函数中重复

var waitForElement = function(path,driver){
    console.log("try: " + path)
    try{
        driver.findElement(webdriver.By.xpath(path));
    }catch (e){
        console.log("FAILURE")
        return false;
    }
    console.log("SUCCESS")
    return true;
}

现在这个代码有时会起作用,但是它不会起作用.我觉得等待功能完全不起作用,我只是获得了幸运的网页加载时间.因此,为了测试这个理论,我将try函数添加代码块中,甚至无法捕获“NoSuchElementError”.所以我的问题首当其冲的是,是否有其他方法来形成tryCatch函数,以便捕获这些错误.

如果想要完整再现,我的代码头部也是如此

var webdriver = require('selenium-webdriver'),element

var driver = new webdriver.Builder().
    withCapabilities(webdriver.Capabilities.chrome()).
    build();

driver.get('google.com');

解决方法

bagelmaker建议使用findElements并不是坏事.这通常是我想要检查一个元素是否存在而不是混乱异常的情况.

但是,为了完整起见,以下是如何处理元素不存在时生成错误

var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
    withCapabilities(webdriver.Capabilities.chrome()).
    build();

driver.get('http://www.google.com');

driver.findElement(webdriver.By.id("fofofo")).then(null,function (err) {
    if (err.name === "NoSuchElementError")
        console.log("Element was missing!");
});

driver.quit();

然后是第二个参数是一个errback,如果findElement失败则调用它.因为selenium-webdriver以promises运行,所以这就是你必须捕获错误方法.使用try … catch无法正常工作,因为Selenium没有立即开始工作;您要求Selenium对findElement执行的工作将在未来的未确定时间执行.到那时,JavaScript执行将从你的try … catch中移出.

上面的代码搜索id值为fofofo的元素,该元素不存在且失败.

猜你在找的JavaScript相关文章