使用 JavascriptExecutor 发送密钥并单击 Web 元素

2024-01-16

我正在尝试在新选项卡中打开一个链接,然后在 Firefox 浏览器中使用 Java 中的 selenium 切换到该选项卡。据我了解,为了做到这一点,我需要使用发送键组合。

为了在同一窗口中打开链接,我一直在使用这样的东西:

WebElement we = driver.findElement(By.xpath("//*[@id='btn']"));

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("arguments[0].click();", we);

以上对我来说效果很好。

现在我也尝试发送密钥,如下所示,但它不起作用:

JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("keyDown(Keys.CONTROL)
                        .keyDown(Keys.SHIFT)
                        .click(arguments[0])
                        .keyUp(Keys.CONTROL)
                        .keyUp(Keys.SHIFT);", we);

有什么建议吗?我无法弄清楚将Keys发送到JavascriptExecutor的正确语法。我见过一些使用操作的类似解决方案,但这对我来说也不起作用。


尝试下面的代码打开页面上指向新选项卡的任何链接并切换到该选项卡。在那里执行操作并返回第一个选项卡以进一步执行。

WebDriver driver = new FirefoxDriver();
        driver.get("http://stackoverflow.com/");
        WebElement e = driver.findElement(By.xpath(".//*[@id='nav-questions']"));       
        Actions action = new Actions(driver); 
        action.keyDown(Keys.CONTROL).build().perform(); //press control key
        e.click();
        Thread.sleep(10000); // wait till your page loads in new tab
        action.keyUp(Keys.CONTROL).build().perform(); //release control key
        driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "\t"); //move to new tab
        driver.navigate().refresh(); // refresh page
        driver.findElement(By.xpath(".//*[@id='hlogo']/a")).click(); //perform any action in new tab. I am just clicking logo
        driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "\t"); //switch to first tab
        driver.navigate().refresh(); 
        driver.findElement(By.xpath(".//*[@id='hlogo']/a")).click();// refresh first tab & continue with your further work.I am just clicking logo
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JavascriptExecutor 发送密钥并单击 Web 元素 的相关文章

  • 在 IntelliJ 中运行 Spring Boot 会导致 Unable to load 'javax.el.E​​xpressionFactory'

    我正在尝试运行一个简单的 Spring Boot 应用程序 该应用程序具有以下 Maven pom file
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 如何将 Observable>> 转换为 Observable>

    我陷入了如何将以下可观察类型转换 转换为我的目标类型的困境 我有以下类型的可观察值 Observable
  • 发生错误。请参阅日志文件 - eclipse juno

    每当我启动 Eclipse Juno 时 都会出现错误 发生错误 请查看日志文件 C Program Files eclipse configuration 1362989254411 log 有的网站说卸载jdk重新安装 我这样做了 但没
  • 使用 JQuery 禁用和启用所有超链接

    我有以下禁用所有超链接的内容 但在事件发生后我想再次启用它们 我该如何执行此操作 a click function return false 我认为这不仅仅是将其设置为 true 那么简单 谢谢大家 不要以这种方式绑定 点击 处理程序 而是
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 如何使用新的analytics.js跟踪多个帐户?

    我需要使用 Google 的新的analytics js 跟踪一个页面上两个帐户的综合浏览量 有大量教程和示例如何使用较旧的 ga js 进行操作 但我发现的只是这个分析文档页面 https developers google com an
  • 呃!尝试将包发布到 npm 时出现 403

    我正在尝试将包发布到 npm 您可以在此处查看存储库 https github com biowaffeln mdx state https github com biowaffeln mdx state 我登录到 npmnpm login
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • 类中可以有生成器 getter 吗?

    我的意思是吸气剂是发电机 我相信这一切都是 ES6 也许像这样 class a get count let i 10 while i yield i let b new a for const i of b count console lo
  • 使用 secp256r1 曲线和 SHA256 算法生成 ECDSA 签名 - BouncyCastle

    我正在尝试使用带有 secp256r1 曲线 P256 的 ECDSA 和用于消息哈希的 SHA256 算法生成签名 我也在使用 Bouncy Castle 库 下面的代码 public class MyTest param args pu
  • 如何在 webpack 中渲染嵌套的 SASS?

    采取以下CSS MyComponent color blue Button color red 以及以下 React 组件 import React from react import classes from MyComponent sc
  • 扩展 RegExp 以获取文件扩展名

    我知道 已经有很多基于 RegExp 的解决方案 但是我找不到适合我需求的解决方案 我有以下函数来获取 URL 的各个部分 但我还需要文件扩展名 var getPathParts function url var m url match w
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • 防止Java实例化的正确方法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ThreeJS 中阴影的奇怪行为

    所以我有一个 ThreeJS 场景 并且添加了一些球体 多材质 我还添加了定向光 this light new THREE DirectionalLight 0xFFFFFF 1 this light position set 2 10 2
  • ng-include 和 ng-view 不同时加载

    下面是我的应用程序的结构 很简单 页眉和页脚是非常小的文件 而主页上的 ng view 要大得多 当我进入该页面时 我注意到了这一点 首先加载两个 ng include 然后 ng view 出现 页脚被推到底部 页脚闪烁大约 0 1 秒
  • 如何映射轮播的子项数组?

    我正在尝试将 Carousel 组件包装在映射对象数组周围作为组件的子级 目前我只能让映射创建映射对象的 1 个子对象 轮播需要像这样
  • Java、Spring、Hibernate找不到org.springframework.orm.hibernate3.LocalSessionFactoryBean

    我正在尝试制作 spring hibernate ant 项目 目前我收到此错误 HTTP Status 500 type Exception report message description The server encountere

