如何使用 onkeyup/onfocus javascript 在文本字段中输入文本?

2023-12-04

我们有一个 Web 应用程序,我正在尝试使用 Java、Web Driver 和 TestNG 对其进行自动化测试。我面临的最大挑战(失败)是保持领先开发并防止测试框架因哪怕是很小的代码更改而中断。

Problem

  • 有一个接受数字的文本字段。至目前为止,sendKeys为我做了这项工作。
  • 在最近对页面源的更改中,输入数字时,会自动插入逗号。
  • 例如,“50000”变为“50,000”。
  • Now sendKeys正确输入值,但在我移出该字段并编辑其他字段后,该值重置为 0。

这是该元素的来源。请注意以下值onkeyup and onfocus:

<input type="text" class="form-control tooltip-default" id="my_budget" value="" data-mask="fdecimal" data-rad="." data-toggle="tooltip" data-placement="top" data-original-title="test tooltip" onfocus="removeErrors('my_budget');" onkeyup="removeNegativeSign('my_budget');">

我以前遇到过这个问题,并尝试使用以下方法破解解决方案W3学校和其他研究。

方法一:Keys.TAB

我读了 that sendKeys(Keys)可以触发 keyup 事件,所以我尝试发送Keys.TAB

driver.findElement(By.id("my_budget")).sendKeys(Keys.TAB);

这没有任何效果。

方法2:发送keyDown-keyUp

I used this问题作为参考,只是模拟按下Ctrl键。

    new Actions(driver).keyDown(driver.findElement(By.id("my_budget")), Keys.CONTROL).keyUp(driver.findElement(By.id("my_budget")), Keys.CONTROL).perform();

这没有任何效果。

方法3:手动执行Javascript

最后,我尝试手动执行Javascript,首先是onfocus,然后当这不起作用时,对于onkeyup.

    SeleniumHelper.doJavascriptOnElement(driver, driver.findElement(By.id("my_budget")), driver.findElement(By.id("my_budget")).getAttribute("onfocus"));

    SeleniumHelper.doJavascriptOnElement(driver, driver.findElement(By.id("my_budget")), driver.findElement(By.id("my_budget")).getAttribute("onkeyup"));

这会导致错误,表明未找到 Javascript:

Caused by: java.lang.Exception: org.openqa.selenium.WebDriverException: unknown error: removeErrors is not defined

Question

So -

  • 如何在 onkeyup 或 onfocus(或其他)Javascript 处于活动状态的文本字段中输入文本?
  • 将来我该如何针对这种情况(代码在我身上发生变化)进行编程?是否有一个我不知道的“智能”sendKeys?

经过一天的挖掘,我找到了答案。

要在文本字段中输入文本,请使用onfocusJavaScript,我需要click()文本字段 web 元素:

driver.findElement(By.id("my_budget")).click();

这很有效——Javascript 在输入值时执行。

为了使输入文本+生成事件更容易一些,我创建了一个方法:

调用这个:

sendKeysWithEvent(driver, driver.findElement(By.id("my_budget")), "50000", "onfocus");

方法:

