自動化測試程式如何取得網頁所有連結與文字

自動化測試程式如何取得網頁所有連結與文字

這篇文章主要說明如何一次取得所有該網頁的連結與文字?

當我們需要驗證網頁上所有連結是否正確,或是一次取得網頁上所有連結網址時要如何處理?

 

測試情境

我們用BBC News 當作範例,

這個例子說我們將到訪 BBC網站,接著取得該網頁上所有的連結、文字

進一步,可以驗證或是測試該網頁的連結是否正確

程式說明

要如何有效的取得所有網頁上的聯結呢?

這裡介紹一個小技巧,首先我們必須取得該網頁的一個大範圍元件,例如範例的 Box

接著,我們再用找出所有該範圍內的  TabName = “a”,這樣我們就可以得到所有連結的網頁元件,存放到 Links

WebElement box = driver.findElement(By.xpath(“//*[@id=’blq-main’]”));
List<WebElement> links = box.findElements(By.tagName(“a”));

接著再用迴圈將 links陣列的屬性列印出,

印出連結文字

links.get(i).getText()

印出連結URL

links.get(i).getAttribute(“href”)

Java/Selenium程式範例

[pastacode lang=”java” message=”” highlight=”” provider=”manual”]

package myJava;

import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

//extract links from a section of BBC.com
public class Specific_Links {

	private static final String NULL = null;

	public static void main(String[] args) throws InterruptedException {
		WebDriverWait wait;
		WebDriver driver = new FirefoxDriver();
		driver.get("http://bbc.com");
	    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

		
		WebElement box = driver.findElement(By.xpath("//*[@id='blq-main']"));
		List<WebElement> links = box.findElements(By.tagName("a"));
		System.out.println("Total Count on Link In Business -> "+ links.size() );
		
		for (int i =0; i<links.size();i++){
		
			System.out.println("getTabName = " +links.get(i).getTagName()+ " : getText()= "+links.get(i).getText());
			System.out.println("getAttribute href = " + links.get(i).getAttribute("href"));
			

		}
		
		driver.close();
	}

}

[/pastacode]

Leave a Reply

Your email address will not be published. Required fields are marked *