一、实例演示

  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基础开始。

欢迎关注,转载请注明来源。

posted on 2019-08-02 16:05  时光以北暮南城  阅读(278)  评论(0编辑  收藏  举报