uni-app 自动化测试 offset无效 用page.$$获取元素list的offset都是同一个

发布于 1周前 作者 songsunli 来自 Uni-App

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都不一样


1 回复

在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项目配置正确无误。

回到顶部