python_元素定位

一。appuim 元素定位辅助工具

1)启动

点击搜索按钮,等待

 

 

等待完毕:

 

 

 

启动会话:

 

 

 

页面页面介绍:

 

 

 

 

 

 

 

 2)元素定位:

 -搜索

 

 

 搜索结果:

 

 

 

 

 

 

 

补充:

1.selenium中

webdriver.Chrome()运行原理:

-先启动一个服务端,再启动一个客户端 使用客户端给服务端发送请求

 

 

   -start

  -运行Chromedriver服务

  

 

 

 -ChromeRemoteConnection 远程连接:

  -向远程服务器发送命令。

  

 

 

 2.appium

-服务端是appuim

-客户端也是初始化一个

  -

 

 

 

-selenium与appium公用一个类:WebDriver

 

  -selenium,只是使用了 Chrome()子类

  

 

 

 

   -appium则使用了 Remote() 子类

  

 

 

 

3.MobileBy:继承了selenium中的By,自动有封装了一部分方法 与selenium相比定位方式少了些:比如 :css定位

 

 

 

二。元素定位

1.与selenium相比appium

-app 当中属性名是固定的,所有的元素都具备这些属性,

  -id, class, content-desc, clickable, checkable, 都在辅助工具会显示的。

-id 可以不唯一, web 当中 id 是唯一

-app中class 是表示组件的名称,类似于 web 当中 tagname

  -app 自动化测试当中,很少用单独的 class 定位

2.app中常用元素定位方式

- id, 确认什么时候唯一, inpect 查找元素。

- content-desc 元素标识, 经常没有。

  --表达式:el=driver.find_element_by_accessibility("值")

- uiautomator 原生定位方式,value=Java代码

  #以id为例(表达式需要使用JAVA写,Java代码表示字符串需要使用双引号,不像python一样单引号、双引号都可以,需要在引号前进行转义):

    #单个条件

    selector= 'new UiSelector().resourceId(\"id的value\")'

    #多个条件

    selector= 'new UiSelector().resourceId(\"id的value\").text("值")'

  -表达式:el=driver.find_element_by_android_uiautomator("selector")

      el=driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,"selector")

- xpath (相对路径,一般用。手机解析页面素速度比较慢)

   表达式:driver.find_element(MobileBy.XPATH,"表达式")

3.元素定位:

from appium import webdriver

caps={
"platformName": "Android",#平台名称
"deviceName": "emulator-5554",#设备名字
"appPackage":"包名",
"appActivity":"页面",
}

driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=caps,
)
-方式一:
# 通过 ID
# el = driver.find_element("id", "值")
# el.click()
-方式二:
# 通过 content-desc 属性查找
# el = driver.find_element_by_accessibility_id("值")

-方式三:uiautomator
参考地址:https://developer.android.com/reference/android/support/test/uiautomator/UiSelector
  -单个元素操作
    # 值,value: Java 代码

    # TODO: Java 代码表示字符串是用双引号,单引号不行,

    # TODO:若有多个引号,可以在里面的引号之前打 \
    

       selector = 'new UiSelector().resourceId(\"id值\")'
    el = driver.find_element_by_android_uiautomator(selector)

    #另外一种调用方法
    # # el = driver.find_element(MobileBy.ANDROID_UIAUTOMATOR, "")
    el.click()

 

  -组合元素操作
    参考地址:https://www.cnblogs.com/jianXu/p/5158396.html
      

      # 和xpath 一样,可以进行条件的组合。
      # 组合查询比 xpath 更快
      # new UiSelector().resourceId("组合值1").text("组合值2") #等等通过链式调用生效
      # new UiSelector().resourceId())

  -父子元素
    

    # 父元素, (子元素) ==》 通过子元素的特征找到父元素
    new UiSelector().checkable(false).childSelector(
         new UiSelector().checkable()
    )




 

 

 

 

 


-方式四:xpath
注意:webview 中的text与H5环境中的text用法不一致
  webvire中text是属性: @text=
  H5中:text()=
# el = driver.find_element(MobileBy.XPATH, "")

time.sleep(2)
driver.quit()

 

4.元素定位其他辅助工具

uiautomatorviewer: android 调试工具 手动刷新

  -在安卓环境:sdk\tools 启动
weditor #网易的工具 优点:xpath 是相对路径;鼠标可显示

  参考:https://www.cnblogs.com/tzxy/p/11295717.html

  -安装:

      1.安装adb环境(ios这里不讲,后续补充)

      2.python安装

            pip install --pre -U uiautomator2

            pip install weditor

      3.连接设备,先使用 adb devices查看设备有没有连接上(必须连接),连接成功后 使用:python -uiautomator2 init 给设备初始化

      4.最后执行开启服务:python -m weditor

 

 

  -使用:cmd中输入 “python -m weditor”启动服务,浏览器会自动打开;点击标题栏“Connect”等待绿色的麦穗图标出现 再点击“Reload”就可以把当前设备运行的软件加载出来

    -xpath会展示相对路径

 

 

 注意:

1.在元素定位中优先使用安卓自带的:uiautomatorviewer进行元素定位若无法定位建议使用weditor,若weditor也无法定位就使用appium

三。等待

元素等待
强制
隐式等待
显示等待

 

四:uiautomator2 服务无法启动的错误。

1.错误信息:

 

2.解决:

  -先通过以下命令查找 uiautomator 服务

    -命令:adb shell pm list package | grep uiautomator

    -结果类似这样:

          package:io.appium.uiautomator2.server
          package:io.appium.uiautomator2.server.test

   -也可以查看 instrumentation:

     -命令:adb shell pm list instrumentation

     -结果类似这样:instrumentation:io.appium.uiautomator2.server.test/android.support.test.runner.AndroidJUnitRunner (target=io.appium.uiautomator2.server)

   -卸载 uiautomator2 服务:

      -命令:

        adb uninstall io.appium.uiautomator2.server
        adb uninstall io.appium.uiautomator2.server.test

   -重启appium

  

posted @ 2020-08-11 00:20  1142783691  阅读(375)  评论(0编辑  收藏  举报