详解介绍Selenium常用API的使用--Java语言(完整版)

一共分为二十个部分:环境安装之Java、环境安装之IntelliJ IDEA、环境安装之selenium、selenium3浏览器驱动、selenium元素定位、控制浏览器操作、WebDriver常用方法、模拟鼠标操作、模拟键盘操作、获取断言信息、设置元素等待、定位一组元素、多表单切换、多窗口切换、下拉框选择、警告框处理、文件上传、浏览器cookie操作、调用JavaScript代码、获取窗口截屏;

虽然,学习Maven需要增加你的学习成本,但如果你需要长期使用Java编程语言,或者想用Java来做更多事情的话,越早使用Maven越好!因为它会让的第三方包管理变得非常简单。

3.Hello Selenium

少不了要写一个简单的Selenium Sample来验证Selenium安装是否成功,打开IntelliJ IDEA 创建一个新类Itest.java

package javaBase;
 
 
 
import org.openqa.selenium.WebDriver;
 
import org.openqa.selenium.chrome.ChromeDriver;
 
 
 
public class Itest {
 
public static void main(String[] args) {
 
 
 
WebDriver driver = new ChromeDriver();
 
driver.get("http://www.itest.info");
 
 
 
String title = driver.getTitle();
 
System.out.printf(title);
 
 
 
driver.close();
 
}
 
}

  

如果执行报错,请看下一节,Selenium3浏览器驱动。

(二)selenium3 浏览器驱动

1.下载浏览器驱动

当selenium升级到3.0之后,对不同的浏览器驱动进行了规范。如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。
各浏览器下载地址:
Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedrivertaobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs

2.设置浏览器驱动

设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: C:\driver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。
我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将“C:\driver”目录添加到Path的值中。

3.验证浏览器驱动

验证不同的浏览器驱动是否正常使用。

import org.openqa.selenium.chrome.ChromeDriver;
 
import org.openqa.selenium.firefox.FirefoxDriver;
 
import org.openqa.selenium.edge.EdgeDriver;
 
import org.openqa.selenium.ie.InternetExplorerDriver;
 
import org.openqa.selenium.opera.OperaDriver;
 
import org.openqa.selenium.phantomjs.PhantomJSDriver;
 
 
 
……
 
 
 
WebDriver driver = new ChromeDriver(); //Chrome浏览器
 
 
 
WebDriver driver = new FirefoxDriver(); //Firefox浏览器
 
 
 
WebDriver driver = new EdgeDriver(); //Edge浏览器
 
 
 
WebDriver driver = new InternetExplorerDriver(); // Internet Explorer浏览器
 
 
 
WebDriver driver = new OperaDriver(); //Opera浏览器
 
 
 
WebDriver driver = new PhantomJSDriver(); //PhantomJS
 
 
 
……

  

(五)selenium元素定位

1.selenium定位方法

Selenium提供了8种定位方式。

  • id
    name
    class name
    tag name
    link text
    partial link text
    xpath
    css selector

     

这8种定位方式在Java selenium中所对应的方法为:

  • findElement(By.id())
    findElement(By.name())
    findElement(By.className())
    findElement(By.tagName())
    findElement(By.linkText())
    findElement(By.partialLinkText())
    findElement(By.xpath())
    findElement(By.cssSelector())
    

      

2.定位方法的用法

假如我们有一个Web页面,通过前端工具(如,Firebug)查看到一个元素的属性是这样的。

我们的目的是要定位input标签的输入框。

关于xpaht和css的定位比较复杂,请参考: xpath语法、css选择器

(六)控制浏览器操作

1.控制浏览器窗口大小

