selenium测试(Java)--多表单切换(十二)

采用下面的例子来编写用例

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>frame switch</title>
<link
    href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css"
    rel="stylesheet" />
</head>
<body>
    <div class="row-fluid">
        <div class="span10 well">
            <h3>frame</h3>
            <iframe id="if" name="nf" src="http://www.baidu.com" width="800" height="300"></iframe>
        </div>
    </div>
</body>
<script
    src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js"></script>
</html>

代码:

package com.test.frame;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;

public class frameSwitch {

    public static void main(String[] args) {
        WebDriver driver = new FirefoxDriver();
        driver.get("file:///D:/10-selenium/workspace/SeleniumTest/src/com/test/frame/frame.html");
        driver.manage().window().maximize();

        // 利用id来切换
        waitTime(2000);
        driver.switchTo().frame("if");

        waitTime(2000);
        if (driver.findElement(By.xpath("//*[@id=‘kw‘]")).isDisplayed()) {
            driver.findElement(By.xpath("//*[@id=‘kw‘]")).sendKeys("switch successfully");
            // 切换到父frame
            driver.switchTo().parentFrame();
            try {
                driver.findElement(By.xpath("//*[@id=‘kw‘]"));
            } catch (NoSuchElementException e) {
                String js = "alert(\"switch to parent\")";
                ((JavascriptExecutor) driver).executeScript(js);
                waitTime(3000);
                driver.switchTo().alert().dismiss();
            }
        }

        // 利用name来切换
        waitTime(2000);
        driver.switchTo().frame("nf");

        waitTime(2000);
        if (driver.findElement(By.xpath("//*[@id=‘kw‘]")).isDisplayed()) {
            driver.findElement(By.xpath("//*[@id=‘kw‘]")).sendKeys("switch successfully");
            driver.switchTo().parentFrame();
            try {
                driver.findElement(By.xpath("//*[@id=‘kw‘]"));
            } catch (NoSuchElementException e) {
                String js = "alert(\"switch to parent\")";
                ((JavascriptExecutor) driver).executeScript(js);
                waitTime(3000);
                driver.switchTo().alert().dismiss();
            }
        }

        // 利用定位元素来切换-xpath
        waitTime(2000);
        driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id=‘if‘]")));

        waitTime(2000);
        if (driver.findElement(By.xpath("//*[@id=‘kw‘]")).isDisplayed()) {
            driver.findElement(By.xpath("//*[@id=‘kw‘]")).sendKeys("switch successfully");
            driver.switchTo().parentFrame();
            try {
                driver.findElement(By.xpath("//*[@id=‘kw‘]"));
            } catch (NoSuchElementException e) {
                String js = "alert(\"switch to parent\")";
                ((JavascriptExecutor) driver).executeScript(js);
                waitTime(3000);
                driver.switchTo().alert().dismiss();
            }
        }

        // 利用定位元素来切换-css
        waitTime(2000);
        driver.switchTo().frame(driver.findElement(By.cssSelector("#if")));

