2013-10-04 122 views
0

我的問題很簡單 - 使用Selenium,當每個超鏈接在新頁面或新窗口中打開或在同一網頁中打開時,如何繼續單擊鏈接。單擊Selenium Webdriver中的Web鏈接

例如,我有一個網頁上的以下鏈接: 登錄 註冊 忘了密碼? 註冊與我們 請點擊此鏈接 首頁 條款 隱私政策

這裏是我寫點擊網頁這些提到的鏈接代碼的小片段:

List<WebElement> elements = driver.findElements(By.tagName("a")); 
     //clicking all links 
     for (WebElement el : elements){ 
      System.out.println("Link getting clicked" + el.getText()); 
      el.click(); 
      driver.navigate().back(); 
     } 

正如你可以看到我我試圖獲得鏈接並試圖逐一點擊它們。但是,在第一次點擊後,我收到錯誤。控制檯說:「org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM」。

我很小心地知道原因,因爲鏈接在同一個網頁上打開,但我正在做一個後退導航,它根本沒有幫助我。

有什麼想法/建議嗎?

+0

使用'.navigate()。back()'導航回頁面並不重要。在初始點擊之後,頁面正在改變,因此您必須重新提煉所有'a'元素。 – Arran

回答

0

這可能是由於程序執行前進到「driver.navigate()。back();」在頁面加載之前。

嘗試引入implicit wait,它告訴

例如「嘗試的webdriver如果它們沒有立即找到一個元件或多個元件時輪詢DOM一定量的時間」當您創建的Web驅動程序試試:

WebDriver driver = new FirefoxDriver(); 
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); 
+0

實際上,我在驅動程序導航之前和之後放置了超過5000個Thread.sleep,但仍然是同樣的事情。原因是:org.openqa.selenium.remote.ErrorHandler $ UnknownServerException:元素不再附加到DOM –

+0

@Edin_CA你還可以在你的問題中包含目標HTML嗎? –

+0

好的。我將編輯更多:登錄鏈接,這恰好是第一個鏈接工作,因爲它在同一個網頁中打開。但是,註冊失敗,因爲它打開一個新的網址。這就是爲什麼我要避免導航。是否有一種方法可以繼續執行我的測試,即使頁面打開時使用新的url? –

0

你必須refind每當一個頁面重新加載,然後才能與它進行交互,爲您的代碼元素,請嘗試修改它們這樣:

driver.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS); 
    List<WebElement> elements = driver.findElements(By.tagName("a")); 
    //clicking all links 
    for (int i=0; i<elements.size(); i++){ 
     WebElement el = driver.findElements(By.tagName("a")).get(i);    
     System.out.println("Link getting clicked" + el.getText()); 
     el.click(); 
     driver.navigate().back(); 
    } 
相關問題