溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

WebDriver操作瀏覽器

發(fā)布時(shí)間:2020-06-03 13:26:44 來(lái)源:網(wǎng)絡(luò) 閱讀:422 作者:honzhang 欄目:web開(kāi)發(fā)

1.操作頁(yè)面元素--單選按鈕
 
        WebElement femaleRadioButton = driver.findElement(By.xpath(""));
        if (!femaleRadioButton.isSelected()) {//判斷按鈕如果未被選中,則單擊選中。
            femaleRadioButton.click();
        }
        assertTrue(femaleRadioButton.isSelected());//再次判斷單選按鈕是否被選中。
  
2.操作頁(yè)面元素--多選按鈕
 
        WebElement checkBox1 = driver.findElement(By.xpath(""));
        if (!checkBox1.isSelected()) {
            checkBox1.click();
        }
        assertTrue(checkBox1.isSelected());
        WebElement checkBox2 = driver.findElement(By.cssSelector(""));
        if (!checkBox2.isSelected()) {
            checkBox2.click();
        }
        assertTrue(checkBox2.isSelected());
   
3.操作頁(yè)面元素--驗(yàn)證標(biāo)題
  
        //通過(guò)變量parentWindowId記錄下父窗口的控點(diǎn)。
        String parentWindowId = driver.getWindowHandle();
        //驗(yàn)證父窗口的完整標(biāo)題是Window open() Method
        assertEquals("Window open() Method", driver.getTitle());
        //定位到Try it Yourself按鈕,且單擊以打開(kāi)彈出窗口
        WebElement tryItButton = driver.findElement(By.xpath(".//*[@id='main']/div[2]/a"));
        tryItButton.click();

        //獲取所有打開(kāi)窗口的控點(diǎn)列表,并以變量allWindowId記錄。
        Set<String> allWindowId = driver.getWindowHandles();
        //在該控點(diǎn)列表中查找包含Tryit字符串作為標(biāo)題的窗口控點(diǎn),找到后則Break。
        for (String windowId : allWindowId) {
            //切換到包含TryIt字符串作為標(biāo)題的窗口
            if (driver.switchTo().window("windowId").getTitle().contains("TryIt")) {
                driver.switchTo().window("windowId");
                break;
            }
        }
        //驗(yàn)證其完整標(biāo)題為T(mén)ryit Editor v2.9
        assertEquals("Tryit Editor v2.9", driver.getTitle());
        //通過(guò)父窗口的控點(diǎn)再次切換回原父窗口
        driver.switchTo().window(parentWindowId);
        //驗(yàn)證其完整標(biāo)題為Window open() Method,確認(rèn)此處窗口切換功能的完成。
        assertEquals("Window open() Method", driver.getTitle());
 

   
4.操作頁(yè)面元素--驗(yàn)證內(nèi)容

   
        // 記錄父窗口的控點(diǎn)
        String parentWindowId = driver.getWindowHandle();
        // 驗(yàn)證父窗口完整標(biāo)題
        assertEquals("Window open() Method", driver.getTitle());
        // 點(diǎn)擊Tryit按鈕
        WebElement TryitButton = driver.findElement(By.xpath(".//*[@id='main']/div[2]/a"));
        TryitButton.click();
        // 獲取所有打開(kāi)窗口的控點(diǎn)
        Set<String> allWindowsId = driver.getWindowHandles();
        // 在該控點(diǎn)列表中查找包含open a new browser window字符串作為標(biāo)題的窗口控點(diǎn),找到后則Break。
        for (String windowId : allWindowsId) {
            if (driver.switchTo().window(windowId).getPageSource().contains("open a new browser window")) {
                driver.switchTo().window(windowId);
                break;
            }
        }
        assertEquals("Tryit Editor v2.9", driver.getTitle());
        driver.switchTo().window(parentWindowId);
        assertEquals("Window open() Method", driver.getTitle());

   
5.操作頁(yè)面元素--操作警告框、提示框、確認(rèn)框
警告框:用于提示用戶(hù)相關(guān)信息的驗(yàn)證結(jié)果、錯(cuò)誤或警告等
提示框:用于提示用戶(hù)在當(dāng)前對(duì)話(huà)框中輸入數(shù)據(jù) ,一般需用戶(hù)單擊取消或確認(rèn)按鈕
確認(rèn)框:用于提示用戶(hù)確認(rèn)或取消某個(gè)操作。一般需用戶(hù)單擊取消或確認(rèn)按鈕



