Gmail登录失败,使用Selenium webdriver。显示找不到密码的元素

时间:2015-10-24 13:19:00

标签: java selenium selenium-webdriver

public static void main(String[] args){
    System.setProperty("webdriver.chrome.driver","E:/softwares/chromedriver_win32/chromedriver.exe");
    WebDriver gmail= new ChromeDriver();

    gmail.get("https://www.gmail.co.in"); 
    gmail.findElement(By.id("Email")).sendKeys("abcd");
    gmail.findElement(By.id("next")).click();
    gmail.findElement(By.id("Passwd")).sendKeys("xyz");

3 个答案:

答案 0 :(得分:2)

尝试设置隐含等待时间可能为10秒。

gmail.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

或设置明确的等待。显式等待是您定义的代码,用于在进一步执行代码之前等待某个条件发生。在您的情况下,它是密码输入字段的可见性。 (感谢ainlolcatcomment

WebDriverWait wait = new WebDriverWait(gmail, 10);
WebElement element = wait.until(
    ExpectedConditions.visibilityOfElementLocated(By.id("Passwd")));
gmail.findElement(By.id("Passwd")).sendKeys("xyz");

说明:selenium无法找到该元素的原因是密码输入字段的id最初是Passwd-hidden。点击“下一步”按钮后,Google会首先验证输入的电子邮件地址,然后显示密码输入字段(将ID从Passwd-hidden更改为Passwd)。因此,当密码字段仍然隐藏时(即Google仍在验证电子邮件ID),您的webdriver将开始搜索仍为隐藏ID为Passwd的密码输入字段。因此,抛出异常。

答案 1 :(得分:0)

Thread.sleep()方法;为我工作。

WebDriver driver=new FirefoxDriver();
        driver.get("https:www.google.com");
        driver.findElement(By.linkText("Gmail")).click();
        driver.findElement(By.linkText("SIGN IN")).click();
        driver.findElement(By.id("Email")).sendKeys("abcde");
        driver.findElement(By.id("next")).click();
        Thread.sleep(2000);
    WebElement password = driver.findElement(By.xpath(".//*[@id='Passwd']"));
    password.sendKeys("xyzzz");
        driver.findElement(By.id("signIn")).click();
        Thread.sleep(4000);
       driver.close();

答案 2 :(得分:0)

driver.get("http://mail.google.com");
driver.findElement(By.xpath("//input[@id='identifierId']")).sendKeys("emaild");
driver.findElement(By.xpath("//span[contains(text(),'Next')]")).click();
Thread.sleep(2000);
WebElement passwordEnter = driver.findElement(By.xpath("//input[@name='password']"));
passwordEnter.sendKeys(password);
driver.findElement(By.xpath("//span[contains(text(),'Next')]")).click();