我正在尝试将文字发送到https://signup.live.com/
的密码字段,但是所有其他字段都已正确填充(密码字段XPath
也正确 - .//*[@id='Password']
)密码和密码确认字段中未显示数据。
我觉得这与发送电子邮件/用户名后页面(某种程度)刷新(显示“此用户名可用”或“不可用”)这一事实有关,但这只会影响密码字段。 。
我不确定如何解决问题,因为我使用的XPath
是正确的。
有什么想法吗?
由于
P.S
有人说电子邮件验证导致错误,这可能是正确的。但是,当我添加:
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
它似乎无法解决问题。有时候它会起作用,大部分时间都没有。
答案 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#");