selenium的一些小例子



一个初学者的笔记,主要内容来源于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();
	}
}

Thread.sleep(3000);
 
页面加载需要一个时间,webdriver 只能找到页面已有的元素,所以有些时候需要加入一个等待的时间,让页面元素完全加载出来,才能通过findelement方法找到你想要的元素。这个sleep()并不是WebDriver中自带的方法,而是java中休眠线程的一个方法,这里不是很推荐。WebDriver自带了一个智能等待的方法。
 
dr.manage().timeouts().implicitlyWait(arg0, arg1);
 
Arg0:等待的时间长度,int 类型 ;
Arg1:等待时间的单位 TimeUnit.SECONDS 一般用秒作为单位。
 
dr.quit()和dr.close()都可以退出浏览器,简单的说一下两者的区别:第一个close,如果打开了多个页面是关不干净的,它只关闭当前的一个页面。第二个quit,是退出了所有Webdriver所有的窗口,退的非常干净,所以推荐使用quit最为一个case退出的方法。



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

感谢webdriver中文社区

http://www.webdriver.org/article-12-1.html


定位的原则就是:id name class 优先,强烈建议和前端哥哥搞好关系。定位就不是问题:实在不行就xpathcss大部分偶可以定位到。

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

例如 <a href="mailto:By.xpath(" input%5b"@id="kw" %5d")"="" style="word-wrap: break-word; color: rgb(51, 51, 51); text-decoration: none;">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行业的人,一般使用的浏览器为chromefirefoxchrome自带了审查元素功能和xpathcss路径的复制功能,当然也不是每一个都能复制成功。

Firefox就可以扩展很多插件了:

 

第一个firebug,在浏览器中右击就可以查看页面的元素。

 

第二个fireFinderfirepath 都是寻找元素xpath路径的,我喜欢结合xpath语法然后去对比和验证自己寻找的元素路径对不对。

安装后,按F12就可以看到如下:

 

第三个如果你不喜欢打开新的页面,使用这个插件可以只在本页加载页面结果。




Selenium WebDriver 中文教程API(五)之下拉框的处理

转载于:http://www.webdriver.org/article-14-1.html

WebDriver 特意为处理下拉框设置了一些方法,本篇将介绍正常下拉框和不正常下拉框的处理方法。

 

看见上图页面元素<select> </select>标签对,看到这个标签对,我们就可以使用Select对象来处理这个下拉框;但是大家注意一下multiple这个属性的区别:

这是一段提交文件的表单页面代码,一般提交文件都是单一提交的,加了multiple属性以后,就可以同时选择多个文件上传。

专业一点的解释:multiple 属性规定输入字段可选择多个值如果使用该属性,则字段可接受多个值

同理,上面的multiple就可以选择多个选项提交,而非multiple的只能单一的提交。

 

 

 

第一步:我们先要定位到<select>标签的位置,如上图:Webelement element = driver.findelement(By.id(“fruits”))就能定位到<select>标签;

 

第二步:我们需要new一个Select的对象:Select fruits = new Select(WebElement element),这个对象带有的参数就是<Select>标签这个对象;

 

第三步:我要把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(),定位你想要切换的状态。

 

如果有问题请留言,有问必答。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值