天天看點

章節十一、3-如何在頁面之間切換

以下操作基于該網站進行示範:https://www.yahoo.com/

一、driver.getTitle()---擷取目前頁面的title

1 package basicweb;
 2 
 3 import static org.junit.jupiter.api.Assertions.fail;
 4 
 5 import java.util.concurrent.TimeUnit;
 6 
 7 import org.junit.jupiter.api.AfterAll;
 8 import org.junit.jupiter.api.AfterEach;
 9 import org.junit.jupiter.api.BeforeAll;
10 import org.junit.jupiter.api.BeforeEach;
11 import org.junit.jupiter.api.Test;
12 import org.openqa.selenium.WebDriver;
13 import org.openqa.selenium.chrome.ChromeDriver;
14 
15 class NavigatingBetweenPages {
16 //    聲明了一個webdriver類型的變量名,對象名為“driver”
17     WebDriver driver;
18 //    定義一個String類型的字元串,用于存放我們需要打開的url
19     String baseUrl;
20     
21     @BeforeEach
22     void setUpBeforeClass() throws Exception {
23 //        将這個變量名對象的引用指向ChromeDriver,表示我們需要用谷歌浏覽器來進行自動化操作
24         driver = new ChromeDriver();
25 //        指定我們需要打開的網站
26         baseUrl = "https://www.yahoo.com/";
27 //        隐式等待
28 //        .implicitlyWait(時長, 時間機關);下面設定時間為“10秒”
29 //        TimeUnit.SECONDS表示秒
30         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
31 //        浏覽器視窗最大化
32         driver.manage().window().maximize();
33     }
34 
35     @Test
36     void test() {
37         driver.get(baseUrl);
38 //        擷取目前頁面的title,用String類型的變量來接收
39         String title = driver.getTitle();
40 //        列印title
41         System.out.println(title);
42     }
43     
44     @AfterEach
45     void tearDownAfterClass() throws Exception {
46         driver.quit();
47     } }      

運作列印結果:

二、driver.getCurrentUrl()--擷取目前頁面的url

package basicweb;

import java.util.concurrent.TimeUnit;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

class NavigatingBetweenPages {
//    聲明了一個webdriver類型的變量名,對象名為“driver”
    WebDriver driver;
//    定義一個String類型的字元串,用于存放我們需要打開的url
    String baseUrl;
    
    @BeforeEach
    void setUpBeforeClass() throws Exception {
//        将這個變量名對象的引用指向ChromeDriver,表示我們需要用谷歌浏覽器來進行自動化操作
//        ChromeOptions options = new ChromeOptions();
//        options.addArguments("--start-maximized", "allow-running-insecure-content", "--test-type");
        driver = new ChromeDriver();
//        指定我們需要打開的網站
        baseUrl = "https://www.baidu.com/";
//        隐式等待
//        .implicitlyWait(時長, 時間機關);下面設定時間為“10秒”
//        TimeUnit.SECONDS表示秒
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//        浏覽器視窗最大化
        driver.manage().window().maximize();
//        打開網址
        driver.get(baseUrl);
    }

    @Test
    void test() {    
//        擷取目前頁面的url
        String url = driver.getCurrentUrl();
//        列印url
        System.out.println("目前頁面的url為:"+url);
    }
    
    @AfterEach
    void tearDownAfterClass() throws Exception {
//      關閉浏覽器  
        driver.quit();
    }
}          

運作結果為:

三、driver.navigate().to(urlToNavigate)--在未點選登入按鈕的情況下進入指定頁面

driver.navigate().back():傳回上一頁

driver.navigate().forward():跳轉到下一頁

1 package basicweb;
 2 
 3 import java.util.concurrent.TimeUnit;
 4 
 5 import org.junit.jupiter.api.AfterEach;
 6 import org.junit.jupiter.api.BeforeEach;
 7 import org.junit.jupiter.api.Test;
 8 import org.openqa.selenium.WebDriver;
 9 import org.openqa.selenium.chrome.ChromeDriver;
10 import org.openqa.selenium.chrome.ChromeOptions;
11 
12 class NavigatingBetweenPages {
13 //    聲明了一個webdriver類型的變量名,對象名為“driver”
14     WebDriver driver;
15 //    定義一個String類型的字元串,用于存放我們需要打開的url
16     String baseUrl;
17     
18     @BeforeEach
19     void setUpBeforeClass() throws Exception {
20 //        将這個變量名對象的引用指向ChromeDriver,表示我們需要用谷歌浏覽器來進行自動化操作
21 //        ChromeOptions options = new ChromeOptions();
22 //        options.addArguments("--start-maximized", "allow-running-insecure-content", "--test-type");
23         driver = new ChromeDriver();
24 //        指定我們需要打開的網站
25         baseUrl = "https://www.yahoo.com/";
26 //        隐式等待
27 //        .implicitlyWait(時長, 時間機關);下面設定時間為“10秒”
28 //        TimeUnit.SECONDS表示秒
29         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
30 //        浏覽器視窗最大化
31         driver.manage().window().maximize();
32 //        打開網址
33         driver.get(baseUrl);
34     }
35 
36     @Test
37     void test() throws InterruptedException {
38 //        擷取目前頁面的title,用String類型的變量來接收
39         String title = driver.getTitle();
40 //        列印title
41         System.out.println("頁面标題為:"+title);
42         
43 //        擷取目前頁面的url
44         String url = driver.getCurrentUrl();
45 //        列印url
46         System.out.println("第一次進入頁面時的url:"+url);
47         
48 //        建立一個String的變量用于存儲“登入”頁面的url
49         String urlToNavigate = "https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.lang=en-US&.done=https%3A%2F%2Fwww.yahoo.com";
50 //        跳轉到登入頁面
51         driver.navigate().to(urlToNavigate);
52         url = driver.getCurrentUrl();
53         System.out.println("第一次跳轉後的url:"+url);
54         
55 //        強制等待2秒(需要抛出異常)
56         Thread.sleep(2000);
57 //        傳回上一次打開的url
58         driver.navigate().back();
59         url = driver.getCurrentUrl();
60         System.out.println("傳回到跳轉前頁面的url(傳回上一頁):"+url);
61         
62 //        強制等待2秒(需要抛出異常)
63         Thread.sleep(2000);
64 //        跳轉到下一頁
65         driver.navigate().forward();
66         url = driver.getCurrentUrl();
67         System.out.println("傳回到跳轉前頁面的url(跳轉到下一頁):"+url);
68         
69     }
70     
71     @AfterEach
72     void tearDownAfterClass() throws Exception {
73 //        退出浏覽器
74         driver.quit();
75     }
76 }      

運作結果為:

四、重新整理頁面

方法一:driver.navigate().refresh();

方法二:driver.get(url);将通過driver.getCurrentUrl();方法擷取到的url重新通過“.get”方法打開,也相當于重新加載重新整理頁面

package basicweb;

import java.util.concurrent.TimeUnit;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

class NavigatingBetweenPages {
//    聲明了一個webdriver類型的變量名,對象名為“driver”
    WebDriver driver;
//    定義一個String類型的字元串,用于存放我們需要打開的url
    String baseUrl;
    
    @BeforeEach
    void setUpBeforeClass() throws Exception {
//        将這個變量名對象的引用指向ChromeDriver,表示我們需要用谷歌浏覽器來進行自動化操作
//        ChromeOptions options = new ChromeOptions();
//        options.addArguments("--start-maximized", "allow-running-insecure-content", "--test-type");
        driver = new ChromeDriver();
//        指定我們需要打開的網站
        baseUrl = "https://www.yahoo.com/";
//        隐式等待
//        .implicitlyWait(時長, 時間機關);下面設定時間為“10秒”
//        TimeUnit.SECONDS表示秒
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//        浏覽器視窗最大化
        driver.manage().window().maximize();
//        打開網址
        driver.get(baseUrl);
    }