//注意這里需要導(dǎo)入testNG的包。jnuit包不起作用。

    //警告框
        WebElement alertButton = driver.findElement(By.xpath("http://input[@value = 'alert']"));
        Thread.sleep(3000);
        alertButton.click();
        //切換到警告框并將其窗口控點(diǎn)賦予Selenium的Alert,以此來(lái)操作彈出的警告框。
        Alert javascriptAlert = driver.switchTo().alert();
        Thread.sleep(3000);
        System.out.println(javascriptAlert.getText());//打印出警告框上的文本信息:This is an alert!!
        //執(zhí)行警告框上的確認(rèn)按鈕的功能。
        javascriptAlert.accept();
        Thread.sleep(3000);
        System.out.println("------------------------------------");
    }


        //提示框
        WebElement promptButton = driver.findElement(By.xpath("http://input[@value = 'prompt']"));
        //單擊提示框
        promptButton.click();
        Alert javascriptPrompt = driver.switchTo().alert();
        //在文本輸入框中輸入如下文本信息。
        javascriptPrompt.sendKeys("type in prompt...");
        //單擊確認(rèn)按鈕
        javascriptPrompt.accept();
        System.out.println(javascriptPrompt.getText());//打印出:Your response was OK!

        javascriptPrompt = driver.switchTo().alert();
        javascriptPrompt.accept();

        promptButton.click();
        javascriptPrompt = driver.switchTo().alert();
        System.out.println(javascriptPrompt.getText());//打?。篊onfirm Test: Continue?
        //點(diǎn)擊“取消”按鈕
        javascriptPrompt.dismiss();

        javascriptPrompt = driver.switchTo().alert();
        System.out.println(javascriptPrompt.getText());//打印:Your response was Cancel!
        javascriptPrompt.accept();
        Thread.sleep(3000);
        System.out.println("------------------------------------");
    }

    
    //確認(rèn)框
        WebElement confirmButton = driver.findElement(By.xpath("http://input[@value = 'confirm']"));
        confirmButton.click();
        //定位到確認(rèn)框
        Alert javascriptConfirm = driver.switchTo().alert();
        //先執(zhí)行確認(rèn)框上的確認(rèn)按鈕
        javascriptConfirm.accept();

        //再次定位到確認(rèn)框
         javascriptConfirm = driver.switchTo().alert();
         System.out.println(javascriptConfirm.getText());//打?。篩our favorite color is: type in prompt...
         //點(diǎn)擊確認(rèn)
         javascriptConfirm.accept();

         //再次點(diǎn)擊確認(rèn)框的按鈕
         confirmButton.click();
         //定位到確認(rèn)框
         javascriptConfirm = driver.switchTo().alert();
         System.out.println(javascriptConfirm.getText());//打?。篧hat is your favorite color?
         //再執(zhí)行確認(rèn)框上的“取消”按鈕
         javascriptConfirm.dismiss();

         javascriptConfirm = driver.switchTo().alert();
         System.out.println(javascriptConfirm.getText());//打印:You pressed Cancel or no value was entered!
         javascriptConfirm.accept();
         Thread.sleep(3000);
         System.out.println("------------------------------------");


6.操作Browser最大化


    
//通過(guò)WebDriver的Windows()方法將Browser窗口最大化。
        driver.manage().window().maximize();
    

    
7.操作Browser  Cookies
反復(fù)地登錄需要多次填寫(xiě)用戶(hù)名和密碼。WebDriver提供了一系列Cookies的操作來(lái)獲取、填寫(xiě)、刪除Cookies的方法,節(jié)省了多次在登錄頁(yè)面的查找元素并填寫(xiě)登錄信息的時(shí)間。
(1)通過(guò) driver.manage().getCookies()獲取Cookies信息并通過(guò)緩存和文件寫(xiě)操作。保存到demo.cookie.txt文件中。

        WebDriver driver = new FirefoxDriver();
        // 打開(kāi)登錄首頁(yè)
        driver.get("https://www.shanbay.com/accounts/login/");
        Thread.sleep(2000);
        // 填寫(xiě)相關(guān)用戶(hù)信息:用戶(hù)名、密碼等.進(jìn)行登錄
        driver.findElement(By.name("username")).sendKeys("admin");
        driver.findElement(By.name("password")).sendKeys("123456");

        driver.findElement(By.xpath(".//*[@id='loginform']/div[3]/button")).click();

        // 新建一個(gè)本地文件zhihu.cookie.txt,用戶(hù)存儲(chǔ)后續(xù)獲取的Cookies信息
        File cookieFile = new File("demo.cookie.txt");
        try {
            cookieFile.delete();
            cookieFile.createNewFile();
            FileWriter fileWriter = new FileWriter(cookieFile);
            BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
            System.out.println("文件創(chuàng)建成功!");

            // 通過(guò)driver.manage().getCookies()獲取Cookies信息并通過(guò)緩存和文件寫(xiě)操作,保存到zhihu.cookie.txt中
            for (Cookie cookie : driver.manage().getCookies()) {
                bufferedWriter.write((cookie.getName() + ";" + cookie.getValue() + ";" + cookie.getDomain() + ";"
                        + cookie.getPath() + ";" + cookie.getExpiry() + ";" + cookie.isSecure()));
                bufferedWriter.newLine();
            }
            bufferedWriter.flush();
            bufferedWriter.close();
            fileWriter.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
         driver.quit();

    }

}


