Java_Selenium_UI_自动化代码实现流程

艰难前行博客

很高兴,能把我所学的知识分享出去,也很好高兴你能来到我的博客,我第一次写微博,下面的内容可能有点多,希望能帮到你,费话不多说了,直接上代码

  • 开发环境介绍:
    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);
    }

  • *封装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

      <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>
    
    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
mysql mysql-connector-java 8.0.11 log4j log4j 1.2.17 org.seleniumhq.selenium selenium-safari-driver 3.13.0 com.aventstack extentreports 3.1.1 org.freemarker freemarker 2.3.23 com.relevantcodes extentreports 2.41.1 com.vimalselvam testng-extentsreport 1.3.1

如果你看完了 我相信 你会学到不少东西

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值