javascript - 禁用在 selenium (Node.js) 中打开的选项卡
问题描述
我为 node.js 使用 selenium webdriver 并且我还加载了一个扩展,加载扩展工作正常但是当我开始我的项目时它会转到我想要的页面然后扩展立即打开一个新选项卡(谢谢你添加这个扩展 bla bla bla),我想知道是否有办法禁用我自己没有打开的标签,我试过这个:
await driver.get('https://mywebsite.com') //open my initial site
await driver.sleep(1000) //give time for the extension site to open
driver.switchTo(await driver.getAllWindowHandles()[1]) //switch to extension site
await driver.close()
driver.switchTo(await driver.getAllWindowHandles()[0]) //switch back to the main site
//rest of my code
不幸的是,这似乎不起作用,任何建议表示赞赏!
解决方案
无法禁用脚本未打开的选项卡。只要您不更改窗口句柄,驱动程序仍将位于原始选项卡上。您可以从那里继续执行脚本,而忽略其他打开的选项卡。
我认为我在您的代码中看到的主要问题是您将参数传递给.switchTo()
而不是.window()
. 应该是driver.switchTo().window(handle);
。
如果您想找到关闭它的新窗口,我在这个答案中编写了该代码。您需要做的就是.close()
在该代码之后添加该行并切换回您在当前代码中已经拥有的原始句柄(在使用我上面的反馈修复之后)。
另一种方法很大程度上基于selenium.dev 文档:
// Open the initial site
await driver.get('https://mywebsite.com')
// Store the ID of the original window
const originalWindow = await driver.getWindowHandle();
// Wait for the new window or tab
await driver.wait(async () => (await driver.getAllWindowHandles()).length === 2, 10000);
// Loop through until we find a new window handle
const windows = await driver.getAllWindowHandles();
windows.forEach(async handle => {
if (handle !== originalWindow) {
await driver.switchTo().window(handle);
}
});
await driver.close()
await driver.switchTo().window(originalWindow);
// Rest of the code
推荐阅读
- javascript - 在不使用 React State 的情况下访问 React Native 中获取的数据
- r - R studio中的窗格布局:完全显示所有四个窗格
- javascript - 悬停在徽标上后打开悬停菜单
- javascript - 状态呈现的输入元素的属性“onChange”不起作用
- python - 将预测值与它的索引/标识号相关联
- vue.js - 插件内的 Nuxt privateRuntimeConfig 访问
- mysql - 在检查唯一性时是否在 MySQL 中修剪了 Double 数据类型?
- powershell - 使用 powershell 在 Confluence 中创建页面
- visual-studio-code - 我已经设置了 ssh 密钥,但是 VSCode 一直要求输入密码
- c - C : 尝试实现一个简单的校验和,但当数据包数据长度为偶数时失败