Selenium Gmail登录密码字段

时间:2017-10-23 16:04:05

标签: java selenium selenium-webdriver gmail

我正在尝试使用selenium网络驱动程序登录Gmail。我面临的问题是我无法在输入框中设置密码。

以下是生成的错误消息:

  

线程中的异常" main" org.openqa.selenium.WebDriverException:未知错误:无法聚焦元素。

这是我的代码:

    public static void main(String[] args) {
    System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe");
    WebDriver driver=new ChromeDriver();
    driver.navigate().to("http://www.gmail.com");
    driver.findElement(By.cssSelector("#identifierId")).sendKeys("********@gmail.com"); 
    driver.findElement(By.cssSelector("#identifierNext")).click();
    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("#password")));

    driver.findElement(By.cssSelector("#password")).sendKeys("********"); 
    driver.findElement(By.cssSelector("#passwordNext")).click();
    driver.close();
    driver.quit();
}

4 个答案:

答案 0 :(得分:1)

等待直到元素变为可单击。这是您的操作方法。

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[type=password]"));
driver.findElement(By.cssSelector("input[type=password]")).sendKeys("your password");

答案 1 :(得分:0)

这可能是等待问题和选择错误元素的组合。

尝试更改sendKeys中的选择器,如下所示:

driver.findElement(By.cssSelector("input[type=password]")).sendKeys("********");

如果仍然无效,您可以在该呼叫之前尝试不同的等待条件,例如:

wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[type=password]")));

你可能需要做一些实验来找到合适的等待条件,但做这两件事情应该可以得到你所需要的。 :)

答案 2 :(得分:0)

您尝试使用的元素的cssSelector不正确。

我建议一直使用动态生成的xpath和/或cssSelector。

在下面的代码中,我使用动态生成的xpath作为电子邮件ID,使用cssSelector作为密码。试试这个,它工作正常。

public static void main(String[] args)
{
    System.setProperty("webdriver.chrome.driver", "Y:\\Selenium\\chromedriver.exe");
    WebDriver driver=new ChromeDriver();
    driver.navigate().to("http://www.gmail.com");
    driver.findElement(By.xpath("//input[@type='email']")).sendKeys("*********@gmail.com"); 
    driver.findElement(By.cssSelector("#identifierNext")).click();

    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input[type=password]")));

    driver.findElement(By.cssSelector("input[type=password]")).sendKeys("*********"); 
    driver.findElement(By.cssSelector("#passwordNext")).click();
    driver.quit();
}

答案 3 :(得分:0)

您也可以在此处使用名称属性,例如

driver.findElement(By.name("password")).sendKeys("********");

我认为一切都已解决,但是我希望澄清它为什么不起作用

要输入电子邮件,您使用了ID并且工作正常,因为ID identifierId是您填写的字段的属性之一。

要输入密码,您不能将password用作ID,因为您尝试填写的字段在其属性中没有ID。标识password存在,但它包含更多的WebElement。 事实上,您正在本地化包含此字段的ID以及其他WebElements ,因此错误消息告诉您无法关注

你可以使用xpath,例如

driver.findElement(By.xpath("//input[@type='password']")).sendKeys("********"); 

或css选择器如:

driver.findElement(By.cssSelector("input[type=password]")).sendKeys("********");

但您无法使用ID访问此字段。

我尝试了所有这三种解决方案并且他们工作了。 关于可能的等待问题,请不要犹豫使用findElement方法的服务员包装,它可以帮助很多。但是,我认为这不是主要问题。

相关问题