测试人社区

appium操作mumu模拟器问题

代码详情如下:
import time

from appium import webdriver
import pytest

class TestDw:

def setup(self):
    desired_caps = {}
    # 系统类型
    desired_caps['platformName'] = 'Android'
    # 模拟器地址
    desired_caps['deviceName'] = '127.0.0.1:7555'
    # 测试包名
    desired_caps['appPackage'] = 'com.xueqiu.android'
    # 首次进入的页面
    desired_caps['appActivity'] = '.common.MainActivity'
    # 设置支持输入为中文
    desired_caps['unicodeKeyBoard'] = 'true'
    desired_caps['resetKeyBoard'] = 'true'
    # 初始设置,缓存是否清理设置
    # desired_caps['noReset'] = 'true'
    # # 重启app设置
    # desired_caps['dontStopAppOnReset'] = 'true'
    # 跳过安装设置
    desired_caps['skipDeviceInitialization'] = 'true'
    self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
    self.driver.implicitly_wait(15)

def teardown(self):
    time.sleep(20)
    self.driver.quit()

def test_dw(self):
    self.driver.find_element_by_id("com.xueqiu.android:id/tv_search").click()
    self.driver.find_element_by_id("com.xueqiu.android:id/search_input_text").send_keys("阿里巴巴")
    self.driver.find_element_by_xpath("//*[@resource-id='com.xueqiu.android:id/stockName' and @text='阿里巴巴']")
    price = float(self.driver.find_element_by_id("com.xueqiu.android:id/current_price").text)
    assert price > 200

报错信息如下:selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters.

这个代码都跟录播课里的一样,但是一直报错,卡了我一天了 = =!

  • 这个activity好像不太稳定,我试了几次,启动APP成功,页面元素偶尔正常,大部分情况下,页面无任何UI元素或者提示“遇到错误,请刷新重试”。我研究下看看,先用这个activity吧 “.view.WelcomeActivityAlias”
  • 你代码还有个问题,这个元素定位不存在,检查下目标元素的定位吧

因为录播里面的雪球版本不是现在的最新版,在雪球的版本更新中可能部分元素会有修改导致id等属性发生变化,建议不要招办代码,而是根据老师的定位方法自己去使用工具定位,按照找到的属性值来编写代码。

这个元素定位就是根据实际的定位内容得到的,不是照搬的

我看了一下逻辑 这一步你只做了查找元素但是没有操作元素,是不是少写了一个.click() 按照正常流程,搜索之后要点击一项才能到搜索结果页面,能看到股票的价格这些数据

selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters. 都改了还是报这个错误

报错信息发完整一点 看看具体是哪行语句报的错~

目前看到的代码存在 几个问题:
1、appActivity 换成启动页的activity,不要用首页的,从主页进有可能会导致数据的丢失
2、雪球这个应用目前有新的版本,咱们在模拟器上安装的可能安装不到最新的版本,有时候会弹出提示升级的弹框,运行脚本的时候需要观察一下设备端的状态,如果有弹框可以在框架里面加入处理弹框的优化,或者手动先点掉
3、noReset=True 加上,雪球的页面比较复杂,偶尔会有广告弹框等不确定的情况发生,运行的时候仔细观察,是否由于这些不确定的情况影响了脚本的运行。

另外查找报错原因一般就是看错误信息,贴的时候把错误信息尽量贴全一些。
看你贴的这一段错误信息,一般就是由于没有找到这个元素导致的,为什么没有找到,要么是进错了页面,要么就是当前的页面有问题(网络加载失败,弹框覆盖了下面的页面等)。

报错信息:
报错信息.txt (17.5 KB)

  • 看报错信息 是self.driver.find_element_by_id("com.xueqiu.android:id/tv_search")这一步报的错,打开app之后没有定位到搜索框
  • 建议按照西西老师说的,在脚本运行的时候看看模拟器里面的运行情况,是不是有弹框导致遮挡了原本需要查找的元素,影响了正常的流程。如果你已经学习了处理特殊情况的话可以直接将这些特殊情况加入黑名单进行处理,如果还没有学到的话,可以按照西西老师给的方法处理一下,手动点击一次,之后再运行就不会有这个弹框出来了
  • 另外你还要确认一下你的搜索框是不是这个ID 因为我记得新版本的搜索框ID已经变成了home_search

好的,了解了,多谢