【Appium】手机app上toast对象的定位及如何抓取

前言:当在app上点了一个操作之后,一般都会有一个toast弹出来提示你当前操作信息,但是toast停留时间一般都很短,很难直接定位,那该如何去抓取呢?本文提供三种方法。

目录

🍀方法一、抓屏

🍀方法二、通过Xpath定位(提供两种方法)

🌺项目实践


比如我们要抓如下类似的toast,在点击完成之后,会跳出一个"保存成功"的toast,但是它的停留时间都不足1秒,所以没有办法去定位元素。

🍀方法一、抓屏

因为toast停留时间太短,通过元素去抓取的成功率很低,所以抓屏就是最稳妥的方法了,代码很简单,一句话就行了:driver.get_screenshot_as_file('图片名.png')

代码如下:
注意:因为我的toast弹出的较慢,所以加上了一点点的等待时间,正常是不需要的。

    def test_toast(self):
        # 1、抓取截图方法
        time.sleep(0.5)  # 弹窗跳的有点慢,不加等待时间会抓不到弹窗
        self.driver.get_screenshot_as_file('toast.png')

🍀方法二、通过Xpath定位(提供两种方法)

通过观察toast上有文字"保存成功" 所以我们可以通过xpath中包含text文本的方式去抓取到toast。

Xpath编写(By.XPATH, "//*[@text= '保存成功']")

注意:

1、如果toast内容是中文,要在脚本开头声明 # coding=utf-8 否则会不支持。

提供两种关于WebDriverWait的抓取方法,亲测都能有效输出toast内容

第一种:

# coding=utf-8
from appium.webdriver.webdriver import WebDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time


def test_toast(self):
    # 2、显示等待方法1
    # time.sleep(0.5)
    toast_el = (By.XPATH, "//*[@text= '保存成功']")
    toast = WebDriverWait(self.driver, 5, 0.01).until(EC.presence_of_element_located(toast_el))
    print(toast.text)

第二种

# coding=utf-8
from appium.webdriver.webdriver import WebDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

def test_toast(self):
    # 3、显示等待方法2
    toast = WebDriverWait(self.driver, 5, 0.1).until(lambda x: x.find_element(By.XPATH, "//*[@text= '保存成功']"))
    print(toast.text)

🌺项目实践

举的例子是在模拟器上使用有道云app新建笔记之后点击完成跳出的toast,完整代码如下:

# coding=utf-8
from appium.webdriver.webdriver import WebDriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time


class yd_toast:
    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('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 test_toast(self):
        # 1、抓取截图方法
        # time.sleep(0.5)  # 弹窗跳的有点慢,不加等待时间会抓不到弹窗
        # self.driver.get_screenshot_as_file('toast.png')

        # 2、显示等待方法1
        # time.sleep(0.5)
        # toast_el = (By.XPATH, "//*[@text= '保存成功']")
        # toast = WebDriverWait(self.driver, 5, 0.01).until(EC.presence_of_element_located(toast_el))
        # print(toast.text)

        # 3、显示等待方法2
        toast = WebDriverWait(self.driver, 5, 0.1).until(lambda x: x.find_element(By.XPATH, "//*[@text= '保存成功']"))
        print(toast.text)


if __name__ == '__main__':
    toast_obj = yd_toast()
    toast_obj.test_addnote()
    toast_obj.test_toast()
  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在使用Appium进行手机元素定位时,我们可以借鉴Selenium Web自动化中的方法。首先,我们可以通过开发者工具栏来查看元素的特性,包括属性和位置,以帮助我们定位元素。 Appium提供了多种元素定位方法,比如通过ID、类名、XPATH、CSS选择器等来定位元素。其中,通过ID定位元素是最常见和有效的方法之一。通过给定元素的ID属性值,我们可以唯一地定位到该元素。 除了ID,我们还可以使用类名来定位元素。类名是元素的class属性值,通过该属性值,我们可以定位到具有相同类名的元素。 另外,XPATH是一种非常强大的定位方法,它可以通过元素的路径来定位元素。路径可以是绝对路径或相对路径,通过指定元素的层次关系和属性值来定位元素。 CSS选择器也是一种常用的元素定位方法,它可以通过元素的属性值和层次关系来定位元素。与XPATH类似,CSS选择器也具有灵活的定位能力。 在使用这些元素定位方法时,我们需要根据具体的应用场景和元素特征选择合适的方法进行定位。另外,为了增加定位成功率,我们还可以使用等待机制,即在定位元素之前先等待一段时间,等待元素加载完成后再进行定位操作。 总结起来,通过Appium可以使用多种元素定位方法,包括ID、类名、XPATH、CSS选择器等。在进行元素定位时,我们可以借助开发者工具栏查看元素的特性,选择合适的定位方法,并结合等待机制来提高定位成功率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Appium移动自动化测试](https://download.csdn.net/download/weixin_26851157/19709037)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Appium元素定位方法](https://blog.csdn.net/qq_36662150/article/details/122967129)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [APPium自动化常用指令](https://blog.csdn.net/weixin_45609519/article/details/106670484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BetterFate!

爱你哦!

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

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

打赏作者

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

抵扣说明:

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

余额充值