Appium 求助:如何捕捉太快消失的 toast?

醋精测试媛 · 2021年01月11日 · 最后由 剪烛 回复于 2021年01月13日 · 4628 次阅读

appium 捕捉 toast 只能以(By.XPATH, '//*[contains(@text,\'{}\')]'.format("发送成功"))的方式

其他的都能捕捉到,但是有一条永远不能成功,因为消失的太快了【但是还是有三秒的】,我试过了WebDriverWait(self.driver, 10, 0.01).until(lambda x: x.find_element(*(By.XPATH, '//*[contains(@text,\'{}\')]'.format("发送成功"))).text),仍然不能捕捉到,可能是 XPATH 定位慢的原因吧,不知是否有其他方法?

共收到 18 条回复 时间 点赞

用图像识别试试

会不会太麻烦了,感觉只是一个小小的校验点。

toast 消失得太快本身就是有问题的吧,用户也来不及看提示 toast 就消失了呢。 可以找对应开发修改 toast 弹出时间吧。

Quane 回复

有三秒,但是不知道为啥我捕捉不到

补充:
我在WebDriverWait(self.driver, 10, 0.01).until(lambda x: x.find_element(*(By.XPATH, '//*[contains(@text,\'{}\')]'.format("发送成功"))).text)前面截图,都是可以看到 toast 的,但是一获取不到 toast, 显示错误如下:

Traceback (most recent call last):
  File "F:\lsj\Python\lib\unittest\case.py", line 60, in testPartExecutor
    yield
  File "F:\lsj\Python\lib\unittest\case.py", line 676, in run
    self._callTestMethod(testMethod)
  File "F:\lsj\Python\lib\unittest\case.py", line 633, in _callTestMethod
    method()
  File "F:\lsj\Python\lib\site-packages\ddt.py", line 182, in wrapper
    return func(self, *args, **kwargs)
  File "C:\Users\Administrator\PycharmProjects\\common\base_case.py", line 26, in wrapper
    raise err
  File "C:\Users\Administrator\PycharmProjects\\common\base_case.py", line 21, in wrapper
    func(self, *args, **kwargs)
  File "C:\Users\Administrator\PycharmProjects\\test_cases\test_sms_login.py", line 62, in test_login_01_success
    toast = self.driver.find_element(*(By.XPATH, "//*[contains(@text,'{}')]".format(check))).text
  File "F:\lsj\Python\lib\site-packages\appium\webdriver\webdriver.py", line 279, in find_element
    return self.execute(RemoteCommand.FIND_ELEMENT, {
  File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "F:\lsj\Python\lib\site-packages\appium\webdriver\errorhandler.py", line 31, in check_response
    raise wde
  File "F:\lsj\Python\lib\site-packages\appium\webdriver\errorhandler.py", line 26, in check_response
    super().check_response(response)
  File "C:\Users\Administrator\AppData\Roaming\Python\Python38\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters.

试试其它方式呢,比如 by_id,by_className,如果有的话。

阿凡提 回复

appium 获取 toast 不是只能通过 xpath 或者 uiautomator 吗,后者好像比前者更慢。

放弃 换个校验点

对于 toast 来说

//android.widget.Toast[@text='发送成功'] 要比 //*[contains(@text,'发送成功')] 效率快很多 试试看吧

用 toast 的 class 属性定位试试呢?
(By.XPATH, "//*[@class='android.widget.toast']").text

YueChen 回复

好的,我试试,谢谢大家 @grace_zhang @xiaoj

YueChen 回复

我试过了,//android.widget.Toast[@text='发送成功']//android.widget.Toast[contains(@text,'发送成功')],其他的都可以,但是就那条 toast 不能捕捉到。

根据 #10 @grace_zhang 10 楼提出的方法,试过 By.CLASSNAME 以及 By.XPATH(toast_loc = (By.XPATH, "//android.widget.Toast")以及 10 楼提到的方法都试了),By.CLASSNAME 所有的都捕捉不到,但是(By.XPATH, "//*[@class='android.widget.toast']").text也是那一条 “发送成功 toast” 捕捉不到

推荐火狐插件,ruto xpath finder,直接右键会出现各种定位的方式,选一个适合你的,就能定位到,一般建议用 xpath 去匹配文字的方式基本上都可以找到

appium 太慢,消息一来一回,再加上各种消耗,toast 早消失了

cmlanche 回复

是的!我觉得可能有这方面的原因,但是不知道咋办。

换一个检测点

剪烛 回复

打算换一个验证点,选择了重新发送倒计时的按钮,但是发现,正在倒计时的按钮(动态),定位好像特别慢。这是为什么呢

哈哈哈,帮不了你了,我们用的 ATX2

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