zoukankan      html  css  js  c++  java
  • 章节十五、4-找到当前页所有连接

    一、实例演示

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

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

  • 相关阅读:
    Python入门--14--字典
    Python入门--13--爬虫一
    Python入门--13--递归
    Python入门--12--函数与变量
    Python入门--11--自定义函数
    Python入门--10--序列
    mysql 删除重复记录
    Java 不可编辑的Map
    mysql left join
    mysql 超过5名学生的课
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/11280410.html
Copyright © 2011-2022 走看看