uni-app 自动化测试 offset无效 用page.$$获取元素list的offset都是同一个
uni-app 自动化测试 offset无效 用page.$$获取元素list的offset都是同一个
问题描述
如题
const main_history_list = await page.$('.main_history_list')
const list = await main_history_list.$$('.main_history_list_item_text')
const first_item = list[0]
const first_item_text = await first_item.text()
console.log("first_item_text", first_item_text)
const first_item_offset = await first_item.offset()
console.log("first_item_offset", first_item_offset)
expect(first_item_offset.top).toBeGreaterThan(0)
const last_item = list[list.length - 1]
const last_item_text = await last_item.text()
console.log("last_item_text", last_item_text)
const last_item_offset = await last_item.offset()
console.log("last_item_offset", first_item_offset)
expect(last_item_offset.top).toBeGreaterThan(0)
offset的值都是同一个
打印的text和元素id都不一样
在uni-app的自动化测试中,如果你发现使用offset
属性获取元素位置无效,并且使用page.$$
获取的元素列表中的offset
值都是相同的,这通常是由于测试框架或uni-app本身的一些限制或bug导致的。尽管具体的原因可能比较复杂,但你可以尝试一些替代方案来获取元素的位置信息。
以下是一个使用Appium和WebDriverAgent(适用于iOS)或UiAutomator2(适用于Android)的示例代码,这些工具通常能提供更精确的元素位置信息。这里我们将使用Appium的Python客户端来演示如何获取元素的位置。
Python + Appium 示例代码
首先,确保你已经安装了Appium和Appium-Python-Client。
pip install Appium-Python-Client
然后,你可以使用以下代码来启动Appium会话并获取元素的位置:
from appium import webdriver
import time
desired_caps = {
'platformName': 'Android', # 或 'iOS'
'deviceName': 'Your Device Name',
'appPackage': 'com.example.yourapp', # Android特有
'appActivity': '.MainActivity', # Android特有
'automationName': 'UiAutomator2', # Android使用UiAutomator2
# 'automationName': 'XCUITest', # iOS使用XCUITest
'noReset': True
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
time.sleep(5) # 等待应用启动
# 获取元素列表
elements = driver.find_elements_by_class_name('your-element-class-name')
for index, element in enumerate(elements):
# 获取元素的位置信息
location = element.location
size = element.size
print(f"Element {index + 1}: x={location['x']}, y={location['y']}, width={size['width']}, height={size['height']}")
driver.quit()
在这个示例中,我们使用find_elements_by_class_name
方法获取了一个元素列表,然后遍历这些元素,使用location
属性获取每个元素的位置信息(x和y坐标),以及使用size
属性获取元素的大小(宽度和高度)。
这种方法通常能提供比uni-app自带的自动化测试框架更精确的位置信息。如果你仍然遇到问题,建议检查Appium服务器的日志,看看是否有更详细的错误信息,或者考虑更新Appium和相关的依赖库到最新版本。此外,确保你的测试环境和uni-app项目配置正确无误。