在我的应用程序中,我有一个电子邮件字段,我正在使用发送密钥发送电子邮件地址,但硒不是发送密钥插入剪贴板中的值。有人遇到过这个问题吗?
法典:
WebElement email=driver.findElement(By.xpath("//div[@class='auth-container']//input[@type='text']");
email.sendKeys("sample@sample.com")
由于 Id 是动态的,我已经从父容器中获取了 xpath
在匈牙利键盘上的 Node.js javascript 中,@ 登录 sendKeys 已替换为剪贴板的内容。如果您尝试替换"@"宽度其Unicode值"\u0040",结果是相同的,sendKeys已替换为剪贴板的内容,即使尝试使用棘手的Key.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是蛮力填充字段。
发送。钥匙。有一个 npm 包。它是Powershell发送键的包装器,因此仅适用于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'
如果发送密钥不起作用,请尝试使用操作链。这通常是解决硒相互作用问题的好方法。
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,我成功地将数据发送到文本框中。
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。
有关更多信息,请参阅此链接
另一种方法是使用机器人类..常见的解决方案是使用剪贴板,复制文本并将该文本粘贴到文本字段中。
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++;
}
看到它完美地工作,它很棒!虽然它不适用于无法通过 unicode 跟踪的特殊字符,如 |,!...等。
我遇到过这种情况,但它似乎是间歇性的。几个月来运行良好的代码突然做了同样的事情(从剪贴板粘贴代替每个@
,又名"at sign"(。 我能够通过更新Chromedriver使其消失(不会说"修复"(。我怀疑这是因为Chrome已经自动更新了,但Chromedriver没有。不能确定,因为在此过程中还必须重新启动。 无论如何,这不是"正常"。带有@符号的电子邮件地址应该通过sendKeys传递,没有问题。
这对我有用:
chromeoptions.AddUserProfilePreference("settings.language.current_input_method", "US");