【问题标题】:How to continue to fill the data in next page by selenium?selenium如何继续填充下一页的数据?
【发布时间】:2017-01-30 07:21:19
【问题描述】:

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

【问题讨论】:

  • 使用webdriverwait和expectedconditions类的可见性条件等待密码字段变得可见...
  • 你的意思是.webdriverwait .visibility ?

标签: java selenium selenium-webdriver bots


【解决方案1】:

在找到这个元素之前尝试设置一个大概 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),您的网络驱动程序开始搜索 ID 为 Passwd 的密码输入字段,该字段仍然隐藏。因此,您应该等到它变得可见。

【讨论】:

  • 对于隐式等待,我加起来最多 30 秒。有时有效,有时无效。
  • 对于显式等待,WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd"))).sendKeys("yourPassword"); 不兼容类型:void 无法转换为 WebEelment
  • @Vito 啊,抱歉,只是拼写错误,更新一下。现在试试,让我知道..
  • 显式等待很好。但是对于隐式等待,有时它有效,有时它不起作用。你能解释一下吗?
  • 这可能是时间问题,我建议你总是尝试显式等待,因为它每 500 毫秒轮询一次定位元素,而隐式等待在给定时间内仅轮询两次,这可能是问题,使用显式等待并摆脱这个问题。谢谢..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2016-12-25
相关资源
最近更新 更多