javascript - selenium 中的函数,一旦出现就返回所需的元素
问题描述
我正在尝试
根据这个答案创建一个使用 selenium 进行谷歌搜索的程序,到目前为止代码看起来像这样
const { Builder, By, Key, until } = require('selenium-webdriver');
const driver = new Builder().forBrowser("firefox").build();
(async () => {
await driver.get(`https://www.google.com`);
var el = await driver.findElement(By.name('q'));
await driver.wait(until.elementIsVisible(el),1000);
await el.sendKeys('selenium');
var el = await driver.findElement(By.name(`btnK`));
await driver.wait(until.elementIsVisible(el),1000);
await el.click();
console.log('...Task Complete!')
})();
但写作
var el = await driver.findElement(By.something('...')); await driver.wait(until.elementIsVisible(el),1000); await el.do_something();
每次都变得困难,所以我尝试制作这样的功能:
const { Builder, By, Key, until } = require('selenium-webdriver');
const driver = new Builder().forBrowser("firefox").build();
async function whenElement(by_identity,timeout=1000){
var el = await driver.findElement(by_identity);
await driver.wait(until.elementIsVisible(el),timeout);
return el;
}
(async () => {
await driver.get(`https://www.google.com`);
await whenElement(By.name('q')).sendKeys('selenium');
await whenElement(By.name('btnK')).click();
console.log('...Task Complete!')
})();
但它给出了这个错误:
UnhandledPromiseRejectionWarning: TypeError: whenElement(...).sendKeys 不是函数
我的目标是减少变量的数量并使其尽可能简单,
那么我到底做错了什么?
解决方案
承诺似乎有错误。您只能在 Promise 返回的实际元素上调用函数,而不是 Promise 本身。您必须首先等待等待元素whenElement
解析的promise,然后您才能使用元素并等待返回的promisesendKeys
解析。
const el = await whenElement(By.name('q'));
await el.sendKeys('selenium');
或者
await (await whenElement(By.name('q'))).sendKeys('selenium');
或者
await whenElement(By.name('q')).then(el => el.sendKeys('selenium'));
推荐阅读
- c# - NetSuite - SuiteTalk 通过外部 ID 搜索 VendorPayment 对象(并获取其内部 ID)
- html - 如何在ionic-v1中防止iframe中的自动播放?
- javascript - 从不同的集合 Mongoose 返回字段
- python - 如何使用python内置的函数读取文本文件以查找值
- jmeter - 为什么通过验证日志将 Jmeter 响应时间与服务器时间进行比较时不准确
- swift4.1 - 单元格数据未在表格视图 swif4 中正确显示
- highcharts - 如何解决 High Maps 中的互联网浏览器问题?
- c - 二维数组和指针表示
- javascript - 将 JS 日期从 unix 时间戳转换为特定格式
- git - 如何根据提交历史记录自动检测下一个 semver 版本?(提交分析器的 CLI 替代方案)