有时候我们希望能以某种浏览器尺寸找开,访问的页面在这种尺寸下运行。例如可以将浏览器设置成移动端大小(480* 800),然后访问移动站点,对其样式进行评估;WebDriver 提供了 manage().window().setSize()方法来设置浏览器的大小。

  • maximize() 设置浏览器最大化
    setSize() 设置浏览器宽高
     
    import org.openqa.selenium.Dimension;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
     
     
     
     
    public class Browser {
     
    public static void main(String[] args) throws InterruptedException {
     
     
     
    WebDriver driver= new ChromeDriver();
     
    driver.get("https://www.baidu.cn");
     
     
     
    driver.manage().window().maximize();
     
    Thread.sleep(2000);
     
     
     
    driver.get("https://m.baidu.cn");
     
    driver.manage().window().setSize(new Dimension(480, 800));
     
    Thread.sleep(2000);
     
     
     
    driver.quit();
     
    }
     
    }

     

在 PC 端执行自动化测试脚本大多的情况下是希望浏览器在全屏幕模式下执行, 那么可以使用 maximize()方法使打开的浏览器全屏显示, 其用法与 setSize()相同, 但它不需要任何参数。

2.控制浏览器后退、前进

在使用浏览器浏览网页时,浏览器提供了后退和前进按钮,可以方便地在浏览过的网页之间切换,WebDriver也提供了对应的back()和forward()方法来模拟后退和前进按钮。下面通过例子来演示这两个方法的使用。

  • back() 模拟浏览器后退按钮
    forward() 模拟浏览器前进按钮
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
    import org.openqa.selenium.By;
     
     
     
     
     
    public class BrowserGo {
     
     
     
    public static void main(String[] args) throws InterruptedException {
     
     
     
    WebDriver driver = new ChromeDriver();
     
     
     
    //get 到百度首页
     
    driver.get("https://www.baidu.com/");
     
    System.out.printf("now accesss %s \n", driver.getCurrentUrl());
     
    Thread.sleep(2000);
     
     
     
    //点击“新闻” 链接
     
    driver.findElement(By.linkText("新闻")).click();
     
    System.out.printf("now accesss %s \n", driver.getCurrentUrl());
     
    Thread.sleep(2000);
     
     
     
    //执行浏览器后退
     
    driver.navigate().back();
     
    System.out.printf("back to %s \n", driver.getCurrentUrl());
     
    Thread.sleep(2000);
     
     
     
    //执行浏览器前面
     
    driver.navigate().forward();
     
    System.out.printf("forward to %s \n", driver.getCurrentUrl());
     
    Thread.sleep(2000);
     
     
     
    driver.quit();
     
    }
     
    }

     

为了看清脚本的执行过程,下面每操作一步都通过printf()方法来打印当前的URL地址。

3.刷新页面

有时候需要手动刷新(F5) 页面。

  • refresh() 刷新页面(F5)
     
    ……
     
    //刷新页面
     
    driver.navigate().refresh();
     
    ……

     

(七)WebDriver常用方法

前面我们已经学习了定位元素, 定位只是第一步, 定位之后需要对这个元素进行操作, 或单击(按钮) 或 输入(输入框) , 下面就来认识这些最常用的方法。 

1.WebDriver 常用方法

