有没有办法在测试脚本中获取Appium服务器日志
driver.manage().logs().get("appium server");
或将appium服务器日志重定向到控制台我的主要目的是只获取检测日志,而不是所有日志
info: [debug] [INST] instrument logs
tuwxkamq1#
@基里尔·朱可夫如是说。您还可以使用-G或--webhook标记将日志输出发送到HTTP侦听器,如下所示:--webhook localhost:9876.如果您使用UI,则必须启用此日志到webhook
-G
--webhook
--webhook localhost:9876
我已经创建了一个简单的套接字服务器来监听日志,它工作得很好。使用这个服务器可以根据您的需要获取日志。下面的代码将在控制台中打印日志
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; public class Server extends Thread { private static ServerSocket socket; private static String home = "./"; private static int port = 9876; private static boolean isAlive = true; private static final Server server = new Server(); public static Server getServer(String[] args) { if (args.length == 2) { home = args[1]; } port = Integer.parseInt(args[0]); return server; } private Server() { } public static Server getServer() { return server; } @Override public void run() { try { if (socket != null) { if (!socket.isClosed()) { if (port == getPort()) { System.err.println("Server active at the Same Port! "); } else { close(); } } } socket = new ServerSocket(port); port = socket.getLocalPort(); System.out.println("Server accepting connections on port :" + port); socket.setReceiveBufferSize(146988); handlleRequest(); } catch (IOException e) { System.err.println("Could not start server: " + e.getMessage()); port = 0; run(); } } public int getPort() { return socket == null ? 0 : port; } public String getPortS() { return String.valueOf(port); } public void Stop() { isAlive = false; } public void handlleRequest() { while (isAlive) { System.out.println("Test"); try (Socket connection = socket.accept()) { display(connection); } catch (IOException e) { System.err.println(e); } } } public void display(Socket connection) { try (BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { String line = in.readLine(); while (in.ready() && line != null) { System.out.println(line); line = in.readLine(); } } catch (IOException ex) { Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex); } } public void close() throws IOException { if (socket != null && !socket.isClosed()) { isAlive = false; socket.close(); } } public static void main(String[] args) { args = new String[]{"9876", "./"}; Server f = Server.getServer(args); f.start(); } }
62lalag42#
来自正式文件:
-g
--log
[INST]
--log-timestamp
false
p4rjhz4m3#
只是编写一个可能的解决方案,而没有我们手头使用的代码,请注意,这是我们在Windows机器上运行的节点上所做的,但它可能也适用于Appium。该驱动程序扩展自RemoteWebDriver,后者具有可重写的日志方法(不记得名字了)。您可以扩展IOSDriver类并覆盖那个日志方法,以便可以使用您喜欢的日志库在任何您想要的地方进行日志记录。
hivapdat4#
还有一个选项,你可以从编辑器启动appium服务器。编写一个自定义函数,从你的测试启动和停止服务器。当这样做的时候,你可以在控制台中看到服务器日志-在运行时。和测试完成后。日志可以被捕获,并从编辑器转换为任何其他格式。附加:如果您通过Jenkins安排CI/CD,日志也将是报告的一部分。请参阅下面的代码自动启动appiumserver:公共void启动新应用服务器(){
AppiumDriverLocalService service = new AppiumServiceBuilder() .withAppiumJS(new File( "C:\\Users\\John\\AppData\\Roaming\\npm\\node_modules\\appium\\build\\lib\\main.js")) .withIPAddress("127.0.0.1").usingPort(4723).build(); this.service = service; service.start(); }
4条答案
按热度按时间tuwxkamq1#
@基里尔·朱可夫如是说。
您还可以使用
-G
或--webhook
标记将日志输出发送到HTTP侦听器,如下所示:--webhook localhost:9876
.如果您使用UI,则必须启用此日志到webhook
我已经创建了一个简单的套接字服务器来监听日志,它工作得很好。使用这个服务器可以根据您的需要获取日志。下面的代码将在控制台中打印日志
62lalag42#
来自正式文件:
-g
或--log
指定要存储日志的文件路径,然后可能通过[INST]
过滤它?-G
或--webhook
标记将日志输出发送到HTTP侦听器,如下所示:虽然我不知道它是如何工作的,但我想知道!--log-timestamp
,它打开了时间戳(默认情况下是false
)。我建议启用它:)p4rjhz4m3#
只是编写一个可能的解决方案,而没有我们手头使用的代码,请注意,这是我们在Windows机器上运行的节点上所做的,但它可能也适用于Appium。该驱动程序扩展自RemoteWebDriver,后者具有可重写的日志方法(不记得名字了)。您可以扩展IOSDriver类并覆盖那个日志方法,以便可以使用您喜欢的日志库在任何您想要的地方进行日志记录。
hivapdat4#
还有一个选项,你可以从编辑器启动appium服务器。编写一个自定义函数,从你的测试启动和停止服务器。当这样做的时候,你可以在控制台中看到服务器日志-在运行时。和测试完成后。日志可以被捕获,并从编辑器转换为任何其他格式。
附加:如果您通过Jenkins安排CI/CD,日志也将是报告的一部分。
请参阅下面的代码自动启动appiumserver:公共void启动新应用服务器(){