public static void sendKeysWithEvent(WebDriver driver, WebElement element, String text, String event) throws Exception {
    element.sendKeys(text);
    switch(event) {
    case "keyup":
        new Actions(driver).keyDown(element, Keys.CONTROL).keyUp(element, Keys.CONTROL).perform();
        break;
    case "onblurJS":
        doJavascriptOnElement(driver, element, element.getAttribute("onblur"));
        break;
    case "onfocus":
        element.click();
        break;
    case "keyupJS": 
        doJavascriptOnElement(driver, element, element.getAttribute("onkeyup"));
        break;
    case "keyupTAB":
        element.sendKeys(Keys.TAB);
        break;
    }

}
public static void doJavascriptOnElement(WebDriver driver, WebElement element, String javascript) throws Exception {
    ApiHelper.doLog("Running Javascript: " + javascript);
    ((JavascriptExecutor) driver).executeScript(javascript, element);

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 onkeyup/onfocus javascript 在文本字段中输入文本? 的相关文章

  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • 创建一个简单的 10 秒倒计时

    我想要一行这样写的 Your download will begin in 10 9 8 etc Beginning on page load seconds 我已经设置了 10 秒下载文本 并且我还查看了其他 stackoverflow
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • 限制可选 DOM 复选框

    我试图限制用户可以选择的复选框数量 这些复选框是为数组中的每个项目生成的 DOM 输入对象 我目前对此没有运气 因此非常感谢任何帮助 谢谢 在这里小提琴 http jsfiddle net vVxM2 222 http jsfiddle n
  • 启用/禁用由用户输入确定的复选框

    我有一个简单的表单 用户可以在其中输入他的联系号码 如果联系号码以 07 开头 则该复选框已启用 其他我需要禁用它的复选框 我已经编写了一些代码 但我面临的问题是 当用户键入 01 时 它会被禁用 但如果他们继续在 01 之后添加任何其他数
  • 将文本大小调整为矩形 在 Canvas HTML5 中调整大小

    我是 Canvas 新手 我正在创建一个网站 以在调整矩形大小时增加文本 我尝试了很多 但没有任何效果 实际上 我希望如果我仅按其宽度调整矩形大小 向左拉伸 向右拉伸 则仅应增加文本宽度而不是字体大小 我已经完成了字体大小 但发现增加孤立文
  • 如何从下面的html中提取数据?

    我想要从中提取数据的 Html 是 div class infoMessageInner p span class ng binding Fiber r best lld till adressen Tj nsterna kan du be
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 如何调用 google 的 getBasicProfile() 来仅单击按钮即可登录 google?

    我在我的网站上使用谷歌登录
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • Google 地图 API:忽略 DirectionService 请求中的季节性限制

    我目前正在开发一张地图 其中显示两点之间的最短路线 使用不同的交通工具 我注意到 有时 例如在冬季关闭的道路不会被考虑在内 我发现我可以使用方向服务 下面的代码 忽略高速公路 收费站和渡轮 但我一生都无法弄清楚如何 是否可以忽略季节性限制
  • 禁用特定 div 上的 Tab 键

    我有以下结构 div div Some content div div Some content div div 我想 禁用 div2 上的 tab 键 我的意思是按下 tab 键时 div2 的元素不会获得焦点 有没有简单的方法可以使用
  • Node.js 未处理的“错误”事件

    我编写了一个简单的代码并将其保存在文件 try js 中 var http require http var makeRequest function message var options host localhost port 8080
  • 从 DirectionsRenderer 中获取折线或标记的事件

    我正在使用 DirectionsService 和路线方法来生成 DirectionsResult 我还使用 DirectionsRenderer 对象来显示结果 因为它非常易于使用 我在检测 Directions changed 事件时没
  • 使用 AngularJS 多部分表单数据将文件上传到 Google Cloud Storage

    我正在尝试使用 AngularJS 中指定的多部分方法将图像文件上传到 Google Cloud Storagehttps cloud google com storage docs json api v1 how tos upload m
  • 使用 Selenium 处理验证码

    我正在尝试自动化一个表单 在表单提交过程中我会得到重新验证码 我陷入困境并弄清楚我们如何使用 selenium webdriver 处理验证码文本 虽然这个验证码正在实时进行图灵测试实施 但是我仍然在寻找某种方法来处理这种情况 所以你不能真
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j

随机推荐

  • 从 Laravel 为 iOS AvPlayer 提供 mp3 文件

    我可以从控制器提供我的 mp3 文件 但从我的控 制器提供的文件不会在 ios AvPlayer 中播放 使用 url 我确信我的客户端代码没问题 因为它可以播放其他服务器上的歌曲 您也可以从我最后编写的链接检查我的服务器 并看到我的控制器
  • 为什么 Firefox 不显示正确的默认选择选项?

    我正在制作一个网络应用程序来管理产品 SKUS 其中一部分是将 SKU 与产品名称相关联 在表格的每一行上 我列出一个 SKU 并显示
  • GUI中如何刷图然后保存刷过的数据?

    我读过几篇关于如何保存刷过的数据的帖子 但是 在尝试这些帖子上的建议时 this this this this and this 它们似乎都不起作用 我在尝试这些建议时遇到的问题之一是 程序一直运行到最后才没有刷到任何数据 因此 保存的数据
  • 使用 OpenGL 和顶点数组对象渲染两个对象

    我正在尝试使用带有着色器的 OpenGL 在屏幕上渲染两个三角形 一个大的红色的 一个小的蓝色的 每个三角形由一组顶点位置和颜色以及一组顶点索引定义 我为每个三角形使用不同的顶点数组对象 下面是我的代码 我已将其简化为最小的可编译示例 但仍
  • 同步 HTTPS POST 请求 iOS

    对于 Android 我可以通过以下方式发送 POST 请求 HttpClient http new DefaultHttpClient HttpPost request new HttpPost https somewebsite com
  • 如何查看机器码?

    我已经用汇编语言 at t 语法 编写了一个程序 我想看看机器代码的外观 这就是我获取可执行代码的方式 as g o p1 o p1 s 32 gstabs ld o p1 p1 o m elf i386 假设您在 Linux 或 BSD
  • 使用 .id 使用 purrr::map_df 制作输入项列,无需复制命名向量的输入

    我经常想要映射数据框中的列名称向量 并使用 id争论 但要写出与每个相关的列名map迭代到那个 id列似乎需要在输入向量中将其名称加倍 换句话说 通过用自己的名称命名每个列名称 如果我不使用自己的名称来命名该列 那么 id仅存储迭代的索引
  • ffmpeg 将 gif 转换为带有反向功能的 webm

    我正在尝试使用下面的方法将 gif 文件转换为 webm 文件 该文件工作正常 但我想知道是否也可以使用 ffmpeg 反转它 或者我需要先使用 imagemagick 反转它 然后使用 ffmpeg 覆盖它 ffmpeg i your g
  • 如何在c#中找到打印机类型?

    如何在 C 中找到 PC 中安装的打印机类型 无论是点阵打印机 激光打印机还是喷墨打印机 以下类别告诉您打印机是点阵式 激光式还是喷墨式 using System using System Management namespace Cons
  • Tcpdf印地语句子显示问题

    我正在尝试使用 PHP 编程语言中的 tcpdf 库创建 pdf 文件 从昨天开始尝试但仍然得到 而不是印地语字体 我试图显示这句话 我添加了 2 到 3 种不同的印地语字体 但只得到问号 如果您在 tcpdf 或 mpdf 中有很好的印地
  • C++ 中堆栈上不同长度的数组分配[重复]

    这个问题在这里已经有答案了 我惊讶地发现在 C 中可以在堆栈上分配一个变长数组 例如int array i 它似乎在 clang 和 gcc 在 OS X 上 上运行良好 但 MSVC 2012 不允许它 这个语言特性叫什么 它是 C 语言
  • 错误 A2206 的问题:表达式中缺少运算符

    大家好 我在汇编中有这段代码 它应该创建一个消息框 但是当我尝试用 Masm 编译它时 我收到此错误 C test asm 26 错误 A2206 表达式中缺少运算符 386 model flat stdcall option casema
  • 无法将 JSON 解组到结构中

    我想将以下 JSON 解组到一个结构中 MAIN data KEY1 1111111 KEY2 2222222 KEY3 0 KEY4 AAAAAAA KEY5 9999 KEY6 4 KEY7 BBBBBBB 我已经尝试修改jsonStr
  • 使用 R 编程将文字中的数字转换为数字

    我的挑战是将单词中的 10 和 1 转换为数字 如输入句子中的 10 和 1 example input lt paste0 I have ten apple and one orange 数字可能会根据用户要求而改变 输入的句子可以标记化
  • C++正则表达式匹配大括号内的内容[重复]

    这个问题在这里已经有答案了 假设我想使用 C 11 正则表达式提取匹配大括号的内容 所以 举例来说 foo 会成功匹配 我可以使用match result提取内容 看起来很简单 但是下面的代码并没有完全达到我的愿望 std string f
  • 将 JSON 数据(带有节点请求)发布到 Express 服务器以保存到 MongoDB 时出现问题

    我使用 MongoDB 作为我的 Node Express 应用程序的后端数据库 总结一下我面临的问题 我不知道如何在 Express 应用程序中设置 body parser 配置 因为服务器端应用程序没有接收客户端应用程序 也是一个 no
  • ctypes - 初学者

    我的任务是将 c 库 包装 到 python 类中 这些文档在这个问题上非常模糊 看来他们期望只有高级 python 用户才会实现 ctypes 一些逐步的帮助会很棒 所以我有我的c 库 我该怎么办 我把什么文件放在哪里 如何导入库 我读到
  • 不同的线程可以写入同一 Vec 的不同部分吗? [复制]

    这个问题在这里已经有答案了 我有 10 个线程和一个Vec长度为100 我可以让线程 0 处理元素 0 9 例如对它们进行排序 而线程 1 处理元素 10 19 等吗 或者我必须使用Vec
  • 固定值在列和行上不重复

    我想在 R 中创建一个具有一定数量变量 例如 1 到 10 的矩阵 这些变量应该随机分配在行和列上 但不应在任一行中重复 因此数字 1 应该在第 1 行和第 1 列中各出现一次 例如 1 2 3 4 5 6 7 8 9 10 2 3 4 5
  • 如何使用 onkeyup/onfocus javascript 在文本字段中输入文本?

    我们有一个 Web 应用程序 我正在尝试使用 Java Web Driver 和 TestNG 对其进行自动化测试 我面临的最大挑战 失败 是保持领先开发并防止测试框架因哪怕是很小的代码更改而中断 Problem 有一个接受数字的文本字段