Selenium WebDriver
安装Selenium WebDriver Java客户端
1.到https://docs.seleniumhq.org/download/下载
2.下载后解压
3.到eclipse新建java project
4.在src文件下新建class
5.在project右键——>properties
6.左侧选择java build path
7.切换到Libraries 选项卡,然后单击“Add External JARs” 按钮。
8.选择刚刚那个解压的文件,将下面两个图的jar包分别导入,然后选择Apply and Close 。
9.打开网址https://github.com/mozilla/geckodriver/releases选择相应版本下载,下载后解压。
安装geckodriver
https://github.com/mozilla/geckodriver/releases
去下载对应系统的文件
该exe文件用于火狐浏览器驱动
常用命令
获取网页
获取网页有两种方法:
driver.get("www.yiibai.com");//使用Get方法
driver.navigate().to("https://yiibai.com/selenium/");//使用Navigate方法
查找表单并发送用户输入
driver.findElement(By.id("kw")).sendKeys("aaaa");//查找id="kw",并且输入aaaa
清除用户输入
clear()方法用于从文本框中清除用户输入。
driver.findElement(By.name("q")).clear();
通过Web元素获取数据
有时需要获取通过web元素写入的文本来执行某些断言和调试。使用getText()方法来获取通过任何web元素写入的数据。
driver.findElement(By.id("element567")).getText();
执行Click事件
click()方法用于对任何Web元素执行单击操作。
driver.findElement(By.id("btnK")).click();
在浏览器历史记录中向后导航
driver.navigate().back();
在浏览器历史记录中向前导航
driver.navigate().forward();
刷新/重新加载网页
driver.navigate().refresh();
关闭浏览器
driver.close();
关闭浏览器和与驱动程序关联的其他所有其他窗口
driver.quit();
在Windows之间移动
driver.switchTo().window("windowName");
在 frame 之间移动
driver.switchTo().frame("frameName");
拖放
使用Action类执行拖放操作。
WebElement element = driver.findElement(By.name("source"));
WebElement target = driver.findElement(By.name("target"));
将网页向下滚动5000像素
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("scrollBy(0, 100)");
例子
打开教务系统网址,输出title,输入账号密码,点击登录。
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.GeckoDriverService;
public class First {
public static void main(String[] args) {
// declaration and instantiation of objects/variables
System.setProperty("webdriver.gecko.driver", "D:\\桌面\\geckodriver-v0.29.1-win64\\geckodriver.exe");
System.setProperty("webdriver.firefox.bin", "D:\\软件\\浏览器\\Mozilla Firefox\\firefox.exe");
//WebDriver是一个接口,后面FirefoxDriver,ChromeDriver都是类
WebDriver driver = (WebDriver) new FirefoxDriver();//火狐浏览器 实例化类。
driver = new ChromeDriver();//谷歌浏览器
driver.get("http://121.251.136.136/jwglxt/xtgl/login_slogin.html");//通过get方法获取网页
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);/
String titile = driver.getTitle();//获取title值
System.out.println("title is => " + titile);
driver.findElement(By.id("yhm")).sendKeys("11111"); //找到id为yhm,输入值
driver.findElement(By.id("mm")).sendKeys("111111");
driver.findElement(By.id("dl")).click();//找到id为dl,点击
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//driver.quit();
}
}
定位策略
navigate()
navigate().to():
和get()方法基本相同,都是用来打开指定的网页地址
//使用navigate.to打开指定网页地址:百度新闻
driver.navigate().to("http://news.baidu.com/");
navigate().back()
当在同一个窗口打开2个以上的页面后,浏览器的前进和后退按钮就可以使用了,见上图标注。navigate().back()指回退到上一个页面。
//使用navigate.back返回到百度新闻页
driver.navigate().back();
navigate().forward()
navigate().forward()指前进到下一个页面,相当于点击浏览器栏的前进按钮,见上图标注。
//使用navigate.forward返回到百度国内新闻页
driver.navigate().forward();
navigate().refresh()
这个很好理解,就是简单的刷新当前页面。
比如有的页面在增加一条记录后没有自动刷新,看不到新增的记录,此时可以用navigate().refresh()进行刷新。
//使用navigate.refresh刷新当前页面
driver.navigate().refresh();