如何使用appium-python获取logcat?

时间:2019-04-10 13:31:41

标签: python appium

我计划将python与Appium一起用于移动应用程序测试自动化。一种要求是在运行测试时收集ADB日志。我可以找到一些相同的代码,但是使用Java。

List<LogEntry> logEntries = driver.manage().logs().get("logcat").getAll();

Python驱动程序似乎不支持manage()

在哪里可以找到Appium驱动程序不同语言之间的功能差异?我真的很想使用python,但是如果缺少许多功能,我将不得不使用Java或C#。

谢谢, GKL

1 个答案:

答案 0 :(得分:3)

虽然Appium没有提供通过Python执行此操作的方法,但是您可以使用以下函数以异步高效的方式通过Python访问Logcat :(基于{{3} })

import Queue
import subprocess
import threading


class AsynchronousFileReader(threading.Thread):
    '''
    Helper class to implement asynchronous reading of a file
    in a separate thread. Pushes read lines on a queue to
    be consumed in another thread.
    '''

    def __init__(self, fd, queue):
        assert isinstance(queue, Queue.Queue)
        assert callable(fd.readline)
        threading.Thread.__init__(self)
        self._fd = fd
        self._queue = queue

    def run(self):
        '''The body of the tread: read lines and put them on the queue.'''
        for line in iter(self._fd.readline, ''):
            self._queue.put(line)

    def eof(self):
        '''Check whether there is no more content to expect.'''
        return not self.is_alive() and self._queue.empty()


# You'll need to add any command line arguments here.
process = subprocess.Popen(["logcat"], stdout=subprocess.PIPE)

# Launch the asynchronous readers of the process' stdout.
stdout_queue = Queue.Queue()
stdout_reader = AsynchronousFileReader(process.stdout, stdout_queue)
stdout_reader.start()

# Check the queues if we received some output (until there is nothing more to get).
while not stdout_reader.eof():
    while not stdout_queue.empty():
        line = stdout_queue.get()
        if is_fps_line(line):
            update_fps(line)
  

ofc,您需要自己编写is_fps_lineupdate_fps函数

  • 该脚本假定您可以从任何位置运行logcat命令,或者与脚本位于同一目录,如果不是这种情况,则需要提供logcat (e.g. "C:\...\logcat")的完整路径,以代替subprocess.Popen(["logcat"]...