我正在使用 Safari 驱动程序,包含在 Safari 17.3.1 (19617.2.4.11.12) 中。我在使用最新版本的 Chrome、Edge 或 Firefox 时没有遇到任何问题。
我有一个只有文本区域输入的网页。如果我尝试使用 SendKeys 输入“def”(一次一个字符,作为较长字符串的一部分,或者只是作为“def”),则不会出现字母“d”、“e”和“f”在文本区域中。网页的 html 只是:
<!DOCTYPE html>
<html>
<head></head>
<body>
<form action="action_page.php">
<textarea id="input" name="textInput" rows="10" cols="80">
<textarea>
</form>
</body>
</html>
如果我发送包含字符“d”、“e”或“f”的字符串,这些字符不会出现在文本输入中。
我尝试过仅使用 input.SendKeys(text),我尝试过使用 SendKeys 一次输入一个字符(有或没有 100 毫秒到两秒的延迟),并且我尝试过操作来输入文本。我可以在键入时输入“d”、“e”或“f”,但不能通过代码输入。这是我尝试过的最简单的版本:
input.Click();
input.SendKeys(""); // this seems to help in other cases, otherwise the first character doesn't appear
for (int i = 0; i < text.Length; ++i)
{
input.SendKeys(text[i].ToString());
}
这让我觉得自己很无能...
如果
SendKeys()
由于某种原因不起作用,你可以使用JS来帮你完成这项工作。像这样:
input.Click();
input.SendKeys(""); // this seems to help in other cases, otherwise the first character doesn't appear
for (int i = 0; i < text.Length; ++i)
{
driver.executeScript("var e = arguments[0];e.value = e.value+\"" + text[i].ToString() + "\";",input);
}
顺便说一句,我不是 100% 确定这在 Java 中是有效的,我在 Python 中这样做并且它有效,也许 Java 语法会与这里的 Selenium 不同,但你明白了。