2016-11-12 71 views
-1

我是新来的硒网络驱动程序,我试图做一个简单的登录自动化。 这里是链接到易趣的登录页面:https://signin.ebay.com/如何使用selenium查找DYNAMIC页面中的元素 - java?

下面是用户名输入框的HTML代码:

<input size="40" maxlength="64" name="2045849967" id="2045849967" type="text" autocapitalize="off" autocorrect="off" placeholder="Email or username" class="fld">

下面是HTML代码为密码输入框:

<input size="40" maxlength="64" name="955270437" id="955270437" type="password" autocapitalize="off" autocorrect="off" placeholder="Password" class="fld">

这里是我的代码试图的SendKeys到用户名和密码输入框:

driver.findElement(By.id("2045849967")).sendKeys("[email protected]"); 
driver.findElement(By.id("955270437")).sendKeys("somePassword"); 

的问题是,我无法找到这些ID的元素,因为它的每次页面加载/刷新时都会更改。 请注意,所有ID都完全改变。 我的解决方法是什么? 感谢

UPDATE: 我成功通过登录页面找到“注册”元素并单击“选项卡”就可以进入用户名框,但现在当我进入用户名框我不知道我该如何'发送'进去,因为我没有真正的用户名元素。

下面是代码:

WebElement regElement = driver.findElement(By.id("regTab")); 
 
regElement.sendKeys(Keys.TAB);

现在,我怎么从这里继续下去吗? 我需要插入用户名,然后再次点击'Tab'并插入密码。 有什么选择?

+0

尝试使用CSS或XPath定位。 – Grasshopper

回答

1

您可以使用这些

By.cssSelector("input[placeholder='Email or username']") 
By.cssSelector("input[placeholder='Password']") 

显然,对于电子邮件字段两场比赛中,第一个被隐藏这将导致此失败。你仍然可以使用这些选择器,你只需抓住第一个定位器的第二个匹配。

driver.findElements(By.cssSelector("input[placeholder='Email or username']")).get(1).sendKeys("abc"); 
driver.findElement(By.cssSelector("input[placeholder='Password']")).sendKeys("abc"); 
+0

它不工作..别的也许?或任何想法为什么它不工作?因为占位符真的没有改变。 – Shimi

+0

用工作代码更新了答案。 – JeffC

+0

感谢它的作品! – Shimi

0

我发现了这个问题的解决方案。

 WebElement regElement = driver.findElement(By.id("regTab")); 
 
\t \t regElement.sendKeys(Keys.TAB); 
 
\t \t WebElement currentElement = driver.switchTo().activeElement(); 
 
\t \t currentElement.sendKeys("[email protected]"); 
 
\t \t currentElement.sendKeys(Keys.TAB); 
 
\t \t currentElement = driver.switchTo().activeElement(); 
 
\t \t currentElement.sendKeys("somePassword"); 
 
\t \t 
 
\t \t driver.findElement(By.id("sgnBt")).click();

相关问题