//注意:使用Selenium时需要下载Selenium包
Selenium2是一种用于Web应用程序测试工具,它提供了一套友好的API,与Selenium1相比,
它的API更容易理解和使用,其可读性和可维护性也大大提高。Selenium2完全就是一套类库,
不依赖与任何测试框架,不需要启动其他进程或安装其他程序,也不必像Selenium1那样需要先启动服务。

在Selenium2中,一共支持以下几种浏览器的测试:
Firefox
IE
Chrome
Opera
Android
iPhone
//实例

WebDriver driver = new FirefoxDriver();//打开浏览器
Navigation navigation = driver.navigate();//获取浏览器的对象
navigation.to(“http://www.baidu.com”);//控制浏览器跳转到http://www.baidu.com




//打开了浏览器之后,就可以打开指定的页面来进行测试,在Selenium2中,要导航页面,需要用到Navigation对象。


//可以通过WebDriver的Navigate()方法获得Navigation对象实例,代码如下。





WebDriver driver = new FirefoxDriver();//打开浏览器
Navigation navigation = driver.navigate();//获取浏览器的对象
navigation.to(“http://www.baidu.com”);//控制浏览器跳转到http://www.baidu.com






//对Java来说,可以使用to()来进行跳转。在这两个方法中,只需要将URL作为参数即可


//注意:执行to()方法时,代码会自动等待页面加载完毕再执行下一句,也就是浏览器状态栏为“完成”时再执行下一句。




navigation.back();//控制浏览器前进


navigation.forward();//控制浏览器后退


//在浏览器上,可以按“前进”和“后退”按钮来进行导航,通过back()/forward(),也可以实现这种导航功能.




navigation.refresh();//刷新页面


//使用该方法将刷新页面(类似于按F5建的效果),多用于执行某些操作后需要刷新的情况。




//可以按照HTML元素的ID属性进行查找。例如,百度首页有一个搜索文本框,其HTML代码如下:



<input id="kw1" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off"></input>





WebElement baiduTextBox = driver.findElement(By.Id(“kw1”));//获取百度搜索文本框的ID
baiduTextBox.sendKeys(“找到文本框”);//在百度搜索文本框中输入 找到文本框





//Name方法按name进行查找,与按ID进行查找类似,例如百度首页上有“登录”超级连接,其HTML代码如下:



<a id="lb" οnclick="return false;" name="tj_login" href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F"></a>





WebElement loginButton = driver.findElement(By.name(“tj_login”));//获取name,与按ID进行查找类似






//partialLinkText方法按链接的文本进行模糊查找。例如,百度首页上有“登录”超级链接,其HTML代码如下:



<a id=“lb” οnclick=“return false;” name=“tj_login” href=“https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F”>登录</a>





WebElement loginButton = driver.findElement(By.partialLinkText(“登录”));//按链接的文本进行模糊查找到登录






//className方法按元素的Class属性进行查找。例如,百度贴吧上有“全吧搜索”超级链接,其HTML代码如下:



<a class="search_btn j_search_post" οnmοuseοut="this.className=this.className.replace('search_btn_down','')" οnmοusedοwn="this.className+=' search_btn_down'" οnclick="return false;" href="#">全吧搜索</a>





WebElement loginButton = driver.findElement(By.className(“search_btn j_search_post ”));//className方法按元素的Class属性进行查找






//在通过WebDriver的FindeElement()方法获得WebElement的对象后,就可以通过该页面元素进行各种操作了:


1、click() 操作 (相当于点击)


2、sendKeys(“输入的文本”) (输入文本操作)


3、clear()操作 (用于清空input元素的值)


4、submit()操作 (用于对指定元素所在的form元素进行提交)




1、getTitile()  :用于获取当前网页的标题。


2、getCurrentUrl() :用于获取当前网页的URL


3、getText() :用于获取某个元素的文本值。


4、isSelected() : 用于存储复选框或单选框的勾选情况,返回值为true(勾选)或false(未勾选)。


5、isEnabled() :用于存储input等元素的可编辑状态,例如文本框、复选框和单选框的可编辑状态,如果可以编辑,则返回true,否则返回false。


6、isDisplayed()  用于表示元素是否显示,如果为true 说明元素可以显示在页面上,如果为false 则隐藏着。


7、getAttribute(attributeName) 用于获取元素的属性值。




//JavaScript共有3种对话框Alert、Confirmation以及Prompt


Alert:警告对话框,只有一个“确定按钮”


Confirmation:确认对话框,需要选择。


Prompt:输入对话框,需要输入内容。




//弹出对话框的处理


1、Accept()


   单击弹出对话框的确认按钮,可以同时对Alert、Confirmation以及Prompt使用。


2、Dismiss()


单击弹出对话框的取消按钮,可以同时对Alert、Confirmation以及Prompt使用。


3、SendKeys(keys)


   在弹出对话框中输入文本,该方法只对Prompt弹出对话框有效。


4、getText()


    用于获取弹出对话框的文本内容。




//浏览器多窗口处理


getWindowHandles()


要在多个页面之间切换,首先必须获取每个窗口的唯一标识符,通过getWindowHandles()可以获取所有打开窗口的标识符,并将其以集合的形式返回。


String[] handles = new String[driver.getWindowHandles().size()];


driver.getWindowHandles().toArray(handles);


Window(windowName)


新窗口弹出后,可以通过它的标识切换到窗口,再对该窗口元素进行操作。


String[] handles = new String[driver.getWindowHandles().size()];


driver.getWindowHandles().toArray(handles);


WebDriver childWindow = driver.switchTo().window(handles[1]);




//像此时的用户名输入,是无法通过普通的元素定位及操作完成的,因为用户名元素在iframe里面。


此时,必须先定位到用户名所在的iframe中,再进行用户名的定位才可以进行相关的操作。


可以通过一下方法定位iframe


driver.SwitchTo().Frame(“content")


此外还有个问题,就是相关的操作是在不同的frame中定位元素的。


比如,先在left_frame中定位元素Id=TestFor1,然后在right_frame中定位元素Id=TestFor2。


这种情况下,先切到left_frame,driver.SwitchTo().Frame("left_frame");


再定位元素TestFor1,driver.FindElement(By.Id("TestFor1"));


再切到默认的content,driver.SwitchTo().DefaultContent();


再切到right_frame,driver.SwitchTo().Frame("right_frame");


再定位元素TestFor2,driver.FindElement(By.Id("TestFor2"));


/**

*登录京东首页然后实现登录

*/



import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.WebDriver.Navigation;
import org.openqa.selenium.firefox.FirefoxDriver;


public class JD_DL {


public static void main(String[] args) {
WebDriver div = new FirefoxDriver();//打开火狐浏览器
Navigation Rabbit = div.navigate();
Rabbit.to("http://www.jd.com/");//跳转到京东首页
WebElement loginButton = div.findElement(By.className("link-login"));//通过clss获取对象
loginButton.click();//确定
WebElement name = div.findElement(By.id("loginname"));//获取账号登录框
name.sendKeys("HeartIsland");//输入HeartIsland
WebElement password = div.findElement(By.id("nloginpwd"));//获取密码框
password.sendKeys("java2015");//输入密码
WebElement bmit = div.findElement(By.id("loginsubmit"));//获取提交按钮
bmit.click();//单击确定
System.out.println("OK");
}


}