如何继续通过selenium填写下一页的数据?

时间:2016-09-21 21:19:56

标签: java selenium selenium-webdriver bots

我想通过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
}

1 个答案:

答案 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的密码输入字段。因此,你应该等到它变得可见。