下面先来认识 WebDriver 中最常用的几个方法:

  • clear() 清除文本。
    sendKeys(*value) 模拟按键输入。
    click() 单击元素
     
    import org.openqa.selenium.By;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.WebElement;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
     
     
    public class BaiduDemo {
     
     
     
    public static void main(String[] args) {
     
     
     
    WebDriver driver = new ChromeDriver();
     
    driver.get("https://www.baidu.com/");
     
     
     
    WebElement search_text = driver.findElement(By.id("kw"));
     
    WebElement search_button = driver.findElement(By.id("su"));
     
     
     
    search_text.sendKeys("Java");
     
    search_text.clear();
     
    search_text.sendKeys("Selenium");
     
    search_button.click();
     
     
     
    driver.quit();
     
    }
     
    }
    clear()方法用于清除文本输入框中的内容。
    sendKeys()方法模拟键盘向输入框里输入内容。 但是它的作用不仅于此, 我们还可以用它发送键盘按键, 甚至用它来指定上传的文件。
    click()方法可以用来单击一个元素,前提是它是可以被单击的对象,它与 sendKeys()方法是Web页面操作中最常用到的两个方法。 其实click()方法不仅仅用于单击一个按钮,它还可以单击任何可以单击的文字/图片链接、复选框、单选框、下拉框等。
    
    2.其它常用方法
    
    submit()
    submit()方法用于提交表单。 例如,在搜索框输入关键字之后的“回车” 操作, 就可以通过 submit()方法模拟.
    
     
    ……
     
    WebElement search_text = driver.findElement(By.id("kw"));
     
    search_text.sendKeys("Selenium");
     
    search_text.submit();
     
    ……
    getSize() 返回元素的尺寸。
    getText() 获取元素的文本。
    getAttribute(name) 获得属性值。
    isDisplayed() 设置该元素是否用户可见。
     
    import org.openqa.selenium.By;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.WebElement;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
     
     
    public class BaiduDemo {
     
     
     
    public static void main(String[] args) {
     
     
     
    WebDriver driver = new ChromeDriver();
     
    driver.get("https://www.baidu.com/");
     
     
     
    //获得百度输入框的尺寸
     
    WebElement size = driver.findElement(By.id("kw"));
     
    System.out.println(size.getSize());
     
     
     
    //返回百度页面底部备案信息
     
    WebElement text = driver.findElement(By.id("cp"));
     
    System.out.println(text.getText());
     
     
     
    //返回元素的属性值, 可以是 id、 name、 type 或元素拥有的其它任意属性
     
    WebElement ty = driver.findElement(By.id("kw"));
     
    System.out.println(ty.getAttribute("type"));
     
     
     
    //返回元素的结果是否可见, 返回结果为 True 或 False
     
    WebElement display = driver.findElement(By.id("kw"));
     
    System.out.println(display.isDisplayed());
     
     
     
    driver.quit();
     
    }
     
    }
    打印结果:
    
     
    (500, 22)
     
    ©2017 Baidu 使用百度前必读 意见反馈 京 ICP 证 030173 号 京公网安备 11000002000001 号
     
    text
     
    true

 

 

(八)模拟鼠标操作

通过前面例子了解到,可以使用click()来模拟鼠标的单击操作,现在的Web产品中提供了更丰富的鼠标交互方式, 例如鼠标右击、双击、悬停、甚至是鼠标拖动等功能。在WebDriver中,将这些关于鼠标操作的方法封装在ActionChains类提供。
Actions 类提供了鼠标操作的常用方法:

  • contextClick() 右击
    clickAndHold() 鼠标点击并控制
    doubleClick() 双击
    dragAndDrop() 拖动
    release() 释放鼠标
    perform() 执行所有Actions中存储的行为
    百度首页设置悬停下拉菜单。
    
     
    import org.openqa.selenium.By;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.WebElement;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
    import org.openqa.selenium.interactions.Actions;
     
     
     
    public class MouseDemo {
     
     
     
    public static void main(String[] args) {
     
     
     
    WebDriver driver = new ChromeDriver();
     
    driver.get("https://www.baidu.com/");
     
     
     
    WebElement search_setting = driver.findElement(By.linkText("设置"));
     
    Actions action = new Actions(driver);
     
    action.clickAndHold(search_setting).perform();
     
     
     
    driver.quit();
     
    }
     
    }
    import org.openqa.selenium.interactions.Actions;

     

导入提供鼠标操作的 ActionChains 类

  • Actions(driver) 调用Actions()类,将浏览器驱动driver作为参数传入。
    clickAndHold() 方法用于模拟鼠标悬停操作, 在调用时需要指定元素定位。
    perform() 执行所有ActionChains中存储的行为, 可以理解成是对整个操作的提交动作。

     

