自動化測試程式如何取得網頁所有連結與文字
這篇文章主要說明如何一次取得所有該網頁的連結與文字?
當我們需要驗證網頁上所有連結是否正確,或是一次取得網頁上所有連結網址時要如何處理?
測試情境
我們用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]