我们在编写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();
}
}
}