<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何使用 Selenium Webdriver 查找所有/斷開的鏈接 > 原文: [https://www.guru99.com/find-broken-links-selenium-webdriver.html](https://www.guru99.com/find-broken-links-selenium-webdriver.html) ## 什么是鏈接斷開? 斷開的鏈接是無法訪問的鏈接或 URL。 由于某些服務器錯誤,它們可能已關閉或無法運行 URL 的狀態始終為有效 2xx。 不同的 HTTP 狀態代碼具有不同的用途。 對于無效請求,HTTP 狀態為 4xx 和 5xx。 4xx 類狀態碼主要用于客戶端錯誤,而 5xx 類狀態碼主要用于服務器響應錯誤。 在單擊并確認之前,我們很可能無法確認該鏈接是否正常工作。 ## 為什么要檢查斷開的鏈接? 您應始終確保網站上沒有斷開的鏈接,因為用戶不應進入錯誤頁面。 如果未正確更新規則或服務器上不存在請求的資源,則會發生錯誤。 手動檢查鏈接是一項繁瑣的任務,因為每個網頁可能都有大量鏈接&,必須對所有頁面重復進行手動處理。 使用 Selenium 的自動化腳本將使過程自動化,這是更合適的解決方案。 ## 如何檢查斷開的鏈接和圖像 要檢查斷開的鏈接,您需要執行以下步驟。 1. 基于<和>標簽收集網頁中的所有鏈接。 2. 發送該鏈接的 HTTP 請求并讀取 HTTP 響應代碼。 3. 根據 HTTP 響應代碼找出鏈接是有效的還是斷開的。 4. 對所有捕獲的鏈接重復此操作。 ## 查找網頁上斷開鏈接的代碼 以下是測試我們的用例的 Web 驅動程序代碼: ``` package automationPractice; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; public class BrokenLinks { private static WebDriver driver = null; public static void main(String[] args) { // TODO Auto-generated method stub String homePage = "http://www.zlti.com"; String url = ""; HttpURLConnection huc = null; int respCode = 200; driver = new ChromeDriver(); driver.manage().window().maximize(); driver.get(homePage); List<WebElement> links = driver.findElements(By.tagName("a")); Iterator<WebElement> it = links.iterator(); while(it.hasNext()){ url = it.next().getAttribute("href"); System.out.println(url); if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; } if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; } try { huc = (HttpURLConnection)(new URL(url).openConnection()); huc.setRequestMethod("HEAD"); huc.connect(); respCode = huc.getResponseCode(); if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } driver.quit(); } } ``` ## 解釋代碼示例 ### 步驟 1:導入軟件包 除默認軟件包外,還導入以下軟件包: ``` import java.net.HttpURLConnection; ``` 使用此包中的方法,我們可以發送 HTTP 請求并從響應中捕獲 HTTP 響應代碼。 ### 步驟 2:收集網頁中的所有鏈接 標識網頁中的所有鏈接并將其存儲在列表中。 ``` List<WebElement> links = driver.findElements(By.tagName("a")); ``` 獲取迭代器以遍歷列表。 ``` Iterator<WebElement> it = links.iterator(); ``` ### 步驟 3:識別和驗證 URL 在這一部分中,我們將檢查 URL 是否屬于第三方域或 URL 是否為空/空。 獲取錨標記的 href 并將其存儲在 url 變量中。 ``` url = it.next().getAttribute("href"); ``` 檢查 URL 是否為空或為空,如果滿足條件,則跳過其余步驟。 ``` if(url == null || url.isEmpty()){ System.out.println("URL is either not configured for anchor tag or it is empty"); continue; } ``` 檢查 URL 是屬于主域還是第三方。 如果它屬于第三方域,請跳過其余步驟。 ``` if(!url.startsWith(homePage)){ System.out.println("URL belongs to another domain, skipping it."); continue; } ``` ### 步驟 4:發送 http 請求 HttpURLConnection 類具有發送 HTTP 請求和捕獲 HTTP 響應代碼的方法。 因此,openConnection()方法(URLConnection)的輸出類型轉換為 HttpURLConnection。 ``` huc = (HttpURLConnection)(new URL(url).openConnection()); ``` 我們可以將請求類型設置為“ HEAD”而不是“ GET”。 這樣就只返回標題,而不返回文檔主體。 ``` huc.setRequestMethod("HEAD"); ``` 在調用 connect()方法時,將建立與 url 的實際連接并發送請求。 ``` huc.connect(); ``` ### 步驟 5:驗證鏈接 使用 getResponseCode()方法,我們可以獲取請求的響應代碼 ``` respCode = huc.getResponseCode(); ``` 根據響應代碼,我們將嘗試檢查鏈接狀態。 ``` if(respCode >= 400){ System.out.println(url+" is a broken link"); } else{ System.out.println(url+" is a valid link"); } ``` 因此,我們可以從網頁上獲取所有鏈接并打印鏈接是否有效。 希望本教程可以幫助您使用硒檢查斷開的鏈接。 ## 如何獲取網頁的所有鏈接 Web [測試](/software-testing.html)中的常見過程之一是測試頁面中存在的所有鏈接是否正常工作。 使用 **Java for-each 循環**, **findElements()** & **By.tagName(“ a”)**方法的組合,可以方便地完成此操作。 findElements()方法返回帶有標簽 a 的 Web 元素列表。 使用 for-each 循環,可以訪問每個元素。 ![](https://img.kancloud.cn/75/ac/75ac059708a4cd2b673d4458d82b4fef_667x255.png) 下面的 WebDriver 代碼檢查 Mercury Tours 主頁上的每個鏈接,以確定正在運行的鏈接和仍在構建的鏈接。 ``` import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import java.util.List; import java.util.concurrent.TimeUnit; import org.openqa.selenium.*; public class P1 { public static void main(String[] args) { String baseUrl = "http://demo.guru99.com/test/newtours/"; System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); String underConsTitle = "Under Construction: Mercury Tours"; driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.get(baseUrl); List<WebElement> linkElements = driver.findElements(By.tagName("a")); String[] linkTexts = new String[linkElements.size()]; int i = 0; //extract the link texts of each link element for (WebElement e : linkElements) { linkTexts[i] = e.getText(); i++; } //test each link for (String t : linkTexts) { driver.findElement(By.linkText(t)).click(); if (driver.getTitle().equals(underConsTitle)) { System.out.println("\"" + t + "\"" + " is under construction."); } else { System.out.println("\"" + t + "\"" + " is working."); } driver.navigate().back(); } driver.quit(); } } ``` 輸出應類似于以下指示的輸出。 * 使用 By.cssSelector()和 By.xpath()方法訪問圖像鏈接。 ![](https://img.kancloud.cn/2e/22/2e2289fc6ed1bd96d09cc33482f3cf16_414x308.png).png) ### 故障排除 在單獨的情況下,代碼訪問的第一個鏈接可以是“主頁”鏈接。 在這種情況下,當第一個動作打開瀏覽器時,driver.navigate.back()動作將顯示空白頁面。 驅動程序將無法在空白瀏覽器中找到所有其他鏈接。 因此,IDE 將引發異常,其余代碼將不執行。 使用 If 循環可以輕松地處理此問題。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看