一个初学者的笔记,主要内容来源于webdriver 中文社区,有很多不足之处,欢迎指教,谢谢!
webdriver 中文社区: http://www.webdriver.org
1:打开网页-获取title-获取url
package com.test;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestBaidu {
public static void main(String[] args) {
String url = "http://www.baidu.com/";
FirefoxDriver dr = new FirefoxDriver();
dr.get(url);
System.out.println(dr.getTitle());
System.out.println(dr.getCurrentUrl());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
dr.quit();
}
}
2:打开网页-输入内容-提交
package com.test;
import org.openqa.selenium.By;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestBaidu {
public static void main(String[] args) {
String url = "http://www.baidu.com/";
FirefoxDriver dr = new FirefoxDriver();
try {
dr.get(url);
Thread.sleep(3000);
dr.findElement(By.id("kw")).sendKeys("hello Selenium");
dr.findElement(By.id("su")).click();
} catch (InterruptedException e) {
e.printStackTrace();
}
dr.quit();
}
}
3.GET系列的方法:
getTitle()
getPageSource()
getCurrentUrl()
getAttribute()
getText()
package com.test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestBaidu {
public static void main(String[] args) {
String url = "http://www.baidu.com/";
FirefoxDriver dr = new FirefoxDriver();
try {
dr.get(url);
Thread.sleep(3000);
WebElement element =dr.findElement(By.id("kw"));
String aa = element.getAttribute("id");
String a2 = element.getText();
System.out.println(aa);
System.out.println(a2);
} catch (InterruptedException e) {
e.printStackTrace();
}
dr.quit();
}
}
4.操作浏览器的方法主要有四个:
1.浏览器窗口最大化
2.浏览器前进
3.浏览器后退
4.浏览器刷新
driver.manage().window().maximize():将浏览器的窗口最大化。
driver.navigate().back():控制浏览器按照浏览器记录的history,回退到上一个页面。
driver.navigate().forward():控制浏览器按照浏览器记录的history,前进到上一个页面。
driver.navigate().refresh():刷新页面
5.浏览器切换窗口
package com.test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class TestBaidu {
public boolean switchToWindow(String windowTitle,WebDriver dr){
boolean flag = false;
try {
// 将页面上所有的windowshandle放在入set集合当中
String currentHandle = dr.getWindowHandle();
java.util.Set handles = dr.getWindowHandles();
for (String s : handles) {
if (s.equals(currentHandle))
continue;
else {
dr.switchTo().window(s);
// 和当前的窗口进行比较如果相同就切换到windowhandle
// 判断title是否和handles当前的窗口相同
if (dr.getTitle().contains(windowTitle)) {
flag = true;
System.out.println("Switch to window: " + windowTitle + " successfully!");
break;
} else
continue;
}
}
} catch (Exception e) {
System.out.printf("Window: " + windowTitle + " cound not found!", e.fillInStackTrace());
flag = false;
}
return flag;
}
public static void main(String[] args) {
String url = "http://www.baidu.com/";
WebDriver dr = new FirefoxDriver();
try {
dr.get(url);
Thread.sleep(3000);
switchToWindow("百度",dr);
} catch (InterruptedException e) {
e.printStackTrace();
}
dr.quit();
}
}
http://www.webdriver.org/article-12-1.html
定位的原则就是:id name class 优先,强烈建议和前端哥哥搞好关系。定位就不是问题:实在不行就xpath和css大部分偶可以定位到。
webdriver定位的方法是通过一个By类,By类中有许多的属性,常用的有已下几个:
NO1.
ID:dom元素首选的定位方式,id是唯一,定位速度快。(和fe处好关系,用id定位杠杠的)
如By.id(“kw”) 就可以定位到百度的搜索框
NO2.
Name:表单定位为name首选,因为表单肯定会有一个name的属性。
如上图中的百度搜索框,也可以用By.name(“wd”)来定位
NO3.
class 一般代表着某一种样式属性,所有很有可能是重复的,不能精准的定位By.classname(“s_ipt”)来定位。
NO4.
linktext 链接定位 (如果元素中间有空格 请注意)
对于百度首页新闻这个链接,我们可以直接用By.linkText(“新闻”) 来查找
NO5.
xpath定位:辅助的工具 firefinder firepath 两个firefox的插件工具。
第一种xpath:绝对路径式的定位 By.xpath("html/body/div/form/input")
第二种xpath:相对的路径定位 By.xpath("//input") 一般要结合某些特定的属性值
//input 找到所有的input
@id=kw 是找到id属性=kw的
例如 By.xpath("//input[@id='kw']")
第三种xpath:使用部分属性值匹配:By.xpath("//input[starts-with(@id,'nice')]")
By.xpath("//input[contains(@id,'白菜')]")
xpath定位方法有些写的非常的长,如果不是非常熟知xpth的语法,请谨慎的使用。原因很简单,例如:By.xpath("html/body/div/form/input")这个地位的方式是绝对的定位,如果pm在其中去掉了一个属性,你的xpath就得重新的定位,xpath就使用不了。而且在茫茫多的xpath中,如何去寻找你哪一个出了问题,所以如果不懂xpath的语法,请谨慎。一切都是为了维护整个项目,简单简单!
NO6.
css定位:简单的介绍一下css的语法。
介绍三个选择器:
1.id的选择器:# 开头
2.类的选择器:. 开头
3.属性的选择器:[key=’value’]
By.cssSelector(“input[name=’username’]”);
作为一个IT行业的人,一般使用的浏览器为chrome和firefox,chrome自带了审查元素功能和xpath和css路径的复制功能,当然也不是每一个都能复制成功。
Firefox就可以扩展很多插件了:
第一个firebug,在浏览器中右击就可以查看页面的元素。
第二个fireFinder和firepath 都是寻找元素xpath路径的,我喜欢结合xpath语法然后去对比和验证自己寻找的元素路径对不对。
安装后,按F12就可以看到如下:
第三个如果你不喜欢打开新的页面,使用这个插件可以只在本页加载页面结果。
WebDriver 特意为处理下拉框设置了一些方法,本篇将介绍正常下拉框和“不正常下拉框”的处理方法。
看见上图页面元素标签对,看到这个标签对,我们就可以使用Select对象来处理这个下拉框;但是大家注意一下multiple这个属性的区别:
这是一段提交文件的表单页面代码,一般提交文件都是单一提交的,加了multiple属性以后,就可以同时选择多个文件上传。
专业一点的解释:multiple 属性规定输入字段可选择多个值,如果使用该属性,则字段可接受多个值。
同理,上面的multiple就可以选择多个选项提交,而非multiple的只能单一的提交。
第一步:我们先要定位到
第二步:我们需要new一个Select的对象:Select fruits = new Select(WebElement element),这个对象带有的参数就是
第三步:我要把driver.findelement(By.id(“fruits”))传进去,Select fruits = new Select(element);
定位到Select,我们就可以调用Select的对象fruits中的一些方法来定位到下拉框的元素,下面介绍一下三个常用的方法:
1.fruits.selectByIndex(int x),下拉框的index 标识一般从0开始,如果x=0,定位到的就是下拉框的第一个元素,依此可以类推。
2.fruits.selectByValue(“apple”),下拉框有一个value属性,这个方法就是根据value属性的属性值来定位要选择的下拉框。
3.fruits.selectByVisibleText(“Banana”),这个是定位下拉框的可见文本。
正常的下拉框基本用这三个方法就能够处理了,下面介绍一种会误以为下拉框的处理方式。
这个情况是我自己遇到的,因为当时未理解下拉框是什么,看到类似于下拉框的就用Select对象来解决问题,结果被坑了好久时间,下面就介绍一下这个Bad case,但也是现在最常见的,我浏览了现在许多网站,很少见到select标签,大部分是这种情况。
类似于这种下拉选项,俺们就不能使用Select对象来处理了,查看它的页面元素上压根就没有select标签对,所以只要当普通元素去处理就好。
第一步:利用xpath 定位到全部游戏,弹出这个类似下拉框的东西。
第二步:利用By.linktext(),定位你想要切换的状态。
如果有问题请留言,有问必答。