airtest poco 使用代码编写实例

文章介绍了如何使用Airtest库进行Windows、Android和iOS的自动化测试,包括使用AirtestIDE和Poco编写代码示例,重点展示了如何连接设备、查找元素、滑动页面以及抓取详情页信息。
摘要由CSDN通过智能技术生成
  1. 简单介绍:airtest是用来模拟操作windos, android, ios机器进行自动化测试或者爬取数据,个人使用觉得还是蛮简单易用的,比appnium好用很多;
  2. 官方文档airtest
  3. 提示 刚开始学习还是简易使用Airtest IDE进行上手操作,然后再使用poco进行代码编写
  4. 实例代码:
from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
from loguru import logger



class ScrapeFive(object):
    '''
    airtest 测试代码用例,后续可以依据这个进行改写
    '''
    def __init__(self, packgage_name, device_ip=None, total_number=100, **kwargs):
        self.device_ip = device_ip
        self.PACKAGE_NAME = packgage_name
        self.TOTAL_NUMBER = total_number
        self.scraed_titles = []
        self.spare_dict = kwargs
        self.connect_device()

    def connect_device(self):
        '''
        链接设备
        :return:
        '''
        # 具体链接文档 https://airtest.doc.io.netease.com/IDEdocs/airtest_framework/2_connect_device/
        if self.device_ip:
            #远程链接, 打开手机usb调试,打开远程调试
            auto_setup(devices=[f'Android://127.0.0.1:5037/{self.device_ip}'])
            dev = set_current(self.device_ip)
        else:
            # usb机器链接,usb线路链接,然后打开手机usb调试
            auto_setup(devices=[f'Android:///'])
            dev = None
        self.poco = AndroidUiautomationPoco(device=dev, use_airtest_input=True, screenshot_each_action=False)
        self.window_width, self.window_height = self.poco.get_screen_size()
        stop_app(self.PACKAGE_NAME)
        start_app(self.PACKAGE_NAME)

    def scrape_index(self):
        '''
        查找元素
        :return:
        '''
        elements = self.poco(f'{self.PACKAGE_NAME}:id/item')
        elements.wait_for_appearance()
        return elements

    def scroll_up(self):
        '''
        滑动页面
        :return:
        '''
        swipe((self.window_width*0.5, self.window_height*0.8), vector=[0, -1], duration=2)

    def scrape_detail(self, element):
        '''
        详情页获取具体信息
        :param element:页面元素对象
        :return:具体获取的信息
        '''
        element.click()
        panel = self.poco(f'{self.PACKAGE_NAME}:id/content')
        panel.wait_for_appearance()
        title = self.poco(f'{self.PACKAGE_NAME}:id/title').attr('text')
        categories = self.poco(f'{self.PACKAGE_NAME}:id/categories_value').attr('text')
        score = self.poco(f'{self.PACKAGE_NAME}:id/score_value').attr('text')
        published_at = self.poco(f'{self.PACKAGE_NAME}:id/published_at_value').attr('text')
        drama = self.poco(f'{self.PACKAGE_NAME}:id/drama_value').attr('text')
        keyevent('BACK')
        return {
            'title': title,
            'categories': categories,
            'score': score,
            'published_at': published_at,
            'drama': drama
        }

    def main(self):
        while len(self.scraed_titles) < self.TOTAL_NUMBER:
            elements = self.scrape_index()
            for element in elements:
                element_title = element.offspring(f'{self.PACKAGE_NAME}:id/tv_title')
                if not element_title.exists():
                    continue
                title = element_title.attr('text')
                logger.debug(f'get title{title}')
                if title in self.scraed_titles:
                    continue
                _, element_y = element.get_position()
                if element_y > 0.8:
                    self.scroll_up()
                element_data = self.scrape_detail(element)
                logger.debug(f'scraped data {element_data}')
                self.scraed_titles.append(title)


if __name__ == '__main__':
    packgage_name = 'com.goldze.mvvmhabit'
    # 远程链接
    device_ip = '127.0.0.1:5555'            #自己需要查询手机或者模拟器的ip, #远程链接, 打开手机usb调试,打开远程调试
    # usb本机调试
    device_ip = None                    #usb机器链接,usb线路链接,然后打开手机usb调试
    ScrapeFive(packgage_name, device_ip)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值