如何在不使用剪贴板或操作的情况下将字符串中的“ \ t”或“ tab”发送到Selenium中的文本框中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.

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

如果我想在服务器VM上运行代码,这也会导致问题

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

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

解决方法

您可以使用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上对我有用,因此值得一试:

tabs in a string in google

,

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