实战效果
首先新建一个项目,步骤如下:
New-project-Maven-Maven project-Next
下一步:
百度搜索:maven repository
接下来我们可以愉快的整代码了:
接下来的步骤我们参照我们的自动化测试用例来进行:
代码初始版本:
package com.imooc.seleniumJava;
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 Login {
public WebDriver driver;
//初始化chrome浏览器驱动
public void InitDriver()
{
System.setProperty("webdriver.chrome.driver", "D:\\java\\chromedriver-32\\chromedriver.exe");
driver=new ChromeDriver();
driver.get("http://www.imooc.com");
//窗口最大化
driver.manage().window().maximize();
}
/*
* 登录脚本
* */
public void loginScript() throws Exception{
//查找登录按钮
driver.findElement(By.id("js-signin-btn")).click();
//加入休眠
Thread.sleep(3000);
//找到name为"email"的用户名信息
WebElement user=driver.findElement(By.name("email"));
//是否可显示
user.isDisplayed();
//找到name为"password"的密码信息
WebElement password=driver.findElement(By.name("password"));
//是否可显示
password.isDisplayed();
//找到登录页面的登录按钮
WebElement loginButton=driver.findElement(By.className("btn-red"));
//是否可显示
loginButton.isDisplayed();
//输入用户名
user.sendKeys("m13031155057@163.com");
//输入密码
password.sendKeys("1111");
//点击登录按钮
loginButton.click();
//休眠
Thread.sleep(3000);
//找到并检测首页个人头像是否可显示,第8步用例步骤
WebElement header=driver.findElement(By.id("header-avator"));
header.isDisplayed();
Actions actions=new Actions(driver);
//鼠标移动到首页头像部位
actions.moveToElement(header).perform();
//得到并打印我们的用户名称
String userInfo=driver.findElement(By.className("name")).getText();
System.out.println(userInfo);
}
public static void main(String[]args) throws Exception{
Login login=new Login();
login.InitDriver();
login.loginScript();
}
}
代码进阶版本一:
package com.imooc.seleniumJava;
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 Login {
public WebDriver driver;
//初始化chrome浏览器驱动
public void InitDriver()
{
System.setProperty("webdriver.chrome.driver", "D:\\java\\chromedriver-32\\chromedriver.exe");
driver=new ChromeDriver();
driver.get("http://www.imooc.com");
//窗口最大化
driver.manage().window().maximize();
}
/*
* 登录脚本
* */
public void loginScript() throws Exception{
/*
* 声明信息
* */
String userName="m13031155057@163.com";
String emailElement="email";
String userBy="name";
String passBy="name";
String buttonBy="className";
String headerBy="id";
String userPass="1111";
String passwordElement="password";
String buttonElement="btn-red";
String headerElement="header-avator";
String nameElement="name";
InitDriver();
//查找登录按钮
driver.findElement(By.id("js-signin-btn")).click();
//加入休眠
Thread.sleep(3000);
//找到name为"email"的用户名信息
WebElement user=driver.findElement(this.byStr(userBy,emailElement));
//是否可显示
user.isDisplayed();
//找到name为"password"的密码信息
WebElement password=driver.findElement(this.byStr(passBy, passwordElement));
//是否可显示
password.isDisplayed();
//找到登录页面的登录按钮
WebElement loginButton=driver.findElement(this.byStr(buttonBy, buttonElement));
//是否可显示
loginButton.isDisplayed();
//输入用户名
user.sendKeys(userName);
//输入密码
password.sendKeys(userPass);
//点击登录按钮
loginButton.click();
//休眠
Thread.sleep(3000);
//找到并检测首页个人头像是否可显示,第8步用例步骤
WebElement header=driver.findElement(this.byStr(headerBy, headerElement));
header.isDisplayed();
Actions actions=new Actions(driver);
//鼠标移动到首页头像部位
actions.moveToElement(header).perform();
//得到并打印我们的用户名称
String userInfo=driver.findElement(By.className("name")).getText();
System.out.println(userInfo);
if(userInfo.equals("qq_转角遇到_0"))
{
System.out.println("登录成功");
}else
{
System.out.println("登录失败");
}
}
/*
* 封装By
* */
public By byStr(String by,String local){
if(by.equals("id"))
{
return By.id(local);
}else if(by.equals("name"))
{
return By.name(local);
}else if(by.equals("className"))
{
return By.className(local);
}else
{
return By.xpath(local);
}
}
public static void main(String[]args) throws Exception{
Login login=new Login();
login.loginScript();
}
}
进阶版本一的优势
1.加入了封装方法By,使我们常见的id,name,className,Xpath等封装起来,调用方便,一目了然
2.对于我们迭代的时候用户名更改的时候,为了不产生不必要的麻烦,所以我们对用户名,密码等变量进行了声明,保证了灵活性
进阶版本二代码:
package com.imooc.seleniumJava;
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 Login {
public WebDriver driver;
//初始化chrome浏览器驱动
public void InitDriver()
{
System.setProperty("webdriver.chrome.driver", "D:\\java\\chromedriver-32\\chromedriver.exe");
driver=new ChromeDriver();
driver.get("http://www.imooc.com");
//窗口最大化
driver.manage().window().maximize();
}
/*
* 登录脚本
* */
public void loginScript() throws Exception{
/*
* 声明信息
* */
String loginBy="id";
String loginElement="js-signin-btn";
String userName="m13031155057@163.com";
String emailElement="email";
String userBy="name";
String passBy="name";
String buttonBy="className";
String headerBy="id";
String userPass="1111";
String passwordElement="password";
String buttonElement="btn-red";
String headerElement="header-avator";
String nameElement="name";
String nameInfo="className";
InitDriver();
//查找登录按钮
this.element(this.byStr(loginBy, loginElement)).click();
//加入休眠
Thread.sleep(3000);
//找到name为"email"的用户名信息
WebElement user=this.element(this.byStr(userBy,emailElement));
//是否可显示
user.isDisplayed();
//找到name为"password"的密码信息
WebElement password=this.element(this.byStr(passBy, passwordElement));
//是否可显示
password.isDisplayed();
//找到登录页面的登录按钮
WebElement loginButton=this.element(this.byStr(buttonBy, buttonElement));
//是否可显示
loginButton.isDisplayed();
//输入用户名
user.sendKeys(userName);
//输入密码
password.sendKeys(userPass);
//点击登录按钮
loginButton.click();
//休眠
Thread.sleep(3000);
//找到并检测首页个人头像是否可显示,第8步用例步骤
WebElement header=this.element(this.byStr(headerBy, headerElement));
header.isDisplayed();
Actions actions=new Actions(driver);
//鼠标移动到首页头像部位
actions.moveToElement(header).perform();
//得到并打印我们的用户名称
String userInfo=this.element(this.byStr(nameInfo, nameElement)).getText();
System.out.println(userInfo);
if(userInfo.equals("qq_转角遇到_0"))
{
System.out.println("登录成功");
}else
{
System.out.println("登录失败");
}
}
/*
* 封装By
* */
public By byStr(String by,String local){
if(by.equals("id"))
{
return By.id(local);
}else if(by.equals("name"))
{
return By.name(local);
}else if(by.equals("className"))
{
return By.className(local);
}else
{
return By.xpath(local);
}
}
/*
* 封装Element
* */
public WebElement element(By by){
WebElement ele=driver.findElement(by);
return ele;
}
public static void main(String[]args) throws Exception{
Login login=new Login();
login.loginScript();
}
}
进阶版本二优势:
1.加入了封装element方法,driver.finElement()使用element方法来代替,更加一目了然
总结:
1.注意Thread.sleep()的应用,这里我们用到两次,第一次在我们首页点击登录后会弹出一个登录框,这个步骤其实需要一定时间进行加载,所以我们在其点击之后执行下一步操作前应该休眠几秒,否则会报错:
no such element: Unable to locate element: {"method":"name","selector":"email"}
另一个Thread.sleep()是在我们点击登录框中的"登录按钮"之后因为要加载我们的用户信息,同样需要应用休眠,凡是需要加载信息的都可以考虑进行休眠
2.执行上述代码其实多次报诸如:no element或者Unable to locate element归根结底还是我们找寻元素犯了一些常见的错误:
1. id,className,name等元素看错或者混淆,比如一个"登录"按钮,本来它的元素类型是id,但是我们却通过"By.className"或者By.name来查找它
2. 关于id,className,name的属性值我们一定要到对应的网站上进行查看并且复制,不要嫌麻烦,比如我们的"登录"按钮是"btn_red",如果你自己输入的话看起来和人家网站上的一样,然而实践亲测往往自己输入的执行自动化的时候还是定位到我们没有找到这个元素,所以最好是粘贴人家官方的,避免不必要的错误