我想通过Selenium
登录。它将该过程分为2页。
现在我可以在第一页输入密钥了。然后我应该去下一页(输入密码并点击提交密钥)。
但是,如果我只在一个类中添加4个密钥代码,则无法完成第二个页面密钥输入(密码并提交)
我猜第一页键输入和第二页键输入之间缺少一些代码。
public class Selenium {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
WebDriver driver;
System.setProperty("webdriver.gecko.driver", "C:\\Users\\Downloads\\geckodriver-v0.10.0-win64\\wires.exe");
driver =new FirefoxDriver();
driver.get("https://mail.google.com");
driver.findElement(By.id("Email")).sendKeys("yourEmailId");//first page
driver.findElement(By.id("next")).click();//first page
driver.findElement(By.id("Passwd")).sendKeys("yourPassword");//next page
driver.findElement(By.id("signIn")).click();//next page
}
driver.get("https://mail.google.com");
driver.findElement(By.id("Email")).sendKeys("yourEmailId");//first page
driver.findElement(By.id("next")).click();//first page
/* What code should I add here? */
driver.findElement(By.id("Passwd")).sendKeys("yourPassword");//next page
driver.findElement(By.id("signIn")).click();//next page
}
答案 0 :(得分:2)
在找到此元素之前,尝试设置隐式等待时间可能为10秒: -
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.id("Passwd")).sendKeys("yourPassword");
driver.findElement(By.id("signIn")).click();
或设置明确的等待。显式等待是您定义的代码,用于在进一步执行代码之前等待某个条件发生。在您的情况下,它是密码输入字段的可见性。
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd")));
element.sendKeys("yourPassword");
//Now click on sign in button
driver.findElement(By.id("signIn")).click();//next page
说明:selenium无法找到该元素的原因是密码输入字段的id
最初是Passwd-hidden
。点击“下一步”按钮后,Google会首先验证输入的电子邮件地址,然后显示密码输入字段(将ID从Passwd-hidden
更改为Passwd
)。因此,当密码字段仍然隐藏时(即Google仍在验证电子邮件ID),您的webdriver将开始搜索仍为隐藏ID为Passwd
的密码输入字段。因此,你应该等到它变得可见。