@ 少年已老 @yiwang 为什么需要像素对比,我对比文字就可以了吧。另外就是如何保证排序后的顺序和自己想要的一致?
有,它就是一直在查找,每次查找时间 20 多秒
是的,我是这么做的,但是他定位到的时候,可能已经恢复 “获取验证码” 了,因为定位太慢了【长达一分钟】
这个元素不会消失,这是一个按钮,而且是一个动态的按钮。
谢谢!已发现问题!
我补充了一些代码在问题里,可否看看是否是我代码哪里不符合规范或者哪里有潜在的坑?
报告里面不仅是照片。好像什么内容都没有,就是一份默认的报告, 但是我其他的测试和这个写的一摸一样,不知道为什么这个报告没有导入内容?
PS:报告中图片是 base64 的,无路径指向
应该就是绝对路径,代码如下:
# 当前文件路径
current_path = os.path.abspath(__file__)
# 框架项目顶层目录
base_dir = os.path.split(os.path.split(current_path)[0])[0]
# 上传图片目录
image_dir = os.path.join(base_dir, r"uploads\images")
job 空间,即 workspace,我打印出来的路径确实是这个空间的,而且是项目下文件夹 a 的子文件夹 b 中的,应该是能找到的呀。
我使用的方法是先利用 os 获取当前项目路径,用 os.path.join 将当前项目路径和图片的路径连在一起,而且输出在日志中的路径确实是对的。
绝对不是,因为能找到这个文件,而且 pycharm 上运行没问题。
日志如下:
我直接复制这个文件路径,在电脑文件资源管理器中能找到。
https://testerhome.com/topics/10372和这个情况相同!!!
好像是因为找不到则会先选中中间那个,所以会打开中间那个的页面,有没有办法不点击呢?
谢谢!
图像元素识别类的定位方法是什么?
打算换一个验证点,选择了重新发送倒计时的按钮,但是发现,正在倒计时的按钮(动态),定位好像特别慢。这是为什么呢
是的!我觉得可能有这方面的原因,但是不知道咋办。
我试过了,//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” 捕捉不到
好的,我试试,谢谢大家 @grace_zhang @xiaoj
appium 获取 toast 不是只能通过 xpath 或者 uiautomator 吗,后者好像比前者更慢。
补充:
我在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.
有三秒,但是不知道为啥我捕捉不到
会不会太麻烦了,感觉只是一个小小的校验点。
@xglh0901 @chenhengjie123 谢谢,了解了!
一直纠结于 unittest 提供的固有 assert 方法,没有想到可以先对列表做处理
不是字典,是字典列表