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

标签 javascript selenium selenium-webdriver try-catch

所以我正在使用 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";

以此为函数在等待函数中重复

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

then 的第二个参数是一个 errback,它在 findElement 失败时被调用。因为 selenium-webdriver 以 promises 运行,所以这就是您必须捕获错误的方式。使用 try...catch 无法工作,因为 Selenium 不会立即开始工作;您要求 Selenium 使用 findElement 执行的工作将在未来的不确定时间执行。到那时,JavaScript 执行将移出您的 try...catch

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

关于javascript - 如何使用 WebDriverJS 捕获 Selenium 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28636402/

相关文章:

java - 如何关闭出现在同一页面上的子弹出窗口

javascript - 谁能帮我解释使用 selenium webdriver 进行图像验证的 javascript 代码?

javascript - 使用 JQuery 更改标签文本

JavaScript 创建对象数组

java - 将第二个项目添加到列表似乎会覆盖我添加的第一个元素

java - 如何使用 Maven 在 Firefox 中运行 Selenium WebDriver 测试用例?

firefox - 在 Selenium 2 中使用现有的 Firefox 配置文件 - 不起作用?一个错误?

javascript - 无法让动态模板在 Angular 指令中工作

javascript - Owl Carousel 2 自定义导航

java - 如何将当前功能传递给单个测试