在文本字段中输入的 JavaScript 执行行为与 sendKeys 不同

标签 javascript java selenium selenium-webdriver selenium-chromedriver

我在 Linux 机器上运行测试,并使用以下代码,它无法正确键入文本 -

visibleElement.clear();
visibleElement.sendKeys("I am running on linux machine");

在 UI 中,实际上会输入不同的文本,例如“在 Linux 机器上运行”、“在 Linux 机器上运行”等

因此为了处理这个问题,我使用了 javascript -

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].value='I am running on linux machine';", visibleElement);

这会像在文本字段中那样键入文本,但键入此文本后,会出现一个保存按钮,该按钮预计会启用,但实际上并未启用。

但是如果使用sendKeys,该按钮就会启用。

您能否告诉我为什么此 javascript 的行为不同并提供正确的 javascript?

这两件事如何在单一解决方案中工作(无需点击选项卡来启用按钮,因为这在我的情况下不是正确的方式)?

最佳答案

设置arguments[0].value = "..."设置文本字段上的值,但该元素上不会触发任何事件。 “保存”按钮可能正在等待 change <form> 内某处发生的事件。您需要使用 JavaScript 手动触发文本框上的更改事件。请参阅How can I trigger an onchange event manually? .

你所描述的行为让我认为 JavaScript 已经在监听更改事件,然后打乱单词的顺序,就像 Yoda 键入它们一样。 (或者输入 Yoda 拥有的内容?)手动触发更改事件可能会启用“保存”按钮,并且您仍然可能会得到与使用 sendKeys 相同的文本。会导致。如果是这种情况,您可能还想使用 JavaScript 启用“保存”按钮:

// Set the input text
jse.executeScript("arguments[0].value='I am running on linux machine';", visibleElement);

// Find the "Save" button
WebElement saveButton = driver.findElement(...);

// Enable the save button
jse.executeScript("arguments[0].disabled = false;", saveButton);

saveButton.click();

关于在文本字段中输入的 JavaScript 执行行为与 sendKeys 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59858636/

相关文章:

javascript - 将值从组件 data() 传递到其他文件

java - java spring 不会忽略 DELETE 之前发出的 OPTIONS 请求,这与 POST、GET 不同

Java 符号对程序

java - Selenium 启动的 ChromeDriver 一直在后台运行

python - 不向元素发送键,而是向一般 Selenium 发送键

python-3.x - ImportError : sys. meta_path 为 None,Python 可能正在关闭

javascript - 使用闭包进行模块封装

javascript - 从多维数组中删除具有重复 ID 的项目,并保留其标准

javascript - 每次进行更改时都需要运行 "npm run build"吗?

用于 cobol 显示和解压缩数字字段的 Java 映射