我在谷歌和SO网站上搜索过,我找到了JAVA的答案,但似乎没有找到node的答案.js

我有一个需要时间加载的web应用程序.我希望selenium程序等待页面加载,然后执行一些操作.

我目前的代码如下

//dependencies
var webdriver = require('selenium-webdriver'),
    util = require('util'),
    _ = require('underscore');

var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build();
var branchName =  _.isUndefined(process.argv[3]) ? 'branch' : process.argv[3], 
    hostName = _.isUndefined(process.argv[2]) ? 'localhost' : process.argv[2],
    appTmpl = 'http://%s/%s',
    username = 'xxxx',
    password = 'xxxx';
var appUrl = util.format(appTmpl, hostName, branchName);

driver.get(appUrl);
driver.findElement(webdriver.By.name("username")).sendKeys(username);
driver.findElement(webdriver.By.name("password")).sendKeys(password);
driver.findElement(webdriver.By.name("login_button")).click();
driver.quit();

我得到的错误是:

    C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:1643
      throw error;
            ^
NoSuchElementError: no such element
  (Session info: chrome=37.0.2062.103)
  (Driver info: chromedriver=2.10.267521,platform=Windows NT 6.1 SP1 x86_64)
    at new bot.Error (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\atoms\error.js:109:18)
    at Object.bot.response.checkResponse (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\atoms\response.js:106:9)
    at C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:277:20
    at C:\Work\study\selenium\node_modules\selenium-webdriver\lib\goog\base.js:1243:15
    at webdriver.promise.ControlFlow.runInNewFrame_ (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:1539:20)
    at notify (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:362:12)
    at notifyAll (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:331:7)
    at resolve (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:309:7)
    at fulfill (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:429:5)
    at C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\promise.js:1406:10
==== async task ====
WebDriver.findElement(By.name("username"))
    at webdriver.WebDriver.schedule (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:268:15)
    at webdriver.WebDriver.findElement (C:\Work\study\selenium\node_modules\selenium-webdriver\lib\webdriver\webdriver.js:711:17)
    at Object.<anonymous> (C:\Work\study\selenium\test.js:15:8)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)

推荐答案

我无意中找到了我问题的答案

因此,要等待元素出现,我们必须:

driver.wait(function () {
    return driver.isElementPresent(webdriver.By.name("username"));
}, timeout);

Node.js相关问答推荐

node 模块错误:类型参数OT具有循环约束''

错误:找不到模块';/var/apps/前端/bash';

如何将我的Redis客户端配置为在禁用群集模式的情况下使用读取副本?

如何在Mongoose for MongoDB中编写此查询

在对象的嵌套数组中使用$lookup,创建多个记录作为响应,mongodb

npm错误;无法解析依赖项:npm ERR!对等webpack@;5.x.x;来自@webpack-cli/serve@2.0.5";

Express Web 服务器部署到 prod 但 GET 返回超时错误

为什么后端开发需要单独的服务器?

BrowserRouter 无法渲染组件

在快速路由中使用 axios 会在数据字段中返回特殊字符而不是 json

NPM 错误:修复upstream 依赖冲突安装 NPM 包(云功能)

访问 Mongoose 查询之外的变量

一个非常奇怪的JavaScript heap out of memory问题

baseurl64 缓冲区解码

如何使用 superagent/supertest 链接 http 调用?

从 Node.js 应用程序查询 Heroku 托管的 Postgres 数据库时出现自签名证书错误

运行摩卡+伊斯坦布尔+通天塔

nodejs - 如何读取和输出 jpg 图像?

如何设置 useMongoClient (Mongoose 4.11.0)?

NodeJS:如何调试检测到 EventEmitter 内存泄漏.添加了 11 个侦听器