我在 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/