如何使用selenium在java DYNAMIC页面中查找元素 - java?

时间:2016-11-12 18:05:43

标签: java selenium-webdriver

我是硒网络驱动程序的新手,我试图进行简单的登录自动化。 以下是ebay登录页面的链接: https://signin.ebay.com/

以下是用户名输入框的html代码:



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

以下是密码输入框的html代码:

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

以下是我的代码尝试将凯斯发送到用户名和密码输入框:

driver.findElement(By.id("2045849967")).sendKeys("blabla@gmail.com");
driver.findElement(By.id("955270437")).sendKeys("somePassword");

问题是我无法通过这些ID找到元素,因为每次加载/刷新页面时它都会发生变化。 请注意,所有ID都完全改变了。 我有什么选择来解决这个问题? 谢谢

更新 我通过找到&#39;注册表&#39;成功进入用户名框。登录页面中的元素,然后点击“标签”,但现在当我进入用户名框时,我不知道如何才能发送“关键字”信息。因为我没有真正的用户名元素。

以下是代码:

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

现在我怎么能从这里继续? 我需要插入用户名,然后点击“&#39; Tab&#39;再次插入密码。 有什么选择?

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

我找到了解决这个问题的方法。

&#13;
&#13;
        WebElement regElement = driver.findElement(By.id("regTab"));
		regElement.sendKeys(Keys.TAB);
		WebElement currentElement = driver.switchTo().activeElement();
		currentElement.sendKeys("blabla@gmail.com");
		currentElement.sendKeys(Keys.TAB);
		currentElement = driver.switchTo().activeElement();
		currentElement.sendKeys("somePassword");
		
		driver.findElement(By.id("sgnBt")).click();
&#13;
&#13;
&#13;