正确的XPath但sendKeys()在Selenium中不起作用

时间:2017-08-27 15:30:53

标签: java selenium xpath

我正在尝试将文字发送到https://signup.live.com/的密码字段,但是所有其他字段都已正确填充(密码字段XPath也正确 - .//*[@id='Password'])密码和密码确认字段中未显示数据。

我觉得这与发送电子邮件/用户名后页面(某种程度)刷新(显示“此用户名可用”或“不可用”)这一事实有关,但这只会影响密码字段。 。

我不确定如何解决问题,因为我使用的XPath是正确的。

有什么想法吗?

由于

P.S

有人说电子邮件验证导致错误,这可能是正确的。但是,当我添加:

            driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

它似乎无法解决问题。有时候它会起作用,大部分时间都没有。

1 个答案:

答案 0 :(得分:0)

由于电子邮件验证而导致问题。一旦你发送一封电子邮件,网站就会验证,而selenium会尝试同时发送密码,但是找不到关注的元素并抛出它所以它无法专注于密码字段并抛出:

  

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

因此,在发送密码之前,您必须等待一段时间,直到对emailid进行验证(分析验证电子邮件所需的时间),然后发送密码。这里Thread.sleep()将帮助您这样做。但是有些时候不推荐它,因为它会在给定的时间内暂停你的脚本事件,你的元素在给定时间之前难以处理。

另一个建议是如果你有元素id然后避免使用xpath,你可以找到像driver.findElement(By.id("Password"))那样的。

对于您的脚本示例代码可以是:

driver = new ChromeDriver();    
driver.manage().window().maximize();
driver.get("https://signup.live.com/");
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.findElement(By.id("FirstName")).sendKeys("test");
driver.findElement(By.id("LastName")).sendKeys("user");
driver.findElement(By.id("MemberName")).sendKeys("testuser@gmail.com");
Thread.sleep(10000);
driver.findElement(By.id("Password")).sendKeys("testone1#");
driver.findElement(By.id("RetypePassword")).sendKeys("testone1#");