WebDriver操作浏览器

简介:
1.操作页面元素--单选按钮
 
        WebElement femaleRadioButton = driver.findElement(By.xpath(""));
        if (!femaleRadioButton.isSelected()) {//判断按钮如果未被选中,则单击选中。
            femaleRadioButton.click();
        }
        assertTrue(femaleRadioButton.isSelected());//再次判断单选按钮是否被选中。
   
2.操作页面元素--多选按钮
  
        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.操作页面元素--验证标题
   
        //通过变量parentWindowId记录下父窗口的控点。
        String parentWindowId = driver.getWindowHandle();
        //验证父窗口的完整标题是Window open() Method
        assertEquals("Window open() Method", driver.getTitle());
        //定位到Try it Yourself按钮,且单击以打开弹出窗口
        WebElement tryItButton = driver.findElement(By.xpath(".//*[@id='main']/div[2]/a"));
        tryItButton.click();

        //获取所有打开窗口的控点列表,并以变量allWindowId记录。
        Set<String> allWindowId = driver.getWindowHandles();
        //在该控点列表中查找包含Tryit字符串作为标题的窗口控点,找到后则Break。
        for (String windowId : allWindowId) {
            //切换到包含TryIt字符串作为标题的窗口
            if (driver.switchTo().window("windowId").getTitle().contains("TryIt")) {
                driver.switchTo().window("windowId");
                break;
            }
        }
        //验证其完整标题为Tryit Editor v2.9
        assertEquals("Tryit Editor v2.9", driver.getTitle());
        //通过父窗口的控点再次切换回原父窗口
        driver.switchTo().window(parentWindowId);
        //验证其完整标题为Window open() Method,确认此处窗口切换功能的完成。
        assertEquals("Window open() Method", driver.getTitle());
 

   
4.操作页面元素--验证内容

   
        // 记录父窗口的控点
        String parentWindowId = driver.getWindowHandle();
        // 验证父窗口完整标题
        assertEquals("Window open() Method", driver.getTitle());
        // 点击Tryit按钮
        WebElement TryitButton = driver.findElement(By.xpath(".//*[@id='main']/div[2]/a"));
        TryitButton.click();
        // 获取所有打开窗口的控点
        Set<String> allWindowsId = driver.getWindowHandles();
        // 在该控点列表中查找包含open a new browser window字符串作为标题的窗口控点,找到后则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.操作页面元素--操作警告框、提示框、确认框
警告框:用于提示用户相关信息的验证结果、错误或警告等
提示框:用于提示用户在当前对话框中输入数据 ,一般需用户单击取消或确认按钮
确认框:用于提示用户确认或取消某个操作。一般需用户单击取消或确认按钮



//注意这里需要导入testNG的包。jnuit包不起作用。

    //警告框
        WebElement alertButton = driver.findElement(By.xpath("//input[@value = 'alert']"));
        Thread.sleep(3000);
        alertButton.click();
        //切换到警告框并将其窗口控点赋予Selenium的Alert,以此来操作弹出的警告框。
        Alert javascriptAlert = driver.switchTo().alert();
        Thread.sleep(3000);
        System.out.println(javascriptAlert.getText());//打印出警告框上的文本信息:This is an alert!!
        //执行警告框上的确认按钮的功能。
        javascriptAlert.accept();
        Thread.sleep(3000);
        System.out.println("------------------------------------");
    }


        //提示框
        WebElement promptButton = driver.findElement(By.xpath("//input[@value = 'prompt']"));
        //单击提示框
        promptButton.click();
        Alert javascriptPrompt = driver.switchTo().alert();
        //在文本输入框中输入如下文本信息。
        javascriptPrompt.sendKeys("type in prompt...");
        //单击确认按钮
        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());//打印:Confirm Test: Continue?
        //点击“取消”按钮
        javascriptPrompt.dismiss();

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

    
    //确认框
        WebElement confirmButton = driver.findElement(By.xpath("//input[@value = 'confirm']"));
        confirmButton.click();
        //定位到确认框
        Alert javascriptConfirm = driver.switchTo().alert();
        //先执行确认框上的确认按钮
        javascriptConfirm.accept();

        //再次定位到确认框
         javascriptConfirm = driver.switchTo().alert();
         System.out.println(javascriptConfirm.getText());//打印:Your favorite color is: type in prompt...
         //点击确认
         javascriptConfirm.accept();

         //再次点击确认框的按钮
         confirmButton.click();
         //定位到确认框
         javascriptConfirm = driver.switchTo().alert();
         System.out.println(javascriptConfirm.getText());//打印:What is your favorite color?
         //再执行确认框上的“取消”按钮
         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最大化


    
//通过WebDriver的Windows()方法将Browser窗口最大化。
        driver.manage().window().maximize();
    

    
7.操作Browser  Cookies
反复地登录需要多次填写用户名和密码。WebDriver提供了一系列Cookies的操作来获取、填写、删除Cookies的方法,节省了多次在登录页面的查找元素并填写登录信息的时间。
(1)通过 driver.manage().getCookies()获取Cookies信息并通过缓存和文件写操作。保存到demo.cookie.txt文件中。

        WebDriver driver = new FirefoxDriver();
        // 打开登录首页
        driver.get("https://www.shanbay.com/accounts/login/");
        Thread.sleep(2000);
        // 填写相关用户信息:用户名、密码等.进行登录
        driver.findElement(By.name("username")).sendKeys("admin");
        driver.findElement(By.name("password")).sendKeys("123456");

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

        // 新建一个本地文件zhihu.cookie.txt,用户存储后续获取的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("文件创建成功!");

            // 通过driver.manage().getCookies()获取Cookies信息并通过缓存和文件写操作,保存到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并自动填充到新打开的浏览器的Cookies中,然后直接进入登录状态后的页面。


        WebDriver driver = new FirefoxDriver();
        // 打开登录页
        driver.get("https://www.shanbay.com/accounts/login/");

        // 读取之前保存Cookies信息的文件,通过缓存操作和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();
        }
        // 打开主页面,可以看到已经直接进入登录状态后的页面。
        driver.get("https://www.shanbay.com/");

    }

}
--------------------
Cookies文件见根目录下。

8.操作浏览器前进后退 
WebDriver提供了直接操作浏览器进行前进、后退、刷新等操作。


        WebDriver driver = new FirefoxDriver();
        // 打开百度主页并打印日志
        driver.get("http://www.baidu.com/");
        System.out.println("Go to url: " + driver.getCurrentUrl());
        // 浏览到51blogs主页并打印日志
        driver.navigate().to("http://hongz.blog.51cto.com/");
        System.out.println("Navigate to url : " + driver.getCurrentUrl());
        // 刷新浏览器
        driver.navigate().refresh();
        // 回退到前一个页面并打印日志
        driver.navigate().back();
        System.out.println("Back to url : " + driver.getCurrentUrl());

        // 再前进到最后一个页面并打印日志
        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.操作页面元素等待时间
WebDriver在 操作页面元素等待时间时,提供了两种等待方式:显示等待与隐式等待。
(1)显式等待
明确告诉WebDriver按照特定的条件进行等待,条件未达到就一直等待。 这在等待某个元素需要非常长的时间时非常有效。
(2)隐式等待
告诉WebDriver一个最大的超时时间, 如果等待的条件在超时之前就满足,则立即执行后续操作而无须等待超时达到。


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

        // Explicit wait
        (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                // 利用显示等待,等待条件为:直到Browser标题以selenium开头出现才进行后续操作
                return d.getTitle().toLowerCase().startsWith("selenium");
            }
        });
        // 打印Browser标题信息
        System.out.println("Page title id : " + driver.getTitle());//Page title id : selenium_百度搜索
        // 回退到前一个搜索页面
        driver.navigate().back();
        // implicit wait
        // 利用隐式等待,等待条件为:最长等待10秒;若在10s 内已回退到前一个页面,则直接执行后续操作。
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        // 单击搜索按钮再次进行搜索

        driver.findElement(By.id("su")).click();


本文转自 honzhang 51CTO博客,原文链接:http://blog.51cto.com/hongz/1769772


相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
cypress里浏览器里的相关操作有哪些?
cypress里浏览器里的相关操作有哪些?
187 0
|
Web App开发 数据采集 存储
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
本文探讨了如何利用Chrome DevTools Protocol (CDP) 与 Selenium WebDriver 提升浏览器自动化效率,结合代理IP技术高效采集微博数据。通过CDP,开发者可直接操作浏览器底层功能,如网络拦截、性能分析等,增强控制精度。示例代码展示了如何设置代理IP、cookie及user-agent来模拟真实用户行为,提高数据抓取成功率与稳定性。适用于需要频繁抓取互联网数据的应用场景。
1456 3
WebDriver与Chrome DevTools Protocol:如何在浏览器自动化中提升效率
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
【超实用】Angular如何修改当前页面网页浏览器url后面?param1=xxx&param2=xxx参数(多用于通过浏览器地址参数保存用户当前操作状态的需求),实现监听url路由切换、状态变化。
|
数据采集 Web App开发 测试技术
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
在网络爬虫领域,Selenium与WebDriver是实现跨浏览器自动化数据抓取的利器。本文详细介绍了如何利用Selenium和WebDriver结合代理IP技术提升数据抓取的稳定性和效率。通过设置user-agent和cookie来模拟真实用户行为,避免被网站检测和阻止。文章提供了具体的代码示例,展示了如何配置代理IP、设置user-agent和cookie,并实现了跨浏览器的数据抓取。合理的参数配置能有效减少爬虫被封禁的风险,提高数据抓取效率。
1322 6
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
|
数据采集 Web App开发 前端开发
Selenium:自动化Web浏览器操作的强大工具
**Selenium** 是一款用于自动化Web应用测试和模拟用户行为的工具,支持多种浏览器和编程语言。安装包括安装Selenium库和对应浏览器的WebDriver。基本用法包括导入库、启动浏览器、查找与操作页面元素、等待元素加载及关闭浏览器。在实际项目中,Selenium常用于Web测试、爬虫、自动化表单填写等,优点是跨平台、模拟真实用户行为,但性能较低且依赖浏览器。
900 9
python+Pycharm+selenium操作浏览器(Chorme或Edge)
python+Pycharm+selenium操作浏览器(Chorme或Edge)
710 1
|
Web App开发 Java 测试技术
《手把手教你》系列技巧篇(二十六)-java+ selenium自动化测试-浏览器操作(详细教程)
【4月更文挑战第18天】本文介绍了Web自动化中的浏览器操作,包括如何打开不同类型的浏览器(如IE、Chrome、Firefox),以及进行页面操作如打开URL、浏览器最大化、刷新、前进和后退。还展示了如何设置浏览器位置和大小,以及获取当前URL和标题。此外,提供了项目实战例子,演示了如何用Selenium实现打开浏览器、设置位置和大小、搜索并执行页面操作的过程。文章最后提到一些其他可用的方法,并鼓励读者继续学习自动化测试相关知识。
317 3
|
JavaScript 前端开发 安全
JavaScript DOM 操作:解释一下浏览器的同源策略。
**同源策略**是浏览器安全基石,它阻止脚本跨不同协议、域名或端口访问资源,防止恶意行为。例如,HTTP页面无法直接用JS获取HTTPS页面内容。**CORS**允许跨域请求,但需服务器配合设置,通过`document.domain`属性可配置,但仍受限于服务器配置。
159 4
|
测试技术 Python
python使用selenium操作浏览器的教程
python使用selenium操作浏览器的教程
364 1
python使用selenium操作浏览器的教程
|
编解码 测试技术 Python
【如何学习Python自动化测试】—— 浏览器操作
【如何学习Python自动化测试】—— 浏览器操作
284 0