    @Test
    void test() throws InterruptedException {
//        擷取目前頁面的title,用String類型的變量來接收
        String title = driver.getTitle();
//        列印title
        System.out.println("頁面标題為:"+title);
        
//        擷取目前頁面的url
        String url = driver.getCurrentUrl();
//        列印url
        System.out.println("第一次進入頁面時的url:"+url);
        
        //        建立一個String的變量用于存儲“登入”頁面的url
        String urlToNavigate = "https://login.yahoo.com/config/login?.src=fpctx&.intl=us&.lang=en-US&.done=https%3A%2F%2Fwww.yahoo.com";
//        跳轉到登入頁面
        driver.navigate().to(urlToNavigate);
        url = driver.getCurrentUrl();
        System.out.println("第一次跳轉後的url:"+url);
        
//        強制等待2秒(需要抛出異常)
        Thread.sleep(2000);
//        傳回上一次打開的url
        driver.navigate().back();
        url = driver.getCurrentUrl();
        System.out.println("傳回到跳轉前頁面的url(傳回上一頁):"+url);
        
//        強制等待2秒(需要抛出異常)
        Thread.sleep(2000);
//        跳轉到下一頁
        driver.navigate().forward();
        url = driver.getCurrentUrl();
        System.out.println("傳回到跳轉前頁面的url(跳轉到下一頁):"+url);
        
        Thread.sleep(2000);
//        重新整理頁面:方法一
        driver.navigate().refresh();
//        重新整理頁面:方法二
//        driver.get(url);
        
    }
    
    @AfterEach
    void tearDownAfterClass() throws Exception {
//        退出浏覽器
        driver.quit();
    }
}      

五、driver.getPageSource()--擷取目前頁面的“頁面源代碼

1 package basicweb;
 2 
 3 import java.util.concurrent.TimeUnit;
 4 
 5 import org.junit.jupiter.api.AfterEach;
 6 import org.junit.jupiter.api.BeforeEach;
 7 import org.junit.jupiter.api.Test;
 8 import org.openqa.selenium.WebDriver;
 9 import org.openqa.selenium.chrome.ChromeDriver;
10 import org.openqa.selenium.chrome.ChromeOptions;
11 
12 class NavigatingBetweenPages {
13 //    聲明了一個webdriver類型的變量名,對象名為“driver”
14     WebDriver driver;
15 //    定義一個String類型的字元串,用于存放我們需要打開的url
16     String baseUrl;
17     
18     @BeforeEach
19     void setUpBeforeClass() throws Exception {
20 //        将這個變量名對象的引用指向ChromeDriver,表示我們需要用谷歌浏覽器來進行自動化操作
21 //        ChromeOptions options = new ChromeOptions();
22 //        options.addArguments("--start-maximized", "allow-running-insecure-content", "--test-type");
23         driver = new ChromeDriver();
24 //        指定我們需要打開的網站
25         baseUrl = "https://www.yahoo.com/";
26 //        隐式等待
27 //        .implicitlyWait(時長, 時間機關);下面設定時間為“10秒”
28 //        TimeUnit.SECONDS表示秒
29         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
30 //        浏覽器視窗最大化
31         driver.manage().window().maximize();
32 //        打開網址
33         driver.get(baseUrl);
34     }
35 
36     @Test
37     void test() throws InterruptedException {    
38 //        擷取目前頁面源代碼
39         String pageSource = driver.getPageSource();
40         System.out.println(pageSource);
41         
42     }
43     
44     @AfterEach
45     void tearDownAfterClass() throws Exception {
46 //        退出浏覽器
47         driver.quit();
48     }
49 }      

運作結果:

我們也可以在浏覽器中直接擷取目前浏覽頁面源代碼:點選滑鼠右擊---》檢視網頁源代碼