1.关于鼠标操作的其它方法

  1.  
    import org.openqa.selenium.interactions.Actions;
     
    ……
     
     
     
    Actions action = new Actions(driver);
     
     
     
    // 鼠标右键点击指定的元素
     
    action.contextClick(driver.findElement(By.id("element"))).perform();
     
     
     
    // 鼠标右键点击指定的元素
     
    action.doubleClick(driver.findElement(By.id("element"))).perform();
     
     
     
    // 鼠标拖拽动作, 将 source 元素拖放到 target 元素的位置。
     
    WebElement source = driver.findElement(By.name("element"));
     
    WebElement target = driver.findElement(By.name("element"));
     
    action.dragAndDrop(source,target).perform();
     
     
     
    // 释放鼠标
     
    action.release().perform();

     

  2.  

(九)模拟键盘操作

Keys()类提供了键盘上几乎所有按键的方法。 前面了解到, sendKeys()方法可以用来模拟键盘输入, 除此之 外, 我们还可以用它来输入键盘上的按键, 甚至是组合键, 如 Ctrl+A、 Ctrl+C 等。

  1.  
    import org.openqa.selenium.WebElement;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
    import org.openqa.selenium.By;
     
    import org.openqa.selenium.Keys;
     
     
     
    public class Keyboard {
     
     
     
    public static void main(String[] args)throws InterruptedException {
     
     
     
    WebDriver driver = new ChromeDriver();
     
    driver.get("https://www.baidu.com");
     
     
     
    WebElement input = driver.findElement(By.id("kw"));
     
     
     
    //输入框输入内容
     
    input.sendKeys("seleniumm");
     
    Thread.sleep(2000);
     
     
     
    //删除多输入的一个 m
     
    input.sendKeys(Keys.BACK_SPACE);
     
    Thread.sleep(2000);
     
     
     
    //输入空格键+“教程”
     
    input.sendKeys(Keys.SPACE);
     
    input.sendKeys("教程");
     
    Thread.sleep(2000);
     
     
     
    //ctrl+a 全选输入框内容
     
    input.sendKeys(Keys.CONTROL,"a");
     
    Thread.sleep(2000);
     
     
     
    //ctrl+x 剪切输入框内容
     
    input.sendKeys(Keys.CONTROL,"x");
     
    Thread.sleep(2000);
     
     
     
    //ctrl+v 粘贴内容到输入框
     
    input.sendKeys(Keys.CONTROL,"v");
     
    Thread.sleep(2000);
     
     
     
    //通过回车键盘来代替点击操作
     
    input.sendKeys(Keys.ENTER);
     
    Thread.sleep(2000);
     
     
    driver.quit();
     
    }
     
    }
    需要说明的是,上面的脚本没有什么实际意义,但向我们展示了模拟键盘各种按键与组合键的用法。
    
    import org.openqa.selenium.Keys;

     

在使用键盘按键方法前需要先导入 keys 类。

以下为常用的键盘操作:

sendKeys(Keys.BACK_SPACE) 回格键(BackSpace)
sendKeys(Keys.SPACE) 空格键(Space)
sendKeys(Keys.TAB) 制表键(Tab)
sendKeys(Keys.ESCAPE) 回退键(Esc)
sendKeys(Keys.ENTER) 回车键(Enter)
sendKeys(Keys.CONTROL,‘a’) 全选(Ctrl+A)
sendKeys(Keys.CONTROL,‘c’) 复制(Ctrl+C)
sendKeys(Keys.CONTROL,‘x’) 剪切(Ctrl+X)
sendKeys(Keys.CONTROL,‘v’) 粘贴(Ctrl+V)
sendKeys(Keys.F1) 键盘 F1
……
sendKeys(Keys.F12) 键盘 F12

 

(十)获取断言信息

