selenium java教程(上)

参考原文来源于重定向科技:http://class.itest.info/selenium_java


一、环境安装之java

点击 JDK8下载,根据自己的平台,选择相应的版本进行下载。

小知识:
Java环境分JDK和JRE ,JDK就是Java Development Kit。简单的说JDK是面向开发人员使用的SDK(Software Development Kit软件开发工具包),它提供了Java的开发环境和运行环境。JRE是Java Runtime Enviroment是指Java的运行环境,是面向 Java 程序的使用者。

我们以 Windows安装JDK为例,双击下载的JDK,设置安装路径。这里我选择安装在"C:\dev\Java\jdk1.8.0_301" 目录下。
注意:jre选择路径时不能在jdk目录下,建议如下:

下面设置环境变量:
“我的电脑” 右键菜单—>属性—>高级—>环境变量—>系统变量—>新建…

变量名: JAVA_HOME
变量值: C:\dev\Java\jdk1.8.0_301

找到 path 变量名—>“编辑” 添加:

变量名: PATH
变量值: %JAVA_HOME%\bin

在Windows命令提示符(cmd)下验证 Java 是否成功:

  • java 命令可以运行 class 文件字节码。
  • javac 命令可以将 Java 源文件编译为 class 字节码文件。

二、环境安装之IntelliJ IDEA

你可能会问,为什么不用Eclipse呢?随着发展IntelliJ IDEA有超越Eclipse的势头,JetBrains公司的IDE基本上已经一统了各家主流编程语言的江湖。考虑到 Java IDE的流行趋势,本书中决定选用IntelliJ IDEA。

当然, 选择什么样的IDE充满着个人喜好。你依然可以参考其它资料安装Java IDE。这不会影响你阅读该系列文章。 点击 IntelliJ IDEA下载,根据自己的平台,选择相应的版本进行下载。

IntelliJ IDEA安装过程省略…

打开idea,点击"Create New Project"选项创建新的Java项目。选择项目类型为Java,然后,继续"Next"。

  • Project name: 项目名称。
  • Project location: 项目在硬盘上的路径。

点击"Finish"结束项目创建完成。

编写Hello World!

首先,打开IntelliJ IDEA,点击左侧项目列表,在src下面创建包和类文件。

1)右键左侧项目列表 src—>New —> Package 弹出窗口, 输入包的名:com.java.base。

2)右键左侧创建的包名:java —>New —> Java Class 弹出窗口,输入类的名:HelloWorld。

在 HelloWorld.java 文件中编写第一个 Java 程序。

package com.java.base;

public class HelloWorld {
  public static void main(String[] args){
    System.out.println("hello world");
  }
}

输入完成, 点击工具栏 Run 按钮(或在代码文件中右键选择"Run ‘HelloWorld.main()’")运行, 将会在控制台看到“hello word” 的输出。

附:idea常用快捷键

ctrl + alt + L:格式化

ctrl + alt + B:查看源码

ctrl + alt + /:注释

三、selenium3 浏览器驱动

当selenium升级到3.0之后,对不同的浏览器驱动进行了规范。如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。

各浏览器下载地址

Firefox浏览器驱动:geckodriver
Chrome浏览器驱动:chromedriver taobao备用地址
IE浏览器驱动:IEDriverServer
Edge浏览器驱动:MicrosoftWebDriver
Opera浏览器驱动:operadriver
PhantomJS浏览器驱动:phantomjs

注:部分浏览器驱动地址需要科学上网。

设置浏览器驱动

设置浏览器的地址非常简单。 我们可以手动创建一个存放浏览器驱动的目录,如: C:\dev\driver ,将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。

我的电脑–>属性–>系统设置–>高级–>环境变量–>系统变量–>Path,将C:\dev\driver目录添加到Path的值中。


四、环境安装之Selenium

(1)通过jar包安装

点击 Selenium下载你会看到Selenium Standalone Server的介绍:

