基于appium的python脚本修改器

2 篇文章 0 订阅

我们在编写python中发现,脚本根据版本、项目都需要频繁的修改,要打开脚本很麻烦。所以根据需要,我写了一个修改器,可以直接打开脚本修改,可以打开appium、直接运行脚本。

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.CharArrayWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JFileChooser;
import javax.swing.JLayeredPane;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;

import java.awt.Component;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.ScrollPane;

public class e {

	private JFrame frmPython;
	private JTextField textField_choose;
	private JTextField textField_version;
	private JTextField textField_name;
	private JTextField textField;
	private JTextField jTextField;
	private static JButton btnNewButton_write = null;
	private JTextArea textArea;
	private String mTotalContent;// 文件内容
	private File mDestFile;// 目标文件
	int ROM;// 鼠标指定行数
	String sum;// 原来的行内容
	Component p = null;//提示框的弹出的参数

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					e window = new e();
					window.frmPython.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/* 这个是调用选择脚本路径,供其他位置调用此路径,如 */
	private String getScriptFilePath() {
		return textField_choose.getText().toString();
	}

	private String getScriptVersion() {
		return textField_version.getText().toString();
	}

	private String getScriptName() {
		return textField_name.getText().toString();
	}
	
	//把line的内容输入到文本框显示
			private void showContent(String msg) {
				textArea.setText(msg);
			}