不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较。这个比较的称之为断言。
我们通常可以通过获取title 、URL和text等信息进行断言。text方法在前面已经讲过,它用于获取标签对之间的文本信息。

  • getTitle(): 用于获得当前页面的title。
    getCurrentUrl() : 用户获得当前页面的URL。
    getText() 获取页面文本信息。
    下面同样以百度为例,介绍如何获取这些信息。
    
     
    import org.openqa.selenium.By;
     
    import org.openqa.selenium.Keys;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.WebElement;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
     
     
     
     
    public class AssertDemo {
     
     
     
    public static void main(String[] args) throws InterruptedException {
     
     
     
    WebDriver driver = new ChromeDriver();
     
    driver.get("https://www.baidu.com");
     
     
     
    System.out.println("Search before================");
     
     
     
    //获取当前的 title 和 url
     
    System.out.printf("title of current page is %s\n", driver.getTitle());
     
    System.out.printf("url of current page is %s\n", driver.getCurrentUrl());
     
     
     
    //百度搜索
     
    WebElement search = driver.findElement(By.id("kw"));
     
    search.sendKeys("Selenium");
     
    search.sendKeys(Keys.ENTER);
     
    Thread.sleep(2000);
     
     
     
    System.out.println("Search after================");
     
     
     
    //获取当前的 title 和 url
     
    System.out.printf("title of current page is %s\n", driver.getTitle());
     
    System.out.printf("url of current page is %s\n", driver.getCurrentUrl());
     
     
     
    //获取第一条搜索结果的标题
     
    WebElement result = driver.findElement(By.xpath("//div[@id='content_left']/div/h3/a"));
     
    System.out.println(result.getText());
     
     
     
    driver.quit();
     
    }
     
    }
    打印结果:
    
     
    Search before================
     
    title of current page is 百度一下, 你就知道
     
    url of current page is https://www.baidu.com/
     
     
     
    Search after================
     
    title of current page is Selenium_百度搜索
     
    url of current page is
     
    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=Selenium&rsv_pq=9be
     
    4680700a485c1&rsv_t=e925U%2F%2B9SBTqmRI%2BuARg0%2BTCzrrZWn4jOBJkb1OS2vUjMrZsq5VblQ7toD8
     
    &rqlang=cn&rsv_enter=1&rsv_sug3=8&rsv_sug2=0&inputT=155&rsv_sug4=155
     
    Selenium - Web Browser Automation

     

(十一)设置元素等待

WebDriver提供了两种类型的等待:显式等待和隐式等待。

1.显示等待

WebDriver提供了显式等待方法,专门针对某个元素进行等待判断。

  1.  
    import org.openqa.selenium.By;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.WebElement;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
    import org.openqa.selenium.support.ui.WebDriverWait;
     
    import org.openqa.selenium.support.ui.ExpectedCondition;
     
     
     
     
     
    public class TimeOut01 {
     
     
     
    public static void main(String[]args) throws InterruptedException {
     
     
     
    WebDriver driver = new ChromeDriver();
     
    driver.get("https://www.baidu.com");
     
     
     
    //显式等待, 针对某个元素等待
     
    WebDriverWait wait = new WebDriverWait(driver,10,1);
     
     
     
    wait.until(new ExpectedCondition(){
     
    @Override
     
    public WebElement apply(WebDriver text) {
     
    return text.findElement(By.id("kw"));
     
    }
     
    }).sendKeys("selenium");
     
     
     
    driver.findElement(By.id("su")).click();
     
    Thread.sleep(2000);
     
     
     
    driver.quit();
     
    }
     
    }

     

  2.  

WebDriverWait类是由WebDirver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:
WebDriverWait(driver, 10, 1)
driver: 浏览器驱动。 10: 最长超时时间, 默认以秒为单位。 1: 检测的的间隔(步长) 时间, 默认为 0.5s。

2.隐式等待