The Selenium Server is needed in order to run Remote Selenium WebDriver. Selenium 3.X is no longer capable of running Selenium RC directly, rather it does it through emulation and the WebDriverBackedSelenium interface.

Download version 3.4.0

点击版本号进行下载,下载完成将会得到一个 selenium-server-standalone-3.4.0.jar 文件。

或者通过淘宝镜像

打开IntelliJ IDEA,导入.jar包。

点击菜单栏 File --> Project Structure(快捷键Ctrl + Alt + Shift + s) ,点击 Project Structure界面左侧的Modules 。在Dependencies 标签界面下,点击右边绿色的“+” 号,选择第一个选项JARs or directories… ,选择相应的 jar 包,点OK ,jar包添加成功。

(2)通过Maven安装

maven会让第三方包管理变得非常简单。

通过Maven安装需要在IntelliJ IDEA创建Maven项目。

Maven官网

idea & maven help

使用IntelliJ IDEA 配置Maven后,在idea中新建Maven项目。

项目创建成功后,打开maven仓库,搜索 selenium java ,找到所需版本的maven脚本代码复制到项目的pom.xml文件中以添加selenium- java的依赖。

如果显示not found,点击Load Maven Changes。

(3)Hello Selenium

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

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Itest {
    public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();    //Chrome浏览器
//        WebDriver driver = new FirefoxDriver();   //Firefox浏览器

        driver.get("http://www.itest.info");
        String title = driver.getTitle();
        System.out.println(title);

        driver.close();
    }
}

五、selenium元素定位

Selenium提供了8种定位方式。

定位方式java定位方法
idfindElement(By.id())
namefindElement(By.name())
class namefindElement(By.className())
tag namefindElement(By.tagName())
link textfindElement(By.linkText())
partial link textfindElement(By.partialLinkText())
xpathfindElement(By.xpath())
css selectorfindElement(By.cssSelector())

定位方法的用法

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

<html>
  <head>
  <body link="#0000cc">
    <a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
    <form id="form" class="fm" name="f" action="/s">
      <span class="soutu-btn"></span>
        <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" autocomplete="off">

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

driver.findElement(By.id("kw"));  // 通过id定位
driver.findElement(By.name("wd"));  // 通过name定位
driver.findElement(By.className("s_ipt"));  // 通过class定位
driver.findElement(By.tagName("input"));  // 通过tag name定位

通过xpath定位,xpath定位有N种写法,这里列几个常用写法:

driver.findElement(By.xpath("//*[@id='kw']"));
driver.findElement(By.xpath("//*[@name='wd']"));
driver.findElement(By.xpath("//input[@class='s_ipt']"));
driver.findElement(By.xpath("/html/body/form/span/input"));
driver.findElement(By.xpath("//span[@class='soutu-btn']/input"));
driver.findElement(By.xpath("//form[@id='form']/span/input"));
driver.findElement(By.xpath("//input[@id='kw' and @name='wd']"));

通过css定位,css定位有N种写法,这里列几个常用写法:

