2017-08-27 98 views
1

我试图将文本发送到https://signup.live.com/的密码字段,但是所有其他字段的填充都正确(并且XPath对于密码字段也是正确的 - .//*[@id='Password'])数据在密码和密码确认字段中不显示。正确的XPath,但sendKeys()在Selenium中不工作

我有一种感觉,它与发送电子邮件/用户名后页面(排序)刷新(显示“此用户名可用”或“不可用”)的事实有关,但这只影响密码字段..

我不知道如何解决这个问题,因为我使用XPath是正确的..

任何想法?

感谢

P.S

有人说电子邮件验证是造成这可能是正确的错误。但是,当我补充说:

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

它似乎并没有解决这个问题。有时候它可以工作,但大部分时间没有。

+0

尝试把一些等待输入密码之前。 – Kapil

+0

请参阅:[我如何做X?](https://meta.stackoverflow.com/questions/253069/whats-the-appropriate-new-current-close-reason-for-how-do-i-do- x)对SO的期望是,用户提出问题不仅仅是研究来回答他们自己的问题,而且还分享研究,代码尝试和结果。这表明你已经花时间去尝试帮助自己,它使我们避免重申明显的答案,最重要的是它可以帮助你得到更具体和相关的答案!参见:[ask] – JeffC

+0

@Kapil他做了driver.manage()。timeouts()。implicitlyWait(15,TimeUnit.SECONDS); –

回答

0

由于电子邮件验证导致问题。一旦您发送电子邮件网站验证和硒试图同时发送密码,但无法找到该元素突出重点,所以抛出它不能集中在密码字段,并抛出:

Exception in thread "main" org.openqa.selenium.WebDriverException: unknown error: cannot focus element

所以送你有密码之前等待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("[email protected]"); 
Thread.sleep(10000); 
driver.findElement(By.id("Password")).sendKeys("testone1#"); 
driver.findElement(By.id("RetypePassword")).sendKeys("testone1#"); 
+1

'Thread.sleep()'是一个不好的习惯。你应该使用'WebDriverWait'。 – JeffC

+0

@JeffC,你可以发布你的答案'webdriverwait'条件来处理不能聚焦元素错误。使用与张贴的OP相同的URL。我认为这是一个床的做法,每次当你看到selenium post.sql中的thread.sleep,你更喜欢投票 – NarendraR

+1

我试过了,我根本没有看到任何问题。问题是不清楚问题是什么,没有代码被提供,因此很难说实际上发生了什么.Thread.sleep()是一个有据可查的不良实践,所以当你或者其他人把它放在他们的答案中时,它应该被低估,除非你解释为什么它是绝对必要的那个特例。 – JeffC

相关问题