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

Dee*_*pak 5 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");
Run Code Online (Sandbox Code Playgroud)

JRo*_*ite 5

尝试设置大约 10 秒的隐式等待。

gmail.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

或者设置显式等待。显式等待是您定义的代码,用于等待特定条件发生,然后再继续处理代码。在您的情况下,它是密码输入字段的可见性。(感谢ainlolcat评论

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

解释: selenium 找不到该元素的原因是因为id密码输入字段的 最初是Passwd-hidden。单击“下一步”按钮后,Google 首先验证输入的电子邮件地址,然后显示密码输入字段(通过将 id 从 更改Passwd-hiddenPasswd)。因此,当密码字段仍然隐藏时(即 Google 仍在验证电子邮件 ID),您的网络驱动程序开始搜索 idPasswd仍然隐藏的密码输入字段。因此,会抛出异常。