2016-11-12 68 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();

相關問題