Selenium 从剪贴板复制的最后一个项目不是sendkeys,而是输入到元素中

Selenium 从剪贴板复制的最后一个项目不是sendkeys,而是输入到元素中,selenium,automation,cucumber,selenium-chromedriver,Selenium,Automation,Cucumber,Selenium Chromedriver,在我的应用程序中,我有一个电子邮件字段,我使用sendkeys发送电子邮件地址,但selenium没有使用sendkeys,而是插入剪贴板中的值。有人面对过这个问题吗 代码: 由于Id是动态的,所以我从父容器中获取了xpath,如果发送键不起作用,请尝试使用操作链。这通常是解决硒相互作用问题的好方法 from selenium.webdriver.common.action_chains import ActionChains action = ActionChains(driver) ema

在我的应用程序中,我有一个电子邮件字段,我使用sendkeys发送电子邮件地址,但selenium没有使用sendkeys,而是插入剪贴板中的值。有人面对过这个问题吗

代码:


由于Id是动态的,所以我从父容器中获取了xpath,如果发送键不起作用,请尝试使用操作链。这通常是解决硒相互作用问题的好方法

from selenium.webdriver.common.action_chains import ActionChains
action = ActionChains(driver)
email = driver.find_element_by_xpath("//div[@class='auth-container']//input[@type='text']"))
action.send_keys_to_element(email, "sample@sample.com").perform()

希望这有帮助

我是用java运行脚本的,希望这对你有帮助。。 使用javascript,我成功地将数据发送到textbox

JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.getElementById('identifierId').value='admin'");
另一种方式:-

WebElement Username = driver.findElement(By.xpath("//*[@id=\"identifierId\"]"));
((JavascriptExecutor)driver).executeAsyncScript("arguments[0].value='admin'",Username);
这里我们将WebElement作为参数传递给javaScript

有关更多信息,请参阅此

另一种方法是使用robot类。常见的解决方案是使用剪贴板,复制文本并将该文本粘贴到文本字段中

String username = "admin";
StringSelection stringSelection = new StringSelection(username);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, stringSelection);

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_V);
robot.keyRelease(KeyEvent.VK_CONTROL);
这不会键入整个“字符串”,但有助于一次键入除一个字符以外的任何字符

String un="admin";
 char c;
 int l=un.length(),v1=0,v2=0;

 //System.out.println(l);
 while(v1<l)
{
 c=un.charAt(v1);
 v2=(int) c; //converts character to Unicode. 
 robot.keyPress(KeyEvent.getExtendedKeyCodeForChar(v2));

   Thread.sleep(150);
   robot.keyRelease(KeyEvent.getExtendedKeyCodeForChar(v2));

   v1++;
}
String un=“admin”;
字符c;
int l=un.length(),v1=0,v2=0;
//系统输出打印LN(l);

而(v1在Node.js javascript中,匈牙利键盘上,@登录sendKeys已替换为剪贴板的内容。如果尝试替换“@”width及其unicode值“\u0040”,结果相同,sendKeys已替换为剪贴板的内容,即使尝试使用棘手的键.chord(Key.ALT,“v”,Key.NULL)形式,它什么也不做

// if clipboard contains XXX 
WebElement email=driver.findElement(By.xpath("//div[@class='auth-container']//input[@type='text']");
email.sendKeys("sample@sample.com")
// result: field content is sampleXXXsample.com
如果你把@符号放在剪贴板上,它工作得很好,但是你不能保证在测试自动化中剪贴板的内容。有一种方法,将密钥发送到活动项

如上所述,我会避免使用javascript填充字段,因为javascript直接填充字段,不关心字段状态,即使字段处于非活动状态也使用值填充字段,不触发事件,等等,javascript是蛮力填充字段

Send.Keys。它有一个npm包。它是powershell sendkeys的包装,因此仅在windows上有效

npm install -g sendkeys
以及测试代码:

const sendkeys = require( 'sendkeys');
WebElement email=driver.findElement(By.xpath("//div[@class='auth-container']//input[@type='text']");
email.sendKeys("sample")
// result: cursor is in the field, field contains 'sample'
sendkeys.sync( "@sample.com" )
// result: field content is 'sample@sample.com'

我曾经遇到过这种情况,但它似乎是断断续续的。几个月来一直运行良好的代码,突然间做了同样的事情(从剪贴板粘贴到每个
@
aka“at sign”)。 我能够通过更新Chromedriver使它消失(不会说“修复”)。我怀疑这是因为Chrome已经自动更新,但Chromedriver没有。不能确定,因为在这个过程中还必须重新启动。 在任何情况下,这都不是“正常的”。带有@sign的电子邮件地址应该通过sendKeys传递,不会出现问题。

这对我来说很有用:

chromeoptions.AddUserProfilePreference("settings.language.current_input_method", "US");

使用包含父容器的相关HTML更新问题。
chromeoptions.AddUserProfilePreference("settings.language.current_input_method", "US");