只有className类型元素,Appuim怎么也定位不到该元素:

from appium import webdriver  # 后续操作依赖于这个库
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.common.by import By

desired_caps = {
    'platformName': 'Android',  # 设备类型;
    'platformVersion': '8.1.0',  # 设备的类型的版本号,如果是安卓,填写大的版本号即可,小数不用填;
    'deviceName': '7424dc5e',  # 设备的名称,这个和后续的测试没有多大关系;
    'appPackage': 'com.weseekmeta.coco',  # 需要测试的app包名;
    'appActivity': '.coco.MainActivity',  # 需要测试的app启动名;
    'unicodeKeyboard': True,  # 如果指定了UI2作为驱动,不需要配置;
    'resetKeyboard': True,  # 重置自动化时设置的键盘;
    # 'chromedriverExecutableDir': '路径',  # 启动webview的webdriver驱动
    'noReset': True,  # 防止每次启动app时候都初始化所有数据;
    'newCommandTimeout': "",  # 代码向appiumserver发送命令的延迟时间,单位是秒,不设置默认一分钟;
    'automationName': 'uiautomator2' # 这个并不是所有应用都适配的,1.15.1以前默认是UI1,之后是默认UI2;
    # 'autoGrantPermissions': "True",  # 自动跳过授权
    # 'skipServerInstallation': 'True',
    # 'skipDeviceInitialization': 'True' # 跳过安装AppiumSetting
    }
import time
options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',options=options)  # /wd/hub 路径是固定的,desired_caps是初始化设置的字典;
driver.implicitly_wait(10)  # 隐式等待和selenium的用法是一样的;

# 获取密码登录按钮切换为密码输入
A = driver.find_element(by=AppiumBy.CLASS_NAME, value="android.widget.EditText")
print(A.get_attribute("className"))
driver.find_element(by=AppiumBy.CLASS_NAME, value="android.widget.EditText").send_keys("1850012")
# 隐藏输入法
# driver.hide_keyboard()
# 切换密码登录
driver.find_element(By.ACCESSIBILITY_ID,"密码登录").click()
# 隐藏输入法
# driver.hide_keyboard()
# 获取密码输入框
# driver.find_element(By.XPATH,' new UiSelector().resourceId("android:id/content").childSelector(new UiSelector().className("android.widget.EditText").instance(1))')
text ="/hierarchy/android.widget.FrameLayout[3]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.FrameLayout[1]/android.view.View[1]/android.view.View[1]/android.view.View[2]/android.view.View[1]/android.widget.EditText[2]"
textclass =  "//android.widget.EditText"
# B = driver.find_element(by=AppiumBy.XPATH,value=text)
B =driver.find_element(AppiumBy.CLASS_NAME,value="//android.widget.EditText")

print("jiehu adhasdiha",B.get_attribute("className"))

不论是Xpath定位还是class Name都无法定位到
发现app是用flutter开发的,因为flutter开发的元素的是集成元素的,而导致appium获取查询不到该元素!
        这就要Appium Flutter Driver 去定位了

求解

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值