driver.findElement(By.cssSelector("#kw")
driver.findElement(By.cssSelector("[name=wd]")
driver.findElement(By.cssSelector(".s_ipt")
driver.findElement(By.cssSelector("html > body > form > span > input")
driver.findElement(By.cssSelector("span.soutu-btn> input#kw")
driver.findElement(By.cssSelector("form#form > span > input")

接下来,我们的页面上有一组文本链接。

<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
<a class="mnav" href="http://www.hao123.com" name="tj_trhao123">hao123</a>

link text与partial link text定位

// 通过link text定位
driver.findElement(By.linkText("新闻")
driver.findElement(By.linkText("hao123")

// 通过partial link text定位
driver.findElement(By.partialLinkText("新")
driver.findElement(By.partialLinkText("hao")
driver.findElement(By.partialLinkText("123")

xpath语法css选择器

六、控制浏览器操作

控制浏览器窗口大小

有时候我们希望能以某种浏览器尺寸打开,访问的页面在这种尺寸下运行。例如可以将浏览器设置成移动端大小(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()相同, 但它不需要任何参数。

ps:
close()quit() 方法都可以关闭浏览器。

  • close() 方法只会关闭当前的页面,driver不会被关闭。(此方法会导致webDriver的临时文件不会被删除)
  • quit() 方法则不仅会关闭浏览器,也会关闭session,且清除临时文件。

如果只是关闭多个浏览器中的一个这种可以使用 close() 方法,但是所有用例结束务必使用 quit()方法,这样最彻底。

java多线程

控制浏览器后退、前进、刷新

在使用浏览器浏览网页时,浏览器提供了后退、前进和刷新按钮,可以方便地在浏览过的网页之间切换,WebDriver也提供了对应的 back()forward()refresh() 方法来模拟后退、前进和刷新按钮。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class BrowserGo {
    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new ChromeDriver();

        //get 到csdn首页
        driver.get("https://www.csdn.net/");
        System.out.printf("%s: %s \n", driver.getTitle(), driver.getCurrentUrl());
        Thread.sleep(2000);

        //点击“登录” 链接
        driver.findElement(By.partialLinkText("登录")).click();
        System.out.printf("%s: %s \n", driver.getTitle(), driver.getCurrentUrl());
        Thread.sleep(2000);

        //执行浏览器后退
        driver.navigate().back();
        System.out.printf("%s: %s \n", driver.getTitle(), driver.getCurrentUrl());
        Thread.sleep(2000);

        //执行浏览器前进
        driver.navigate().forward();
        System.out.printf("%s: %s \n", driver.getTitle(), driver.getCurrentUrl());
        Thread.sleep(2000);
        
        driver.navigate().refresh();  // 刷新
        Thread.sleep(2000);

        driver.quit();
    }
}

为了看清脚本的执行过程,上面每操作一步都通过printf()方法来打印当前的网站信息。

七、WebDriver常用方法

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

WebDriver 常用方法

  • clear() 清除文本。
  • sendKeys(*value) 模拟按键输入。
  • click() 单击元素。
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()方法不仅仅用于单击一个按钮,它还可以单击任何可以单击的文字/图片链接、复选框、单选框、下拉框等。

其它常用方法

(1)submit() 提交表单

例如,在搜索框输入关键字之后的“回车” 操作, 就可以通过 submit()方法模拟。

WebElement search_text = driver.findElement(By.id("kw"));
search_text.sendKeys("Selenium");
search_text.submit();

(2)getSize() 返回元素的尺寸

WebElement size = driver.findElement(By.id("kw"));  // 百度输入框
System.out.println(size.getSize());  // 输出:(548, 44)

(3)getText() 获取元素的文本

//返回百度页面底部信息
WebElement text = driver.findElement(By.id("bottom_layer"));
System.out.println(text.getText());  // 输出页面底部文本

(4)getAttribute(name) 获得属性值

//返回元素的属性值, 可以是 id、 name、 type 或元素拥有的其它任意属性
WebElement ty = driver.findElement(By.id("kw"));
System.out.println(ty.getAttribute("type"));  // 输出:text

(5)isDisplayed() 设置该元素是否用户可见

//返回元素的结果是否可见, 返回结果为 True 或 False
WebElement display = driver.findElement(By.id("kw"));
System.out.println(display.isDisplayed());  // 输出: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()类,将浏览器驱动driver作为参数传入。
        Actions action = new Actions(driver);

        // 模拟鼠标悬停操作, 在调用时需要指定元素定位。
        action.clickAndHold(search_setting).perform();
    }
}

代码执行效果:

其他方法

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();

九、模拟键盘操作

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

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;

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等信息进行断言。

  • driver.getTitle(): 用于获得当前页面的title。
  • driver.getCurrentUrl(): 用户获得当前页面的URL。
  • driver.getText(): 获取元素文本信息。

他们的使用方法在第六节和第七节已经讲过,此处不再赘述。


关于selenium的详细使用教程请参考selenium官方文档

下一篇:selenium java教程(下)

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值