	/**
	 * Create the application.
	 */
	public e() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {

		frmPython = new JFrame();
		frmPython
				.setTitle("python\u811A\u672C\u4FEE\u6539\u5668--\u9093\u76DB\u8A89");
		frmPython.setBounds(100, 100, 514, 407);
		frmPython.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		/* 主页框 */
		JLayeredPane layeredPane = new JLayeredPane();
		frmPython.getContentPane().add(layeredPane, BorderLayout.CENTER);

		/* 按钮类 */
		// 启动appium按钮
		JButton btnNewButton_starappium = new JButton("\u542F\u52A8appium");
		btnNewButton_starappium.setBounds(1, 0, 93, 23);
		layeredPane.add(btnNewButton_starappium);
		// 按钮实现
		btnNewButton_starappium.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					Runtime.getRuntime().exec("C:\\Users\\Administrator\\Desktop\\Appium.exe");
					// Runtime.getRuntime().exec("C:/Windows/System32/cmd.exe /c calc ");
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					// e1.printStackTrace();
					System.out.println("Error exec!");
				}

			}
		});
		// 关闭appium
		JButton btnNewButton_killappium = new JButton("\u5173\u95EDappium");
		btnNewButton_killappium.setBounds(1, 37, 93, 23);
		layeredPane.add(btnNewButton_killappium);
		// 按钮实现
		btnNewButton_killappium.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					String cmd = "cmd /c " + "reboot";
					Runtime rt = Runtime.getRuntime(); // 获取运行时系统
					Process proc = rt.exec(cmd); // 执行命令

				} catch (Throwable t) {
					t.printStackTrace();
				}

			}
		});

		// 连接终端按钮
		JButton btnNewButton_connect = new JButton("\u8FDE\u63A5\u7EC8\u7AEF");
		btnNewButton_connect.setBounds(10, 151, 93, 23);
		layeredPane.add(btnNewButton_connect);
		// 按钮实现
		btnNewButton_connect.addActionListener(new ActionListener() {
			@SuppressWarnings("resource")
			public void actionPerformed(ActionEvent e) {
				Process process1 = null;
				Process process2 = null;
				try {

					process1 = Runtime.getRuntime().exec("adb devices");
					process2 = Runtime.getRuntime().exec(
							"adb shell getprop ro.build.version.release");// 这个直接出5.1.1

					try {
						process1.waitFor();
						process2.waitFor();
					} catch (InterruptedException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

				InputStreamReader isr1 = new InputStreamReader(process1.getInputStream());
				InputStreamReader isr2 = new InputStreamReader(process2.getInputStream());

				Scanner sc1 = new Scanner(isr1);
				Scanner sc2 = new Scanner(isr2);
				// while(sc.hasNext()){
				// 获取name
				String name1 = sc1.next();// 得到的结果List,不需要
				System.out.println(name1);
				String name2 = sc1.next();// 得到的结果of,不需要
				System.out.println(name2);
				String name3 = sc1.next();// 得到的结果devices,不需要
				System.out.println(name3);
				String name4 = sc1.next();// 得到的结果attached,不需要
				System.out.println(name4);
				String name = sc1.next();// 获取第5行终端name,如GH880
				System.out.println(name);
				// 获取textField_version
				String version = sc2.next();// 获取version。如:5.1.1,若是过长取5.1.1即可
				System.out.println(version);

				// }
				// 把获取终端的name放入到文本框中显示,GH880
				// textField_name.setText("");
				textField_name.setText(name);
				String strPath1 = name;
				System.out.println(strPath1);
				// 把获取终端的version放入到文本框中显示,5.1.1
				// textField_version.setText("");
				// textField_version.setText(version.substring(25));//version.substring(25)是获取第26行开始(前面25位),如:5.1.1
				textField_version.setText(version);
				String strPath2 = version;
				System.out.println(strPath2);

			}
		});

		// 选择脚本文件按钮
		JButton btnNewButton_choose = new JButton("\u9009\u62E9\u811A\u672C");
		btnNewButton_choose.setBounds(113, 10, 90, 23);
		layeredPane.add(btnNewButton_choose);
		// 按钮实现
		btnNewButton_choose.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				JFileChooser jChooser = new JFileChooser();
				jChooser.setDialogTitle("请选择测试脚本");
				int returnVal = jChooser.showOpenDialog(null);
				java.io.File file = jChooser.getSelectedFile();
				if (JFileChooser.APPROVE_OPTION == returnVal) {
					// 需要传入的参数
					textField_choose.setText(file.getAbsolutePath());
					String strPath = file.getAbsolutePath();
					System.out.println("文件路径:" + strPath);
				}
			}
		});

		// 读取脚本文件按钮
		final JButton btnNewButton_read = new JButton("\u8BFB\u53D6\u811A\u672C");
		btnNewButton_read.setBounds(1, 336, 93, 23);
		layeredPane.add(btnNewButton_read);
		
		/*
		 * final String prefixStart = "[DUT1 Cable Loss Mapping]";// 从[DUT1
		 * Cable Loss Mapping]开始 final String prefixEnd =
		 * "[DUT1 Tas Cable Loss Mapping]";// 到[DUT1 TasCable Loss Mapping]结束
		 */
		// 按读取按钮实现功能
		btnNewButton_read.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
					
					// 读取文件路径
					String strpath = textField_choose.getText();		
					System.out.println("strpath22" + strpath);
					String res = readFile(strpath);// 读取文本中全部路径
					System.out.println("res:" + res);

					textArea.setText(res);// 把内容显示到大显示框中
				
				

				/*mTotalContent = res;// 存入
				System.out.println("bb:" + mDestFile);
				mDestFile = new File(strpath);// 获取文件路径
				System.out.println("33:" + mDestFile);*/

			}
		});

		// 修改配置文件按钮
		JButton btnNewButton_modifiy = new JButton("\u4FEE\u6539\u914D\u7F6E");
		btnNewButton_modifiy.setBounds(170, 336, 91, 23);
		layeredPane.add(btnNewButton_modifiy);
		// 按钮实现
		
		btnNewButton_modifiy.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String path = getScriptFilePath();
				System.out.println("path日:" + path);
				String version = getScriptVersion();
				System.out.println("version日:" + version);
				String name = getScriptName();
				System.out.println("name日:" + name);
				
				try {
					
				if(version.equals("") || name.equals("")){		 
					JOptionPane.showConfirmDialog(p,"请先连接终端","配置参数为空",0);
				}else{
					  if(path.equals("")){
						 JOptionPane.showConfirmDialog(p,"请先选择可执行脚本","脚本为空",0);
				      }else{
					File file = new File(path);// 建立一个file对象,参数就是你想访问文件的路径,这里我就不验证文件是否存在了
					BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));// 查下api即可
					StringBuffer outBuf = new StringBuffer();
					String line = null;
					 while ((line =br.readLine()) != null) {
						
						System.out.println("cessssss");
//						System.out.println("read line:"+line);	//控制台输出脚本内容显示						
						
						int index = line.indexOf("platformVersion");// 看此行的是否包含platformVersion
						if (index != -1) {
							line = "desired_caps['platformVersion'] = " + "'" + version + "'";
						} 	
						
						int index1 = line.indexOf("deviceName");// 看此行的是否包含deviceName
						if (index1 != -1) {
							line = "desired_caps['deviceName'] = " + "'"+ name + "'";
						}	
						
						outBuf.append(line+"\n");
					}
					br.close();
					PrintWriter pw = new PrintWriter(file);// 建立一个输出流,把东西写入文件
					pw.write(outBuf.toString());
					
					pw.close();
				   }
				  }
					
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}

			}
		});
		// 执行配置文件按钮
		JButton btnNewButton_zhixing = new JButton("\u6267\u884C\u811A\u672C");
		btnNewButton_zhixing.setBounds(341, 37, 93, 23);
		layeredPane.add(btnNewButton_zhixing);
		btnNewButton_zhixing.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String path = getScriptFilePath();
				
				 Process process1 = null;
				  StringBuilder result = new StringBuilder();
				  BufferedReader bufrIn = null;
			      BufferedReader bufrError = null;
			      String line = null;
				// String path
				// =textField_choose.getText().toString();//可以直接这么写,但是不太好,在外部调用方法;
				try {
					
					if(path.equals("")){
						JOptionPane.showConfirmDialog(p,"请先选择可执行脚本","脚本为空",0);
					}else{
						/*判断不是.py||.bat,弹出提示*/  
						String docUrl = path;
						String[] allowTypes = new String[] { "py","bat" };
						int splitIndex = docUrl.lastIndexOf(".");
						String fileType = docUrl.substring(splitIndex + 1);//py、bat等
						/*fileType显示后缀格式*/
						System.out.println("fileType:" + fileType);
						
						if(fileType.equals("py" ) || fileType.equals("bat")){//非脚本弹出提示选择正确脚本
							//判断是python脚本还是bat脚本
						     if(fileType.equals("py")){//python脚本
						     System.out.println("这是python脚本");
						     Process process11= Runtime.getRuntime().exec("python " + path);
							// 获取命令执行结果, 有两个结果: 正常的输出 和 错误的输出(PS: 子进程的输出就是主进程的输入)
					            bufrIn = new BufferedReader(new InputStreamReader(process11.getInputStream(), "UTF-8"));
					            bufrError = new BufferedReader(new InputStreamReader(process11.getErrorStream(), "UTF-8"));
					            
					            // 读取输出
					            
					            while ((line = bufrIn.readLine()) != null) {
					                result.append(line).append('\n');
					                System.out.println("line1: "+line);
					            }
					            
					            StringBuffer outputBuf = new StringBuffer();
					            
					            while ((line = bufrError.readLine()) != null) {
					                result.append(line).append('\n');
					                System.out.println("line2: "+line);
					                String bc = line; 
					                
					                outputBuf.append(line);
					                outputBuf.append("\n");
					            }
					            
					            showContent(outputBuf.toString());
						     }
	                         if(fileType.equals("bat")){//bat脚本
	                        	 System.out.println("这是bat脚本");
//						      Runtime.getRuntime().exec(path); 
	                        	// 执行ping命令
	                        	 Process process = Runtime.getRuntime().exec("cmd.exe   /C   start  "+path);
	                             BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.forName("UTF-8")));
	                             String line1 = null;
	                             while ((line1 = br.readLine()) != null) {
	                                 System.out.println(line1);
	                             }

						      }
							
						}else{
							JOptionPane.showConfirmDialog(p,"请先选择.py或.bat脚本文件","错误脚本",0);	
						}
					 }
				} catch (Exception e2) {
					// TODO: handle exception
				}

				
				


			}


		});

		// 清空按钮
		JButton btnNewButton_settingNull = new JButton("\u6E05\u7A7A");
		btnNewButton_settingNull.setBounds(110, 151, 93, 23);
		layeredPane.add(btnNewButton_settingNull);
		btnNewButton_settingNull.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				textField_version.setText("");
				textField_name.setText("");
			}
		});

		/* 文本框 */
		// 选择文件框
		textField_choose = new JTextField();
		textField_choose.setBounds(213, 11, 221, 21);
		layeredPane.add(textField_choose);
		textField_choose.setColumns(10);
		// 终端Version文本框
		textField_version = new JTextField();
		textField_version.setBounds(107, 89, 66, 21);
		layeredPane.add(textField_version);
		textField_version.setColumns(10);
		// 终端name文本框
		textField_name = new JTextField();
		textField_name.setBounds(107, 120, 66, 21);
		layeredPane.add(textField_name);
		textField_name.setColumns(10);

		/* 名称显示类 */
		// 终端Version:
		JLabel lblNewLabel = new JLabel("\u7EC8\u7AEFVersion:");
		lblNewLabel.setBounds(10, 88, 84, 23);
		layeredPane.add(lblNewLabel);
		// 终端Name:
		JLabel lblNewLabel_1 = new JLabel("\u7EC8\u7AEFName:");
		lblNewLabel_1.setBounds(10, 123, 72, 15);
		layeredPane.add(lblNewLabel_1);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(1, 176, 260, 150);
		layeredPane.add(scrollPane);

		textArea = new JTextArea();
		scrollPane.setViewportView(textArea);

	}
	

	/*
	 * *读取CFG文件方法
	 */
	@SuppressWarnings("resource")
	public String readFile(String strpath) {
		System.out.println("readFile:" + strpath);
		String res = null;
		StringBuilder sb = new StringBuilder();
		int n = 0;
		try {
			File file = new File(strpath);
			InputStreamReader br = new InputStreamReader(new FileInputStream(file), "UTF-8");
			BufferedReader reader = new BufferedReader(br);
			String str;
			while ((str = reader.readLine()) != null) {
				System.out.println("readFiledddd:" + strpath);
				sb.append(str + "\n");
				System.out.println("55:" + str);
				n += 1;
				System.out.println("44:" + n);
				

			}
			res = sb.toString();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return res;
	}

	private StringBuffer sb = new StringBuffer();

	/*
	 * 实现写入文件方法
	 */
	private void writeFile(File file, String content) {
		if (file == null || content == null) {
			return;
		}
		try {
			BufferedWriter writer = new BufferedWriter(new FileWriter(file));
			writer.write(content);
			writer.flush();
			writer.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	

	  


	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试狂人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值