一、实例演示
1 package pomtestcase; 2 3 import java.net.HttpURLConnection; 4 import java.net.URL; 5 import java.util.ArrayList; 6 import java.util.List; 7 import java.util.concurrent.TimeUnit; 8 9 import org.junit.jupiter.api.AfterEach; 10 import org.junit.jupiter.api.BeforeEach; 11 import org.junit.jupiter.api.Test; 12 import org.openqa.selenium.By; 13 import org.openqa.selenium.WebDriver; 14 import org.openqa.selenium.WebElement; 15 import org.openqa.selenium.chrome.ChromeDriver; 16 17 import pageclasses.SearchPageFactory; 18 19 class FindLinks { 20 21 private WebDriver driver; 22 private String url; 23 private SearchPageFactory searchPage; 24 25 @BeforeEach 26 void setUp() throws Exception { 27 driver = new ChromeDriver(); 28 url = "https://www.expedia-cn.com/"; 29 searchPage = new SearchPageFactory(driver); 30 driver.manage().window().maximize(); 31 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 32 driver.get(url); 33 } 34 35 @Test 36 void test() throws InterruptedException { 37 searchPage.clickFly(); 38 Thread.sleep(3000); 39 // 定义一个WebElement类型的集合,用于接收clickableLinks方法查找到的该页面的链接 40 List<WebElement> linkList = clickableLinks(driver); 41 // 用高级for循环打印出查找到的链接和链接状态 42 for(WebElement link:linkList) { 43 // 用clickableLinks方法查找该页面所以包含href属性的标签,存放到string类型的href变量中 44 String href = link.getAttribute("href"); 45 try { 46 // 打印出获取到的链接href以及链接响应状态 信息 47 // linkStatus(new URL(href)):表示调用了linkStatus方法,然后将查找到的href链接作为参数传给URL对象 48 System.out.println("URL:"+href+"returned:"+linkStatus(new URL(href))); 49 } 50 catch(Exception e) { 51 System.out.println(e.getMessage()); 52 } 53 } 54 } 55 56 /* 57 * 该方法用于查找可点击的链接,返回的值是一个list集合 58 * */ 59 public static List<WebElement> clickableLinks(WebDriver driver){ 60 // 定义一个WebElement类型的集合 61 List<WebElement> linksToClick = new ArrayList<WebElement>(); 62 // 该集合用于存放网页中所有带a标签的元素(html中a标签表示用于标识超链接) 63 List<WebElement> elements = driver.findElements(By.tagName("a")); 64 // 有些网站中超链接可能是图标,所以我们需要把表示图片的img标签也加入集合中 65 elements.addAll(driver.findElements(By.tagName("img"))); 66 // 用高级for循环判断elements集合中存的a、img标签中是否带有href属性,带有该属性的一定就是超链接 67 for(WebElement e:elements){ 68 // 判断href标签属性是否为空 69 if(e.getAttribute("href")!=null){ 70 // 不等于空就存放到linksToClick集合中 71 linksToClick.add(e); 72 } 73 } 74 // 返回linksToClick集合 75 return linksToClick; 76 } 77 78 /* 79 * 检查链接响应的状态 80 * */ 81 public static String linkStatus(URL url) { 82 // 捕获异常 83 try { 84 // HttpURLConnection方法可以获取http链接的响应消息 85 // openConnection()返回链接响应消息 86 // 因为URLConnection是HttpURLConnection的父类,所以需要进行转换 87 HttpURLConnection http = (HttpURLConnection)url.openConnection(); 88 // 建立连接 89 http.connect(); 90 // 获取响应消息 91 String responseMessage = http.getResponseMessage(); 92 // 断开链接 93 http.disconnect(); 94 // 返回响应消息 95 return responseMessage; 96 } 97 catch(Exception e){ 98 // 返回异常 99 return e.getMessage(); 100 } 101 } 102 103 @AfterEach 104 void tearDown() throws Exception { 105 Thread.sleep(2000); 106 driver.quit(); 107 } 108 }
如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。
内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。
欢迎关注,转载请注明来源。