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>[email protected]</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>
    

    javax.mail
    mail
    1.4.7


    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


如果你看完了 我相信 你会学到不少东西 ,如果又不懂的请加我QQ:1097147260,联系我,可以讨论,谢谢支持!

猜你喜欢

转载自blog.csdn.net/m0_37871296/article/details/81509930