WebDriver 提供了几种方法来等待元素。

  • implicitlyWait。识别对象时的超时时间。过了这个时间如果对象还没找到的话就会抛出NoSuchElement异常。
    setScriptTimeout。异步脚本的超时时间。WebDriver可以异步执行脚本,这个是设置异步执行脚本脚本返回结果的超时时间。
    pageLoadTimeout。页面加载时的超时时间。因为WebDriver会等页面加载完毕再进行后面的操作,所以如果页面超过设置时间依然没有加载完成,那么WebDriver就会抛出异常。
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.By;
     
    import java.util.concurrent.TimeUnit;
     
     
     
    public class TimeOut02 {
     
     
     
    public static void main(String[] args){
     
     
     
    WebDriver driver = new ChromeDriver();
     
     
     
    //页面加载超时时间设置为 5s
     
    driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
     
    driver.get("https://www.baidu.com/");
     
     
     
    //定位对象时给 10s 的时间, 如果 10s 内还定位不到则抛出异常
     
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
     
    driver.findElement(By.id("kw")).sendKeys("selenium");
     
     
     
    //异步脚本的超时时间设置成 3s
     
    driver.manage().timeouts().setScriptTimeout(3, TimeUnit.SECONDS);
     
     
     
    driver.quit();
     
    }
     
    }

     

(十二)定位一组元素

在第(五)节我们已经学习了8种定位方法, 那8种定位方法是针对单个元素定位的, WebDriver还提供了另外8种用于定位一组元素的方法。

  1.  
    import org.openqa.selenium.By;
     
    ......
     
    findElements(By.id())
     
    findElements(By.name())
     
    findElements(By.className())
     
    findElements(By.tagName())
     
    findElements(By.linkText())
     
    findElements(By.partialLinkText())
     
    findElements(By.xpath())
     
    findElements(By.cssSelector())
    定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词 findElement 后面多了一个 s 表示复数。
    
     
    import org.openqa.selenium.By;
     
    import org.openqa.selenium.WebDriver;
     
    import org.openqa.selenium.WebElement;
     
    import org.openqa.selenium.chrome.ChromeDriver;
     
    import java.util.List;
     
     
     
     
     
    public class ElementsDemo {
     
     
     
    public static void main(String[] args) throws InterruptedException {
     
     
     
    WebDriver driver = new ChromeDriver();
     
    driver.get("https://www.baidu.com/");
     
     
     
    WebElement search_text = driver.findElement(By.id("kw"));
     
    search_text.sendKeys("selenium");
     
    search_text.submit();
     
    Thread.sleep(2000);
     
     
     
    //匹配第一页搜索结果的标题, 循环打印
     
    List search_result = driver.findElements(By.xpath("//div/div/h3"));
     
     
     
    //打印元素的个数
     
    System.out.println(search_result.size());
     
     
     
    // 循环打印搜索结果的标题
     
    for(WebElement result : search_result){
     
    System.out.println(result.getText());
     
    }
     
     
     
    System.out.println("-------我是分割线---------");
     
     
     
    //打印第n结果的标题
     
    WebElement text = search_result.get(search_result.size() - 10);
     
    System.out.println(text.getText());
     
     
     
    driver.quit();
     
    }
     
    }
    打印结果:
    
     
    15
     
    selenium java 教程-90 天从入门到高薪「学习必看」
     
    python selenium 视频-90 天从入门到高薪「学习必看」
     
    Selenium - Web Browser Automation
     
    功能自动化测试工具——Selenium 篇
     
    Selenium Documentation — Selenium Documentation
     
    selenium + python 自动化测试环境搭建 - 虫师 - 博客园
     
    selenium_百度翻译
     
    Selenium_百度百科
     
    怎样开始用 selenium 进行自动化测试(个人总结)_百度经验
     
    Selenium 官网教程_selenium 自动化测试实践_Selenium_领测软件测试网
     
    Selenium - 开源中国社区
     
    selenium 是什么?_百度知道
     
    selenium-0 基础入学, 先就业后付款!
     
    selenium, 亚马逊官网, 正品低价, 货到付款!
     
    selenium java 教程-90 天从入门到高薪「学习必看」
     
    -------我是分割线---------
     
    selenium + python 自动化测试环境搭建 - 虫师 - 博客园

     

(十三)多表单切换

在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用, WebDriver 只能在一个页面上对元素识别与 定位, 对于 frame/iframe 表单内嵌页面上的元素无法直接定位。 这时就需要通过 switchTo().frame()方法将当前定 位的主体切换为 frame/iframe 表单的内嵌页面中。

  1.  
    
     
    
     
    ...