艰难前行博客
很高兴,能把我所学的知识分享出去,也很好高兴你能来到我的博客,我第一次写微博,下面的内容可能有点多,希望能帮到你,费话不多说了,直接上代码
-
开发环境介绍:
java 8,开发工具Eclipse,maven,jenkens,SVN,测试报告插件等。
项目截图:
如上图:项目创建了11包,(其中Actions,GetElements,Handles,RandomNum自由度很广的,可以自由发挥,剩下的是必需要,不可缺少) -
封装驱动介绍
public class SelectDriver {
public WebDriver selectDriver(String browsername){
if(browsername.equals(“chrome”)){
System.setProperty(“webdriver.chrome.driver”, “D:/Eviment/Drivers/chromedriver.exe”);
WebDriver driver= new ChromeDriver();
return driver;
}else if(browsername.equals(“ie”)){
System.setProperty(“webdriver.ie.driver”, “D:/Eviment/Drivers/IEDriverServer.exe”);
WebDriver driver= new InternetExplorerDriver();
return driver;
}else if(browsername.equals(“firefox”)){
System.setProperty(“webdriver.firefox.bin”,“D:/Eviment/Drivers/firefox.exe”);
WebDriver driver= new FirefoxDriver();
return driver;
}else{
return new SafariDriver();
}
}
}
封装了四种浏览器。 -
封装baseDriver介绍
public class Base_Driver {
WebDriver driver;public Base_Driver(String browser) {
SelectDriver select = new SelectDriver();
this.driver = select.selectDriver(browser);
}public void StopDriver() {
driver.close();
}
public String getWindowUrl() {
return driver.getCurrentUrl();
}public void waitime2(long time) {
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}public void waitime(long time) {
driver.manage().timeouts().implicitlyWait(time, TimeUnit.SECONDS);
}public WebElement findElement(By by) {
return driver.findElement(by);}
public List findElements(By by) {
return driver.findElements(by);
}public void getUrl(String url) {
driver.get(url);
}public void MixWindows() {
driver.manage().window().maximize();
}public void forward() {
driver.navigate().forward();
}public void forback() {
driver.navigate().back();
}// 刷新页面
public void ReflshPage() {
driver.navigate().refresh();
this.waitime2(1000);
}// 处理Alert提示框
public void DelAlete(boolean iscancel) {
Alert alt = driver.switchTo().alert();
if (iscancel != false) {
this.waitime2(2000);
alt.accept();
} else {
alt.dismiss();
}
}// 处理模态框
public void Del_MoTai_Alter() {
driver.switchTo().activeElement();
}// 处理提示框里的输入框
public void DelAlterSendcase(String text, boolean iscancel) {
Alert prompt = driver.switchTo().alert();
prompt.sendKeys(text);
if (iscancel != false) {
prompt.accept();
} else {
prompt.dismiss();
}
}// 多个窗口切换
public void getWindows() {
Set winHandels = driver.getWindowHandles();
List it = new ArrayList(winHandels);
driver.switchTo().window(it.get(1));
this.waitime2(1500);
driver.close();
this.waitime2(1000);
driver.switchTo().window(it.get(0));
this.waitime2(1000);
}// 处理ifream
public void swichTo(WebElement element) {
driver.switchTo().frame(element);
}/*
- 处理时间控件(1.删除元素,2.设置元素)
/
public void SetAttribute(WebElement local, String Attribute, String new_value) {
/- String js =
- “document.getElementById(‘actdate_1’).removeAttribute(‘readonly’)”;
- ((JavascriptExecutor) driver).executeScript(js);
*/
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(“aeguments[0].setAttribute(arguments[1],arguments[2])”, local, Attribute, new_value);
}
public void removeAttribute(WebElement local, String Attribute) {
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript(“aeguments[0].remove(arguments[0],arguments[1])”, local, Attribute);
}// 截图操作
public void cutScreamPicture(String SavePicturePath) {
try {
File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(srcFile, new File(SavePicturePath));
} catch (IOException e) {
e.printStackTrace();
}
}/*
- 滚动条
*/
// 滚动到最下方
public void OperitionScrollDown() {
((JavascriptExecutor) driver).executeScript(“window.scrollTo(0,document.body.scrollHeight)”);
this.waitime2(3000);
}
// 滚动到指定元素位置
public void OperitionScrollToElement(WebElement element) {
((JavascriptExecutor) driver).executeScript(“arguments[0].scrollIntoView();”, element);
this.waitime2(3000);
}// 向下滑动800像素
public void OperitionScrollTo() {
((JavascriptExecutor) driver).executeScript(“window…scrollBy(0,800);”);
this.waitime2(3000);
} - 处理时间控件(1.删除元素,2.设置元素)
-
*封装BasePage介绍
public class Base_Page {
Base_Driver driver;public Base_Page(Base_Driver driver) {
this.driver = driver;
}public WebElement getElement(String key) {
return driver.findElement(GetLoctions.Loction(key));
}public List getElements(String key) {
return driver.findElements(GetLoctions.Loction(key));
}public void Click(WebElement element) {
try {
element.click();
} catch (ElementNotVisibleException e) {
System.out.println(“传入的元素” + element + “有误!请检查元素是否正确!”);
}
}public void Sendkeys(WebElement element, String key) {
try {
element.sendKeys(key);
} catch (Exception e) {
System.out.println(“传入的元素:” + element + “,传入的Key值:” + key + “,有错误!请检查”);
}
}// 层级定位
public List getFathElement(WebElement element, String key) {
return element.findElements(GetLoctions.Loction(key));
}public WebElement getSonElement(List elements, int index) {
return elements.get(index);
}// 清除之前输入框的内容
public void ClearTest(WebElement element) {
if (element != null) {
driver.waitime(5);
element.clear();
} else {
System.out.println(element + “有错误!请检查”);
}
}// 等待时间
public void waitimes(long time) {
driver.waitime2(time);
}// 处理提示框输入字符
public void AlterSendCase(String text, boolean iscancel) {
driver.DelAlterSendcase(text, iscancel);
}// 多窗口切换
public void ChangeWindows() {
driver.getWindows();
}// 处理时间输入框–时间输入框的元素
public WebElement SendTime(String key) {
return driver.findElement(GetLoctions.Loction(key));
}// 处理模态框
public void MoTaiBox() {
driver.Del_MoTai_Alter();
} -
caseDriver介绍
public class Case_Driver {
public Base_Driver initDriver(String browser){
Base_Driver driver=new Base_Driver(browser);
return driver;
}
} -
测试邮件介绍
@Setter@Getter
public class EmailDAO {
//邮箱服务器 如smtp.163.com
private String Emailhost ;
//用户邮箱 如**@163
private String Email ;
//用户授权码 不是用户名密码 可以自行查看相关邮件服务器怎么查看
private String Password ;
//消息回复邮箱
private String SendEmail ;
//发送地址
private String RecieEmail ;
//发送主题
private String Emailsubject ;
//发送内容
private String Emailcontent ;
//成功的case
private double sucssfulCase;
//失败的case
private double FiledCase;
}
public class SendHTMLEmails {
private final static String Emailhost = “smtp.163.com”; //163的服务器
private final static String Email = ;//你的邮箱
private final static String Password = //授权码
private final static String SendEmail = //你的邮箱
private final static String title = “测试邮件!”;
private final static String mail = "; //发送对象的邮箱
public static void HtmlMail(EmailDAO info){
double yes=info.getSucssfulCase();
double no=info.getFiledCase();
double sucssful = 0;
double filed = 0;
if(yes!=0 || no!=0){
sucssful=Math.floor(yes/(yes+no)*100);
filed=100-sucssful;
}else{
sucssful=0;
filed =0;
}
String content1 = "<div><table border='20' width='400' height='200' bgcolor='yellow'><tr height='50' bgcolor='skyblue'><th colspan='4'>测试报告数据</th></tr><tr> <th>成功case</th> <th>失败case</th> <th>成功率</th> <th>失败率</th> </tr> <tr> <th>"+yes+"</th> <th>"+no+"</th> <th>"+sucssful+"%</th><th>"+filed+"%</th> </tr></table>";
String content2 ="</div><hr align='left' width='22%'/><div><p ><b>测试人:</b>发件人</p><p ><b>电话:</b>18518092396</p><p ><b>邮箱:</b>wangqiang@rising.com.cn</p><div style='text-align:left'><img src='D:/amg_email_demo/logo.png'/></div>";
String content3 ="<hr align='left' width='22%'/><p ><b>XXX有限公司</b></p><p >地址:公司地址</p><p >邮编:100000</p><p >网址:</p></div>";
String content = content1+content2+content3;
info.setEmailhost(Emailhost);
info.setEmail(Email);
info.setPassword(Password);
info.setSendEmail(SendEmail);
info.setRecieEmail(mail);
info.setEmailsubject(title);
info.setEmailcontent(content);
try{
Message message = getMessage(info);
// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
Multipart mainPart = new MimeMultipart();
// 创建一个包含HTML内容的MimeBodyPart
BodyPart html = new MimeBodyPart();
// 设置HTML内容
html.setContent(info.getEmailcontent(), “text/html; charset=utf-8”);
mainPart.addBodyPart(html);
// 将MiniMultipart对象设置为邮件内容
message.setContent(mainPart);
Transport.send(message);
} catch (Exception e) {
System.out.print("’"+title+"'的邮件发送失败!");
e.printStackTrace();
}
}
private static Message getMessage(EmailDAO info) throws Exception{
final Properties p = System.getProperties() ;
p.setProperty("mail.smtp.host", info.getEmailhost());
p.setProperty("mail.smtp.auth", "true");
p.setProperty("mail.smtp.user", info.getEmail());
p.setProperty("mail.smtp.pass", info.getPassword());
// 根据邮件会话属性和密码验证器构造一个发送邮件的session
Session session = Session.getInstance(p, new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(p.getProperty("mail.smtp.user"),p.getProperty("mail.smtp.pass"));
}
});
//session.setDebug(true);
Message message = new MimeMessage(session);
//消息发送的主题
message.setSubject(info.getEmailsubject());
//接受消息的人
message.setReplyTo(InternetAddress.parse(info.getSendEmail()));
//消息的发送者
message.setFrom(new InternetAddress(p.getProperty("mail.smtp.user"),"发件人"));
// 创建邮件的接收者地址,并设置到邮件消息中
message.setRecipient(Message.RecipientType.TO,new InternetAddress(info.getRecieEmail()));
// 消息发送的时间
message.setSentDate(new Date());
return message ;
}
![这里写图片描述](https://img-blog.csdn.net/20180808155008468?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3ODcxMjk2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
-
GetLocation代码介绍
public class GetLoctions {
public static By Loction(String key){
ReadProperties load=new ReadProperties(“Eduction.properties”);
String KeyWord=load.getLoction(key);
String locatinway=KeyWord.split("–>")[0];
String element=KeyWord.split("–>")[1];if(locatinway.equals("id")){ return By.id(element); }else if(locatinway.equals("name")){ return By.name(element); }else if(locatinway.equals("className")){ return By.className(element); }else if(locatinway.equals("linkText")){ return By.linkText(element); }else if(locatinway.equals("tagName")){ return By.tagName(element); }else { return By.xpath(element); }
}
} -
ReadPropertitys代码介绍
public class ReadProperties {
String path;
Properties pro;
public ReadProperties(String path){
this.path=path;
this.pro=readPropertie(path);
}
public Properties readPropertie(String path){
InputStream in=null;
Properties pro=new Properties();
try {
in=new FileInputStream(path);
pro.load(in);} catch (Exception e) { e.printStackTrace(); }finally { if(in!=null){ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } return pro;
}
public String getLoction(String key){
String name=pro.getProperty(key);
return name;
}
} -
所用到的依赖
org.projectlombok
lombok
1.16.18
provided
org.testng
testng
6.13.1
test
org.seleniumhq.selenium
selenium-firefox-driver
2.44.0
org.apache.commons commons-lang3 3.7 commons-beanutils commons-beanutils 1.9.3 org.dom4j dom4j 2.1.0 net.sf.saxon saxon 8.7<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>2.44.0</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-ie-driver</artifactId> <version>2.44.0</version> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.44.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-api</artifactId> <version>2.44.0</version> </dependency> <dependency> <groupId>org.databene</groupId> <artifactId>feed4testng</artifactId> <version>0.6.2</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-email</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.4.6</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version>
如果你看完了 我相信 你会学到不少东西