我正在尝试学习selenium网络驱动程序自动化,但我发现sendKeys命令没有在Password类型字段中键入。通过谷歌搜索,我可以看到其他一些人也遇到了同样的问题,但我还没有看到任何正确的答案。有人能在这里帮我吗。
请查看以下示例代码;我从SeleniumIDE生成了代码,它在IDE上运行良好,但在我使用webdriver时就不行了。
package com.example.tests;
public class Login {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "http://www.webs.com/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testLogin() throws Exception {
driver.get(baseUrl + "/");
driver.findElement(By.cssSelector("span")).click();
driver.findElement(By.id("FWloginUsername")).clear();
driver.findElement(By.id("FWloginUsername")).sendKeys("aug2qatestingqa@yahoo.com");
driver.findElement(By.id("FWloginPassword2")).clear();
driver.findElement(By.id("FWloginPassword2")).sendKeys("webs");
driver.findElement(By.id("sign_in_leaf")).click();
}
有两个密码字段,其中一个是隐藏的。解决方案是单击第一个密码[隐藏]字段以启用第二个密码字段。
driver.findElement(By.id("FWloginUsername")).sendKeys("aug2qatestingqa@yahoo.com");
driver.findElement(By.id("FWloginPassword")).click();
driver.findElement(By.id("FWloginPassword2")).clear();
driver.findElement(By.id("FWloginPassword2")).sendKeys("webs");
我在密码字段中遇到了几乎类似的情况。同一"密码"字段有两个元素,但ID不同。JavaScript在运行时切换"type=password"以点击、清除或对该字段执行任何操作。
这种情况下的解决方案是找到输入type = password
、的文本
例如:
driver.FindElement(By.CssSelector("input[type='password']")).SendKeys(IWebElement);
我的问题是我使用了ActionChains
,这导致在使用send_keys方法时后面的字段没有被填充。
解决方案是调用actions.reset_actions()
例如
actions = ActionChains(driver)
actions.key_down(Keys.LEFT_CONTROL).send_keys("a").perform()
actions.key_down(Keys.LEFT_CONTROL).send_keys("c").perform()
actions.reset_actions()
# now send_keys() method works again
cvvTxtBox().sendKeys("1234");
cvvTxtBox().sendKeys(Keys.TAB);
这个问题的最终解决方案
否则使用机器人