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 定位慢的原因吧,不知是否有其他方法?
用图像识别试试
会不会太麻烦了,感觉只是一个小小的校验点。
toast 消失得太快本身就是有问题的吧,用户也来不及看提示 toast 就消失了呢。 可以找对应开发修改 toast 弹出时间吧。
补充:
我在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,如果有的话。
放弃 换个校验点
用 toast 的 class 属性定位试试呢?
(By.XPATH, "//*[@class='android.widget.toast']").text
我试过了,//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 早消失了
换一个检测点