如何在不使用剪贴板或操作 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 所以值得一试:
我有这样的字符串。
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 所以值得一试: