【Appium】使用模拟器实现有道云App的新增笔记

该博客详细介绍了如何使用Appium进行自动化测试,特别是针对有道云笔记应用的新增笔记功能。首先,展示了基础版本(v1.0)的实现,包括设置智能等待,点击各个UI元素来新增笔记。接着,升级到v2.0版本,引入CSV文件读取,将笔记的标题和内容作为测试数据,提高了测试的灵活性和可维护性。整个过程涵盖了自动化测试的基本步骤和数据驱动测试的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 🍓学习目标:通过有道云项目的实践来熟悉appium的使用
  • 💘如有不足,还望指出
  • 💞若觉不错,希望不吝小手点赞关注支持一波

目录

一、新增笔记-使用常量v1.0

二、新增笔记-文件读取v2.0


一、新增笔记-使用常量v1.0

在初始化方法中添加driver.implicitly_wait(10)智能等待,在元素没有刷新出来之前,最大等待10s。然后手动新增一次笔记,定位新增时点击的元素坐标,具体代码如下:

# v1.0实现新增笔记测试
# 导入Appium类库
from appium.webdriver.webdriver import WebDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
import time


class yd_addnote:
    # 使用初始化方法设置测试参数
    def __init__(self):
        self.caps = {
            'automationName': 'UiAutomator2',
            'platformName': 'Android',
            'platformVersion': '6.0',
            'deviceName': '192.168.23.101:5555',
            'appPackage': 'com.youdao.note',
            'appActivity': '.activity2.MainActivity'}
        self.driver = WebDriver('http://127.0.0.1:4723/wd/hub', self.caps)
        self.driver.implicitly_wait(10)

    # 进行新增笔记的测试
    def test_addnote(self):
        el = WebDriverWait(self.driver, 10).until(lambda x: x.find_element(By.ID, 'com.android.packageinstaller:id/permission_allow_button'))
        if el:
            # 点击同意
            self.driver.find_element(By.ID, 'com.android.packageinstaller:id/permission_allow_button').click()
            # 点击+号
            self.driver.find_element(By.ID, 'com.youdao.note:id/add_note').click()
            # 点击新建笔记
            self.driver.find_element(By.ID, 'com.youdao.note:id/add_note_floater_add_note').click()
            # 点击取消
            self.driver.find_element(By.ID, 'com.youdao.note:id/btn_cancel').click()
            # 输入内容
            self.driver.find_element(By.XPATH, '//*[@resource-id="com.youdao.note:id/note_content"]/android.widget.EditText').send_keys('testcontext1234')
            # 输入标题
            self.driver.find_element(By.ID, 'com.youdao.note:id/note_title').send_keys('testtitle')
            # 点击完成
            self.driver.find_element(By.ID, 'com.youdao.note:id/actionbar_complete_text').click()

    def check_addnote(self):
        real_title = self.driver.find_element(By.ID, 'com.youdao.note:id/title').text
        print(real_title)


if __name__ == '__main__':
    yd_addnote_obj = yd_addnote()
    yd_addnote_obj.test_addnote()
    yd_addnote_obj.check_addnote()

二、新增笔记-文件读取v2.0

将需要新增的标题和内容写入csv文件,通过读取csv文件来新增笔记。重写父类的方法,加入参数title 和 content。

csv文件准备如下:

代码如下:

# v2.0从文件中读取测试数据进行新增笔记的测试
# 导入Appium类库
import csv
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from AppiumTest.YouDaoYun.work2_addnote import yd_addnote
from appium.webdriver.webdriver import WebDriver


class yd_addnoteV2(yd_addnote):
    def test_addnote(self, title, content):
        el = WebDriverWait(self.driver, 10).until(
            lambda x: x.find_element(By.ID, 'com.android.packageinstaller:id/permission_allow_button'))
        if el:
            # 点击同意
            self.driver.find_element(By.ID, 'com.android.packageinstaller:id/permission_allow_button').click()
            # 点击+号
            self.driver.find_element(By.ID, 'com.youdao.note:id/add_note').click()
            # 点击新建笔记
            self.driver.find_element(By.ID, 'com.youdao.note:id/add_note_floater_add_note').click()
            # 点击取消
            self.driver.find_element(By.ID, 'com.youdao.note:id/btn_cancel').click()
            # 输入内容
            self.driver.find_element(By.XPATH, '//*[@resource-id="com.youdao.note:id/note_content"]/android.widget.EditText').send_keys(content)
            # 输入标题
            self.driver.find_element(By.ID, 'com.youdao.note:id/note_title').send_keys(title)
            # 点击完成
            self.driver.find_element(By.ID, 'com.youdao.note:id/actionbar_complete_text').click()

    def check_addnote(self, title):
        real_title = self.driver.find_element(By.ID, 'com.youdao.note:id/title').text
        if real_title == title:
            return 1
        else:
            return 0


if __name__ == '__main__':
    # 打开csv文件
    file1 = open('addnotedata.csv', 'r')
    file2 = open('addnoteresult.csv', 'w', newline='')
    table = csv.reader(file1)
    writer = csv.writer(file2)
    for rows in table:
        title = rows[0]
        content = rows[1]
        # 实例化对象
        yd_addnote_obj2 = yd_addnoteV2()
        # 调用新增笔记测试方法
        yd_addnote_obj2.test_addnote(title, content)
        # 检查新增是否正确
        result = yd_addnote_obj2.check_addnote(title)
        if result:
            rows.append('测试通过')
            writer.writerow(rows)
        else:
            rows.append('测试失败')
            writer.writerow(rows)
    file1.close()
    file2.close()
资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 HttpServletRequestWrapper 是 Java Servlet API 中的一个工具类,位于 javax.servlet.http 包中,用于对 HttpServletRequest 对象进行封装,从而在 Web 应用中实现对 HTTP 请求的拦截、修改或增强等功能。通过继承该类并覆盖相关方法,开发者可以轻松地自定义请求处理逻辑,例如修改请求参数、添加请求头、记录日志等。 参数过滤:在请求到达处理器之前,可以对请求参数进行检查或修改,例如去除 URL 编码、过滤敏感信息或进行安全检查。 请求头操作:可以修改或添加请求头,比如设置自定义的 Content-Type 或添加认证信息。 请求属性扩展:在原始请求的基础上添加自定义属性,供后续处理使用。 日志记录:在处理请求前记录请求信息,如 URL、参数、请求头等,便于调试和监控。 跨域支持:通过添加 CORS 相关的响应头,允许来自不同源的请求。 HttpServletRequestWrapper 通过继承 HttpServletRequest 接口并重写其方法来实现功能。开发者可以在重写的方法中添加自定义逻辑,例如在获取参数时进行过滤,或在读取请求体时进行解密。当调用这些方法时,实际上是调用了包装器中的方法,从而实现了对原始请求的修改或增强。 以下是一个简单的示例,展示如何创建一个用于过滤请求参数的包装器: 在 doFilter 方法中,可以使用 CustomRequestWrapper 包装原始请求: 这样,每当调用 getParameterValues 方法时,都会先经过自定义的过滤逻辑。 HttpServletRequestWrapper 是 Java Web 开发中一个强大的工具,它提供了灵活的扩展性,允许开发者
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BetterFate!

爱你哦!

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

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

打赏作者

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

抵扣说明:

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

余额充值