ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

WebUi自动化调试小工具

2022-06-18 17:04:58  阅读:152  来源: 互联网

标签:String driver System equalsIgnoreCase WebUi 自动化 new type 调试


1.研发背景:

  web ui 自动化开发脚本的时候,有多少人是盲写?直到写完整个页面后运行调试,然后修改因为哪个元素没有定位到而报错,如何能一次性,高效的完成web ui脚本定位,所以纯手敲一款小工具每一步定位元素验证后写入脚本,方便,高效,提高脚本正确率!

2.启动(java环境下):

   同级目录下放一个chromedriver.exe(选择下载一个适合自己本地chrome的驱动,不同版本下载地址参考这篇文章

3.成品展示:

产品体验:

//启动 双击启动或者命令行启动,命令行启动的话可以查看一些打印的日志,方便查找错误问题
C:\Users\Administrator\Desktop\uitest>java -jar testui.jar

 (1)点击执行,打开浏览器,消息弹框,关闭即可,后续可以去掉,先留的吧,方便定位问题

 浏览器已经打开了

 (2) 网页访问,启个本地自己的项目演示

 (3) 账号输入: 选择输入input 定位类型class ,定位值:输入,操作值输入:账号,点击执行(账号输入成功,弹框提示.确定关闭即可)

 (4) 密码输入: 选择定位方式为xpath,输入定位值:然后点击执行

 (5) 点击登录: 选择click方式,选择自己的定位类型,执行

(6) 关闭浏览器,选择chrome开关,执行即可!

 (7) 命令行也可以查看日志

 4.暂时就演示这么多, 下面把源码分享给大家,需要的拿走不用谢!

//浏览器操作类
package xiaobing.com.ui;
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.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class BaseCase {
    private static WebDriver driver = null;
    /**
     * 根据浏览器类型去初始化驱动对象(启动浏览器)
     *
     * @param browserType
     */
    public WebDriver browserInit(String browserType,String driverPath) {
        //声明驱动对象

        System.out.println("***************Chrome浏览器初始化开始**************");
        if ("firefox".equalsIgnoreCase(browserType)) {
            //firefox
            //声明火狐安装路径,用于selenium去启动火狐
            System.setProperty("webdriver.firefox.bin", "D:\\firefox\\firefox.exe");
            //声明可执行驱动的路径,用于selenium加载启动
            System.setProperty("webdriver.gecko.driver", "src/main/resources/driver/geckodriver.exe");
            //打开浏览器,启动驱动实例+浏览器实例
            driver = new FirefoxDriver();
            System.out.println("创建FirefoxDriver对象成功");
            return driver;
        } else if ("chrome".equalsIgnoreCase(browserType)) {
            //chrome
            System.setProperty("webdriver.chrome.driver", driverPath);
            driver = new ChromeDriver();
            System.out.println("创建ChromeDriver对象成功");
            return driver;
        } else if ("ie".equalsIgnoreCase(browserType)) {
            //ie
            System.setProperty("webdriver.ie.driver", "src/main/resources/driver/IEDriverServer.exe");
            //创建Capabilities对象
            DesiredCapabilities capabilities = new DesiredCapabilities();
            //浏览器安全模式保持一致
            capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
            //浏览器缩放比例保持正常
            capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
            driver = new InternetExplorerDriver(capabilities);
            System.out.println("创建InternetExplorerDriver对象成功");
            return driver;
        }
        return driver;

    }
    public static WebElement getElement(String type, String byType,String byValue) {
        By by = null;
        if ("id".equalsIgnoreCase(byType)) {
            by = By.id(byValue);
        } else if ("name".equalsIgnoreCase(byType)) {
            by = By.name(byValue);
        } else if ("class".equalsIgnoreCase(byType)) {
            by = By.className(byValue);
        } else if ("tagname".equalsIgnoreCase(byType)) {
            by = By.tagName(byValue);
        } else if ("linktext".equalsIgnoreCase(byType)) {
            by = By.linkText(byValue);
        } else if ("partiallinktext".equalsIgnoreCase(byType)) {
            by = By.partialLinkText(byValue);
        } else if ("cssselector".equalsIgnoreCase(byType)) {
            by = By.cssSelector(byValue);
        } else if ("xpath".equalsIgnoreCase(byType)) {
            by = By.xpath(byValue);
        } else {
            String tips = "sorry,请重新选择,暂不支持【" + byType + "】定位方式";
            System.out.println(tips);
        }

        WebElement webElement = null;
        try {
            WebDriverWait wait = new WebDriverWait(driver, 10);
            webElement = wait.until(ExpectedConditions.visibilityOfElementLocated(by));
            //记录下当前定位元素,便于查看元素无法操作抛出的问题
            return webElement;
        } catch (Exception e) {
            String tips = "【定位元素失败,请检查】【" + type + "】【" + byType + " : " + byValue + "】";
            System.out.println(tips);

        }
        return webElement;
    }
    /**
     * 关闭浏览器
     *
     * @param driver
     * @throws InterruptedException
     */
    public void browserDown(WebDriver driver) {
        //关闭浏览器,关闭可执行驱动
        driver.quit();
        System.out.println("***************测试场景执行结束**************");
    }
}

工具类:

package xiaobing.com.ui;

import org.openqa.selenium.WebDriver;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestUiElement {
    public static void main(String[] args) {
        new xiaobing.com.ui.Window2().setVisible(true);
    }
}

class Window2 extends JFrame {
    static private JTextField value1;
    static private JTextField value2;
    static private String type = "click";
    static private String by = "id,class,name";
    static private JPanel panel;
    static private JComboBox jcbox;
    static private JComboBox byTypejcbox;
    static private WebDriver driver = null;
    static private BaseCase baseCase = new BaseCase();
    static private boolean chromeStatus = true;


    public Window2() {
        //设置窗口属性
        super("Ui脚本调试(Chrome)");
        this.setSize(300, 250);
        this.setLayout(null);
        this.setLocation(500, 500);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        panel = new JPanel();

        // 创建 JLabel
        JLabel phoneLabel = new JLabel("操作值:");
        /* 这个方法定义了组件的位置。
         * setBounds(x, y, width, height)
         * x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。
         */
        phoneLabel.setBounds(10, 20, 80, 25);
//        panel.setLayout(new GridLayout(0,1));
        panel.add(phoneLabel);

        /*
         * 创建文本域用于用户输入
         */
        value1 = new JTextField(20);
        value1.setBounds(100, 20, 165, 25);
        panel.add(value1);

        // 输入Channel的文本域
        JLabel channelLabel = new JLabel("调试值:");
        channelLabel.setBounds(20, 50, 10, 25);
        panel.add(channelLabel);


        //输入的信息会以点号代替,密码的安全性
//        channelText = new JPasswordField(20);
        value2 = new JTextField(20);
        value2.setBounds(100, 50, 30, 25);
        panel.add(value2);


        JLabel choiceLabel = new JLabel("请选择:");
        choiceLabel.setBounds(20, 50, 30, 25);
        panel.add(choiceLabel);

        //下拉框---操作
        String[] behavior = new String[]{"open", "click", "input", "chrome开关"};
        jcbox = new JComboBox(behavior);
        jcbox.setBounds(50, 50, 600, 30);

        panel.add(jcbox);

        //下拉框---渠道
        String[] byType = new String[]{"id", "xpath", "name", "class", "tagname", "linktext", "partiallinktext", "cssselector"};
        byTypejcbox = new JComboBox(byType);
        byTypejcbox.setBounds(50, 50, 30, 30);
        panel.add(byTypejcbox);


        //渠道--下拉选触发事件
        byTypejcbox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                by = (String) byTypejcbox.getSelectedItem();
                System.out.println(by + "被选中2222");
            }
        });

        //操作--下拉选触发事件
        jcbox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                type = (String) jcbox.getSelectedItem();
                System.out.println(type + "被选中");
                if (type.equalsIgnoreCase("chrome开关")) {
                    //打开浏览器赋值驱动路径
                    value1.setText(System.getProperty("user.dir") + "\\chromedriver.exe");
                }

            }
        });

        // 创建执行按钮
        JButton button = new JButton("执行");
        button.setBounds(30, 80, 80, 25);
        panel.add(button);

        //添加面板
        setContentPane(panel);

        //按钮触发事件
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String result = "";
                try {
                    if (type.equalsIgnoreCase("chrome开关")) {
                        if (chromeStatus) {
                            //浏览器初始化
                            driver = baseCase.browserInit("chrome", value1.getText());
                            chromeStatus = false;
                            result = "【chrome】初始化,【" + value1.getText() + "】";
                        } else {
                            baseCase.browserDown(driver);
                            chromeStatus = true;
                            result = "【chrome】关闭";
                        }
                    }
                    if (type.equalsIgnoreCase("open")) {
                        driver.get(value1.getText());
                        result = type + "【" + value1.getText() + "】";
                    }
                    if (type.equalsIgnoreCase("click")) {
                        baseCase.getElement(type, by, value2.getText()).click();
                        result = "【" + type + "】【" + by + "】【" + value2.getText() + "】";
                    }
                    if (type.equalsIgnoreCase("input")) {
                        baseCase.getElement(type, by, value2.getText()).sendKeys(value1.getText());
                        result = "【" + type + "】【" + by + "】【" + value2.getText() + "】【" + value1.getText() + "】";
                    }
                } catch (Exception ee) {
                    result = ee.getMessage();
                }
                System.out.println(result);
                JOptionPane.showMessageDialog(null, result);
            }
        });
    }
}

5.源码奉上,自己原创,亲测!需要的大家一起交流,打包请自行百度,需要现成的jar包请留言联系!

 

标签:String,driver,System,equalsIgnoreCase,WebUi,自动化,new,type,调试
来源: https://www.cnblogs.com/xiaozhaoboke/p/16388520.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有