        waitTime(2000);
        if (driver.findElement(By.xpath("//*[@id=‘kw‘]")).isDisplayed()) {
            driver.findElement(By.xpath("//*[@id=‘kw‘]")).sendKeys("switch successfully");
            driver.switchTo().parentFrame();
            try {
                driver.findElement(By.xpath("//*[@id=‘kw‘]"));
            } catch (NoSuchElementException e) {
                String js = "alert(\"switch to parent\")";
                ((JavascriptExecutor) driver).executeScript(js);
                waitTime(3000);
                driver.switchTo().alert().dismiss();
                driver.quit();
            }
        }
    }

    static public void waitTime(int time) {

        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
时间: 2024-10-10 04:47:14

selenium测试(Java)--多表单切换(十二)的相关文章

学习Selenium元素定位--多表单切换

在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中. #!/usr/bin/env/ python # coding:utf-8 # Date:2019/1/10 from selenium import webdriver import time #打

Selenium基本使用(四)表单切换

在测试过程中,经常会碰到frame和iframe,嵌套等情况 这种情况下直接通过id,name等等是无法定位到的 好在selenium替我们想到了这个问题switch_to方法解决问题 switch_to先定位iframe,根据iframe的id或name进行定位:那么,iframe没有id或name怎么办: #可以用xpath先定位iframe呀 iframe = driver.find_element_by_xpath('//*[@class="kw"]') #再将iframe定位

selenium 窗口切换(多表单切换)

在web应用中,前台网页的设计一般会用到iframe/frame表单嵌套页面的应用.简单的就是一个页面签嵌套多个HEML/JSP文件.selenium webdriver  只能在同一页面识别定位元素,可以狭隘的理解成只能识别当前所在位置的页面上的元素.对于不同的iframe/frame表单中的元素是无法直接定位的.需要结合switchTo().frame()方法切换到指定的frame/iframe中.switchTo().frame()默认的是取表单的ID和name属性.如果没有id和name

Selenium 3----定位一组元素+多表单切换+多窗口切换

定位一组元素 和定位单个元素类似,WebDriver提供了8种用于定位一组元素的方法.定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数. find_elements_by_id() find_elements_by_name() find_elements_by_class_name() find_elements_by_tag_name() find_elements_by_link_text() find_elements_by_partia

第 4 章 WebDriver API - 4.9 多表单切换 - 4.14 下载文件

4.9 多表单切换 在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用,WebDriver 只能在一个页面上对元素进行识别和定位,无法直接定位 frame/iframe 表单内嵌页面上的元素,这时就需要通过 switch_to.frame()方法将当前定位的主体切换为 frame/iframe 表单的内嵌页面.这里以 126 邮箱登录为例,登录框结构如下. 通过 switch_to.frame()方法切换表单. """ * switch_to.fram

7 frame表单切换、多窗口切换

frame表单切换.多窗口切换 1 frame表单 frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素(HTML语言中,frame/iframe标签为表单框架) 1.1 frame表单切换 说明:在WebDriver类库中封装了HTML页面中使用frame表单框架技术定位的方法 方法: 1). driver.switch_to.frame("myframe1") 切换表单方法 (myframe1:为frame表单的name或id) 2). driver

vue 表单校验(二)

vue 表单校验(二) vue element-ui表单校验 由于现在使用element-ui进行form表单校验,因而使用其自带的校验规则进行校验,发现有些并不是那么好校验,或者说是校验起来很繁琐,因而一直在研究中 表单校验分类 前后端校验 前端校验 后端校验 这种目前一般是结合起来使用,很少单纯前端校验,或者单纯后端校验的 前端检验 数据录入时校验 数据回显时校验 动态创建时校验 数据是否必填时校验 接下来所谈论的校验都是基于前端进行校验,若是后天校验,只是统一校验规则而已,这样前后便可以统

Bootstrap快速学习笔记(2)表单系列之二

欢迎收看大奥编写的Bootstrap快速学习笔记(2)表单系列之二 本学习笔记根据[慕课网]教程修改而来,用它学习Bootstrap,将会带来全新的体验哦: 表单控件大小 表单控件状态 按钮 图像 详细介绍 表单控件大小表单控件大小可以通过给表单控件添加class类来实现,如果想要比较大,则添加input-lg类,如果想要比较小, 则添加input-sm类,但这仅是对高度进行了处理,如果要对宽度进行处理,需要在每个input控件外围添加div容器并带有col-xs-4类,并 且要在这组控件的外围

sharepoint 2013基于AD的Form表单登录(二)——form登录页面自定义

配置好了sharepoint 2013基于AD的Form登录,只是成功了第一步,如何自定义登录页呢?特别是不要出现sharepoint2013自带登录页面,每次登录前还需要选择是否是form或者windows验证. 打开vs2012新建sharepoint 2013 project,在layouts目录下添加application page,页面命名为CustomLogin.aspx. 前台页面:为避免母版页中其他控件影响,注意继承的是simple.master         后台页面:继承F

java痛苦学习之路[十二]JSON+ajax+Servlet JSON数据转换和传递

1.首先客户端需要引入 jquery-1.11.1.js 2.其次javaweb工程里面需要引入jar包  [commons-beanutils-1.8.0.jar.commons-collections-3.1.jar.commons-lang-2.4.jar.commons-logging-1.1.3.jar.ezmorph-1.0.6.jar.json-lib-2.3-jdk15.jar] 3.客户端js端代码 4.servlet 服务器,映射的路径CardColl 以上就是整个过程,如果