如何在不使用剪贴板或操作 CTRL+C、CTRL+V 的情况下将字符串中的“\t”或 "tab" 发送到 selenium 中的文本框

How to send "\t" or "tab" within a string into textbox in selenium without using Clipboard or Actions CTRL+C, CTRL+V

我有这样的字符串。

String inputString="This\tis\ta\tString";
Webelement inputbox=inputBoxXpath;
inputbox.sendKeys(inputString);

上面代码的问题在于它发送 'This' 然后 \t 被认为是按键 TAB,然后将焦点移动到下一个元素。

为了避免我使用剪贴板方式,只要应用程序处于焦点状态,它就可以完美运行。

//Partial solution
StringSelection selection = new StringSelection(inputString);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(selection, selection);
inputbox.click()
send_keys("CTRL+V") // Paste the string in clipboard.

但是,当程序 运行ning 并且我将其他内容复制到剪贴板时,此方法有效,然后 inputString 被剪贴板的内容替换。

如果我想运行服务器虚拟机上的代码

,这也会导致问题

我也试过Actions发送密钥,但输出仍然有问题。

我正在寻找一种使用本机 sendKeys('string') 的方法,其中字符串包含 \t 和 \n,而不使用 CTRL+C 和 CTRL+V 或 getCLipboard 和 setClipboard。

将输入字符串中的“\t”替换为“\u0009”(Java Encoding for Unicode Character 'CHARACTER TABULATION')

你可以用 javascript 来完成。这允许您直接将值设置到对象中。

在Java中你可以这样执行:

    @Test
    public void OptionClickTest() throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
        var driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://www.google.com");

        var object = driver.findElement(By.xpath("//input[@name='q']"));
        ((JavascriptExecutor) driver).executeScript("arguments[0].value='this\tis\tmy\ttext'", object);

}

它不适用于所有类型的输入框 - 但它对我有用 google 所以值得一试: