Java Selenium Gmail登录密码字段

Java Selenium Gmail登录密码字段,java,selenium,selenium-webdriver,gmail,Java,Selenium,Selenium Webdriver,Gmail,我正在尝试使用SeleniumWeb驱动程序登录Gmail。我面临的问题是无法在输入框中设置密码 以下是生成的错误消息: 线程“main”org.openqa.selenium.WebDriverException中出现异常:未知错误:无法聚焦元素 这是我的密码: public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe"

我正在尝试使用SeleniumWeb驱动程序登录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();
}

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

尝试按如下方式更改sendKeys中的选择器:

driver.findElement(By.cssSelector("input[type=password]")).sendKeys("********");
如果仍然不起作用,您可以在调用之前尝试其他等待条件,例如:

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

你可能需要做一些实验来找到合适的等待条件,但这两件事都能满足你的需要。:)

您尝试使用的元素的CSS选择器不正确

我建议始终使用动态生成的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();
}

您也可以在此处使用名称atribute,如下所示:

driver.findElement(By.name("password")).sendKeys("********");
我认为一切都解决了,但我想澄清一下为什么它不起作用:

driver.findElement(By.name("password")).sendKeys("********");
要输入电子邮件,您使用了一个id,它工作正常,因为id
identifierId
是您要填写的字段的属性之一

要输入密码,您不能将
密码
用作id,因为您尝试填充的字段的属性中没有id。id
password
存在,但它包含大量的WebElement事实上,您正在本地化一个id,该id包含其他Web元素中的此字段,因此错误消息告诉您,它无法聚焦

您可以使用xpath,例如

driver.findElement(By.xpath("//input[@type='password']")).sendKeys("********"); 
或css选择器,例如:

driver.findElement(By.cssSelector("input[type=password]")).sendKeys("********");
但您不能使用ID访问此字段

我尝试了所有这三种解决方案,它们都奏效了。
关于可能的等待问题,请不要犹豫使用包装器和服务员一起使用
findElement
方法,这会有很大帮助。然而,我认为这并不是这里的主要问题。

等待一个元素成为可点击的。以下是您如何做到这一点

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");

你能分享完整的错误信息吗?您的错误消息显示无法聚焦元素,但哪个元素?它是密码字段还是任何其他字段?请改为使用.cssSelector(“输入[type=password]”。看起来你抓错元素了。如果这样行的话,我会发布一个答案。虽然您也可能遇到元素可见的情况,但它还没有完全准备好与之交互。@mrfreester By.cssSelector(“input[type=password]”),这不起作用。@AuroSarma-------线程“main”中的异常org.openqa.selenium.webdrivexception:未知错误:无法聚焦元素(会话信息:chrome=61.0.3163.100)(驱动程序信息:chromedriver=2.32.498550(9dec58e66c31bcc53a9ce3c7226f0c1c581906a),平台=Windows NT 10.0.14393 x8664)(警告:服务器未提供任何堆栈跟踪信息)@Meghabagri您是否收到相同的错误消息?我预计
#password
选择器会出现无法聚焦元素错误,但
输入[type=password]
不会。为了验证这不是等待问题,您还可以在尝试调用密码字段上的
sendKeys
之前先休眠5秒钟。如果这样做有效,那么您正在等待错误的条件。