随机推荐

  • PHP set_time_limit 限制

    QUESTION 如果我使用的话效果会好吗sleep 300 以 5 分钟的间隔完成一整天 24 小时 这意味着 would set time limit 86400 work 然后我可以将主机的时间表设置为每 24 小时仅使用一次 INF
  • 修复使用 Android NDK 和 std::vector 时的 Eclipse 错误

    我正在使用 eclipse 开发一个也使用 ndk 的 Android 应用程序 我在我的应用程序中进行了向量化 并且我已经完成了必要的操作来获取它们 包括 APP STL stlport static 在我的 Application mk
  • Google Play 显示 - 您的设备与此版本的 Samsung Galaxy tab 2 和 Google Nexus 7 不兼容

    当我将应用程序发布到 Google Play 商店并尝试在 Google Nexus 7 上下载它时 我收到消息 您的设备与此版本不兼容 我的清单文件声明如下
  • 如何使用TinyXml解析特定元素

    我想解析一组元素TinyXml输出 本质上 我需要挑选出任何端口元素 portid 端口属性的状态为 open 如下所示为端口 23 最好的方法是什么 以下是 TinyXml 输出的 简化 列表
  • 检查上传的文件是否为 csv 格式

    我正在 php 中上传文件 并且只想上传 csv 文件 我相信我的语法适合内容类型 当它是 csv 文件时 它总是转到 else 语句 我在这里做错了什么 if FILES file type text csv else 如果我更改内容类型
  • 比较 T-SQL 中的日期,忽略时间部分

    我正在使用 MS SQL 2005 我想检查两个日期是否相等 但忽略时间部分 我知道我可以利用DATEDIFF http msdn microsoft com en us library ms189794 aspx 但担心它可能会很慢 这个
  • 如何创建文件夹/目录

    如何使用 c 创建目录 文件夹 我尝试使用 mkdir 但没有成功 我想编写一个程序 cin 是一个变量 然后使用这个变量来创建子目录和其中的文件 我当前的代码 它表示 mkdir 中的 运算符表示错误无操作数 char newFolder
  • 如何在 Paraview 中可视化存储在简单表格中的 XYZ+Field 体积数据?

    很长一段时间以来 我一直在 Goldensoftware Surfer Voxler 工作 在这个程序中 很容易可视化表数据 该方案如下所示 数据输入 在此步骤中我可以指定 x y z 和一个组件 一些物理场数据 gt 网格化 gt 轮廓
  • 使用 awk 调用可执行程序

    我有一个 C 程序 我想在 shell 脚本中使用 awk 来调用它 我怎样才能做这样的事情 来自 AWK 手册页 system cmd executes cmd and returns its exit status GNU AWKman
  • MySQL ORDER BY 另一个表中用户的总行数

    假设 我想显示一个用户列表 按他们发送的消息数量排序 我有 2 张桌子 Users and Messages 我有 10 个用户 用户 A 发送了 20 条消息 消息表中有 20 行 SELECT FROM messages WHERE u
  • 在 v-show 显示输入后将焦点设置在输入上

    我有一个简单的表单 使用 v show 在加载页面时隐藏该表单 我想在显示后集中输入 我有一个按钮来调用一个显示表单的方法 并使用以下代码将焦点设置为输入 this newQuestion true Form whit v show new
  • 使用 HTML5 在 iPhone 上播放 Shoutcast 流

    我知道这个问题过去已经被问过 但我最终没有找到答案 所以我得到了一个shoutcast流 编码音频 mpeg 我想为我的iPhone创建一个网络应用程序来收听我的流移动设备 我尝试了几种方法http mydomain com 8000 ht
  • 使用 Greasemonkey(或类似的用户脚本引擎)更快地重定向?

    我正在使用 Greasemonkey 将某些 URL 重定向到另一个 URL 但我想在要重定向的 URL 加载之前进行重定向 目前我正在使用这个简单的脚本 UserScript name Redirect Google descriptio
  • 在 Yii 中更新和删除相关模型(关系表)

    UPDATED 我有两个相关的模型 即候选人和资格 他们之间是一对一的关系 我正在使用 CActiveForm 并希望对关系数据执行 CRUD 操作 我能够插入数据 但更新和删除时遇到问题 该函数正在显示 id 但这是页面上唯一显示的内容
  • 切换后台任务时 SIGPIPE 崩溃

    将我的应用程序发送到后台 加载新应用程序 将设备切换到睡眠模式 唤醒设备 关闭新应用程序 然后从后台任务打开我的应用程序时 我遇到了奇怪的崩溃 将出现黑屏 我无法使用主页按钮退出此黑屏 并且在调试器中我会显示以下消息 程序接收信号 SIGP
  • 在 html 中使用包含空格的变量设置“value”属性

    我对 HTML JS 很陌生 所以如果这是一个基本问题 我深表歉意 我尝试在网上查找此问题 但无法找到解决方案 我正在使用 JS 代码来创建 HTML 我正在尝试使用包含空格的 var 设置 值 属性 带空格的字符串 当检查 chrome
  • 在 NPM 上发布要包含在 README.md 中的图像

    In 这个项目 https github com fireflysemantics validator the README md显示logo pnglogo png徽标位于顶部README md file 我们希望在 NPM 上显示相同的
  • QLPreviewController - 设置previewItemTitle

    我不知道如何设置 QLPreviewController 类的 PreviewItemTitle 属性 这似乎有点奇怪 因为此类的 iPhone 开发人员文档说该属性是 property readonly 这意味着我无法设置它 有任何想法吗
  • 是否可以在 Android 应用程序中使用 Neo4j 数据库?

    如果我在 Android 应用程序中使用 Neo4j 数据库 会出现任何错误吗 如果是这样 有人可以建议我任何其他图形数据库用作 Android 应用程序的后端吗 是的 尽管Neo4J提供REST API来使用Cypher语言查询数据库 h
  • 使用 JavascriptExecutor 发送密钥并单击 Web 元素

    我正在尝试在新选项卡中打开一个链接 然后在 Firefox 浏览器中使用 Java 中的 selenium 切换到该选项卡 据我了解 为了做到这一点 我需要使用发送键组合 为了在同一窗口中打开链接 我一直在使用这样的东西 WebElemen