(2)讀取之前保存的Cookies并自動(dòng)填充到新打開(kāi)的瀏覽器的Cookies中,然后直接進(jìn)入登錄狀態(tài)后的頁(yè)面。


        WebDriver driver = new FirefoxDriver();
        // 打開(kāi)登錄頁(yè)
        driver.get("https://www.shanbay.com/accounts/login/");

        // 讀取之前保存Cookies信息的文件,通過(guò)緩存操作和driver.manage().addCookies()操作將登錄信息填充到瀏覽器的Cookies中
        try {
            File cookieFile = new File("demo.cookie.txt");
            FileReader fr = new FileReader(cookieFile);
            bufferedReader = new BufferedReader(fr);
            String line;

            while ((line = bufferedReader.readLine()) != null) {
                StringTokenizer stringTokenizer = new StringTokenizer(line, ";");
                while (stringTokenizer.hasMoreTokens()) {
                    String name = stringTokenizer.nextToken();
                    String value = stringTokenizer.nextToken();
                    String domain = stringTokenizer.nextToken();
                    String path = stringTokenizer.nextToken();
                    Date expiry = null;
                    String dt;
                    if (!(dt = stringTokenizer.nextToken()).equals("null")) {
                        expiry = new Date(dt);
                    }

                    boolean isSecure = new Boolean(stringTokenizer.nextToken()).booleanValue();
                    Cookie cookie = new Cookie(name, value, domain, path, expiry, isSecure);
                    driver.manage().addCookie(cookie);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        // 打開(kāi)主頁(yè)面,可以看到已經(jīng)直接進(jìn)入登錄狀態(tài)后的頁(yè)面。
        driver.get("https://www.shanbay.com/");

    }

}
--------------------
Cookies文件見(jiàn)根目錄下。

8.操作瀏覽器前進(jìn)后退
WebDriver提供了直接操作瀏覽器進(jìn)行前進(jìn)、后退、刷新等操作。


        WebDriver driver = new FirefoxDriver();
        // 打開(kāi)百度主頁(yè)并打印日志
        driver.get("http://www.baidu.com/");
        System.out.println("Go to url: " + driver.getCurrentUrl());
        // 瀏覽到51blogs主頁(yè)并打印日志
        driver.navigate().to("http://hongz.blog.51cto.com/");
        System.out.println("Navigate to url : " + driver.getCurrentUrl());
        // 刷新瀏覽器
        driver.navigate().refresh();
        // 回退到前一個(gè)頁(yè)面并打印日志
        driver.navigate().back();
        System.out.println("Back to url : " + driver.getCurrentUrl());

        // 再前進(jìn)到最后一個(gè)頁(yè)面并打印日志
        driver.navigate().forward();
        System.out.println("Forward to url : " + driver.getCurrentUrl());

        driver.quit();
    }

}
打印信息如下:
Go to url: https://www.baidu.com/
Navigate to url : http://hongz.blog.51cto.com/
Back to url : https://www.baidu.com/
Forward to url : http://hongz.blog.51cto.com/

9.操作頁(yè)面元素等待時(shí)間
WebDriver在 操作頁(yè)面元素等待時(shí)間時(shí),提供了兩種等待方式:顯示等待與隱式等待。
(1)顯式等待
明確告訴WebDriver按照特定的條件進(jìn)行等待,條件未達(dá)到就一直等待。 這在等待某個(gè)元素需要非常長(zhǎng)的時(shí)間時(shí)非常有效。
(2)隱式等待
告訴WebDriver一個(gè)最大的超時(shí)時(shí)間, 如果等待的條件在超時(shí)之前就滿(mǎn)足,則立即執(zhí)行后續(xù)操作而無(wú)須等待超時(shí)達(dá)到。


        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.baidu.com/");
        WebElement searchBox = driver.findElement(By.name("wd"));
        // 錄入selenium進(jìn)行搜索
        searchBox.sendKeys("selenium");
        searchBox.submit();

        // Explicit wait
        (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                // 利用顯示等待,等待條件為:直到Browser標(biāo)題以selenium開(kāi)頭出現(xiàn)才進(jìn)行后續(xù)操作
                return d.getTitle().toLowerCase().startsWith("selenium");
            }
        });
        // 打印Browser標(biāo)題信息
        System.out.println("Page title id : " + driver.getTitle());//Page title id : selenium_百度搜索
        // 回退到前一個(gè)搜索頁(yè)面
        driver.navigate().back();
        // implicit wait
        // 利用隱式等待,等待條件為:最長(zhǎng)等待10秒;若在10s 內(nèi)已回退到前一個(gè)頁(yè)面,則直接執(zhí)行后續(xù)操作。
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        // 單擊搜索按鈕再次進(jìn)行搜索
        driver.findElement(By.id("su")).click();

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI