• Selenium2学习-008-WebUI自动化实战实例-006-易迅登录之 frame 处理


    此文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,在因 frame 标签导致页面定位失败,提示 NoSuchElementException 时的,页面元素定位前的 frame 处理,即 WebDriver.swtichTo.frame() 的概要用法。

    希望能对初学 Selenium2 WebUI 自动化测试编程的亲们有所帮助。若有不足之处,敬请大神指正,不胜感激!

    在我之前的页面元素定位示例文章 (Selenium2 Web 元素定位及 XPath 编写演示示例)中曾提到过易迅登录时有一个坑,不知道大家还是否记得?若是大家仔细看过易迅登录的页面源码,则不难发现登录信息录入框等是嵌入在 frame 中的。那么我们在实际的脚本编写中应该怎么定位此类 frame 中的页面元素呢?页面的 HTML 显示如下所示:

    其实,挺简单:先切换至对应的 frame 中,然后再定位元素,执行完相应的操作后,建议返回其默认的 defaultContent。

    闲话少述,直接上码,敬请亲阅览 ^_^,源代码如下所示:

      1 /**
      2  * Aaron.ffp Inc.
      3  * Copyright (c) 2004-2015 All Rights Reserved.
      4  */
      5 package main.java.aaron.sele.demo;
      6 
      7 import java.util.Arrays;
      8 import java.util.concurrent.TimeUnit;
      9 
     10 import org.openqa.selenium.By;
     11 import org.openqa.selenium.WebDriver;
     12 import org.openqa.selenium.chrome.ChromeDriver;
     13 import org.openqa.selenium.chrome.ChromeOptions;
     14 import org.openqa.selenium.remote.DesiredCapabilities;
     15 
     16 /**
     17  * UI自动化功能测试脚本:以易迅登录介绍 Frame 处理
     18  * 
     19  * 实现 Chrome 浏览器启动的步骤如下:
     20  *   1.设定 Chrome 的安装路径
     21  *   2.设定 Chrome 的 webdriver
     22  *   3.参数化启动 Chrome
     23  *   4.打开易迅登陆链接
     24  *   5.通过 webdriver.switchTo.frame() 进行 Frame 切换 
     25  *   6.输入账户、密码
     26  *   7.关闭并退出
     27  *   
     28  * @author Aaron.ffp
     29  * @version $Id: Selenium_FrameDemo.java, V0.1 2015-1-21 13:23:54 Aaron.ffp Exp $
     30  */
     31 public class Selenium_FrameDemo {
     32     private static WebDriver cd;
     33     private static String baseUrl;   // 百度首页网址
     34     private static String username;
     35     private static String userpass;
     36 
     37     /**
     38      * Chrome WebDriver 设置, 网址及搜索内容初始化, 打开 Chrome 浏览器
     39      */
     40     public static void chromeStart(){
     41         /* 设定 chrome 启动文件的位置, 若未设定则取默认安装目录的 chrome */
     42         System.setProperty("webdriver.chrome.bin", "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe");
     43         /* 设定 chrome webdirver 的位置 */
     44         System.setProperty("webdriver.chrome.driver", "C:/Windows/System32/chromedriver.exe");
     45         
     46         /* 百度首页网址赋值 */
     47         baseUrl = "https://base.yixun.com/login.html";
     48         
     49         /* 启动 chrome 浏览器 */
     50         cd = new ChromeDriver(chromeOptions());
     51         
     52         /**
     53          * 登录账号及密码赋值,实际应用时需要正确赋值
     54          */
     55         username = "231333574";
     56         userpass = "input userpass";
     57     }
     58 
     59     /**
     60      * 主方法入口
     61      * @param args
     62      * @throws InterruptedException 
     63      */
     64     public static void main(String[] args) throws InterruptedException {
     65         /* 启动 chrome */
     66         chromeStart();
     67         
     68         /* 执行易迅网登录操作 */
     69         IcsonLogin(baseUrl, username, userpass);
     70         
     71         /* 等待加载 */
     72         cd.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
     73         
     74         TimeUnit.SECONDS.sleep(5);
     75         
     76         /* 关闭 chrome */
     77         chromeQuit();
     78     }
     79     
     80     /**
     81      * 易迅登录, 并输入账户和密码
     82      * 
     83      * @param baseUrl  : 登录 URL
     84      * @param username : 账户
     85      * @param userpass : 密码
     86      */
     87     public static void IcsonLogin(String baseUrl, String username, String userpass){
     88         cd.get(baseUrl);
     89         
     90         /* frame 切换 */       
     91         cd.switchTo().frame("id_iframe_login").switchTo().frame("qq_login_iframe");
     92         
     93         /* 输入账号 */
     94         cd.findElement(By.id("u")).sendKeys(username);
     95         
     96         /* 输入密码 */
     97         cd.findElement(By.id("p")).sendKeys(userpass);
     98     }
     99     
    100     /**
    101      * 设置 Chrome 浏览器的启动参数, 设置启动后浏览器窗口最大化, 忽略认证错误警示
    102      * 
    103      * @return ChromeOptions Chrome 参数设置
    104      */
    105     public static ChromeOptions chromeOptions(){
    106          ChromeOptions options = new ChromeOptions();
    107          DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    108          capabilities.setCapability("chrome.switches", Arrays.asList("--start-maximized"));
    109          /* 浏览器最大化 */
    110          options.addArguments("--test-type", "--start-maximized");
    111          /* 忽略 Chrome 浏览器的认证错误 */
    112          options.addArguments("--test-type", "--ignore-certificate-errors");
    113          
    114          return options;
    115      }
    116     
    117     /**
    118      * 关闭并退出 Chrome
    119      */
    120     public static void chromeQuit(){
    121         /* 关闭 chrome */
    122         cd.close();
    123         /* 退出 chrome */
    124         cd.quit();
    125     }
    126 }
    Selenium-Java 脚本 Frame 处理:易迅登录实战实例源代码

     

    至此,WebUI 自动化功能测试脚本第 006 篇-易迅登录之 frame 处理 顺利完结,希望此文能够给初学 Selenium 的您一份参考。

     

    最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^

     

     

  • 相关阅读:
    《将博客搬至CSDN》
    Ubuntu 安装 maven
    Ubuntu jdk1.8安装
    spring整合jms
    jms入门
    MySQL 3306端口开启
    黑窗口下mysql导出导入数据库
    PHP 爬虫体验(三)
    解决nvm安装的node使用sudo npm报错的问题
    PHP 爬虫体验(二)
  • 原文地址:https://www.cnblogs.com/fengpingfan/p/4237832.html
Copyright © 2020-2023  润新知