javascript - 如何使用 selenium 从 iframe 元素中获取标题?
问题描述
我正在尝试从这样的 iframe 标签中获取标题:
const webdriver = require('selenium-webdriver');
const { By, Key, until } = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');
let driver;
async function whenElement(by_identity,timeout=1000){
try{
var el = await driver.findElement(by_identity);
await driver.wait(until.elementIsVisible(el),timeout);
return el;
}
catch(err){
console.log(`whenElement,ELEMENT ${by_identity} not found, ERROR=>${err}`);
}
}
(async ()=>{
driver=await new webdriver.Builder().forBrowser('firefox').build();
await driver.get(`https://www.google.com/recaptcha/api2/demo`);
await driver.getTitle().then(text=>{console.log(text)});
await driver.switchTo().frame(await whenElement(By.xpath('/html/body/div[1]/form/fieldset/ul/li[5]/div/div[1]/div/div/iframe'),5000))
await driver.getTitle().then(text=>{console.log(text)});
})();
预期的输出应该是:
reCAPTCHA demo reCAPTCHA
但是尽管像这样切换驱动程序的框架,但我只得到主页的标题而不是 iframe:
reCAPTCHA demo reCAPTCHA demo
我不确定我做错了什么,
也许我对更改驱动程序框架的理解是错误的?因为据我所知,如果您driver.switchTo().frame()
那么驱动程序只能在该框架内运行,并且不能与其他框架或主 html DOM 中的其他元素交互
有人可以解释一下问题是什么吗?
解决方案
您无需切换到框架即可获得标题。相反,你可以使用这个:
var frameElm = await driver.findElement(By.xpath('.//iframe[1]'));
console.log(frameElm.getAttribute("title"));
推荐阅读
- scala - Akka 流 Source.repeat 在 100 个请求后停止
- ios - 为什么应用程序包不总是一个包?
- java - 将 java Stream 转换为 Set
- c++ - 如何在另一个类函数中使用类,而与在 C++ 中声明的位置无关?
- javascript - 如何修复量角器中的错误“进程退出,错误代码为 1”?
- python - 如何使用 Windows 10 打开 Anaconda Navigator
- laravel - 集合中的项目总和字段
- python - 在 jupyter notebook 中远程录制音频
- git - 预提交挂钩失败
- corda - 如何在 Corda Enterprise HA 集群中注册工作程序公证节点?