Appium python+appium 自动化测试 - 获取 toast 信息

Tin · 2021年02月01日 · 最后由 Tin 回复于 2021年02月05日 · 3258 次阅读

toast 是基于 uiautomator2,如果没有 uiautomator2 的话,需要安装,cmd 输入:

cnpm install appium-uiautomator2-driver

需要在 APP 启动设置的 capability 中额外配置下面内容:

"automationName": "UiAutomator2"

capability 的设置可以查看之前的博客:python+appium 自动化测试如何控制 App 的启动和退出:https://testerhome.com/topics/27803

封装 toast,具体代码:

# 获取toast函数封装
from selenium.webdriver.support.wait import WebDriverWait
from page.base_page import BasePage

class Toast(BasePage):
    def get_toast(self, message):
        try:
        # 需要获取到的toast
            toast_message = '//*[@text=\'{}\']'.format(message)
        # 使用xpath定位,是否能定位到需要的toast信息。
            toast_element = WebDriverWait(self.driver, 5, 0.5).until(lambda driver: self.driver.find_element_by_xpath(toast_message))
            print(toast_element.text)
            return toast_element.text
        except:
            print("没有找到这个toast!")

WebDriverWait(self.driver, 5, 0.5):5 表示查找的时间,单位:秒;0.5 表示查找的频率,单位:秒

其它函数中调用:

from common.toast import Toast
from page.base_page import BasePage

class ToastInvoke(BasePage):
        def __init__(self, driver):
        super().__init__(driver)
        self.toast = Toast(driver)

注意:由于我使用的是 PO 模式,所以将元素定位封装在 BasePage 类中,该页面使用到了元素定位,需要继承 BasePage,PO 模式具体内容请查看之前的博客:python+appium 自动化测试 Page Object 模式——微博登录代码封装:https://testerhome.com/topics/27807

测试用例执行:

class TestToast:
    def setup_class(self):
        self.content_page = AppStart.start().enter_content()

    # 获取toast测试
    def test_toast(self):
        self.content_page.toast_test()
        self.content_page.toast.get_toast("已取消收藏")

以上所有代码均以微博作为示例,toast 获取的代码使用的是微博内容收藏和取消收藏

以上内容有错误的地方,大家多多指正,谢谢!

共收到 4 条回复 时间 点赞

换个思路:
建议使用图片对比
先截图作为预置图片,用例执行时。在截取元素图片,然后断言做图片对比

Tin #2 · 2021年02月05日 Author
少年已老 回复

感谢,图片对比这个方法我还在学习中😀

没有啥要学习的,就是用库😀
思路是图片对比,实现起来,有很多方法。我用的是 PIL 这个库(from PIL import Image)

Tin #4 · 2021年02月05日 Author
少年已老 回复

好嘞,自动化初学者,还有很多地方不清楚,多多指教啦😋

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册