Time will tell.
元素定位是自动化测试中关键的一步,因为你对象都没定位好,那么你想去操作这也是行不通的,所以本章节也是希望同学们多去动手实战,不要仅仅只是看过、看了。
一、 常用定位
1、ID定位
无论是在 web 自动化还是 app 自动化中id
都是唯一的,那为什么有的地方说name
定位是唯一的呢,在这里又为什么是id
呢?
其实这个不冲突,但如果你用 appium 较新版本那是不行的,在新版本中 name
定位被去掉了,所以在以后的定位中都不会有name
定位了。
看到这里可能又有小伙伴会有疑问,有的时候你的应用为什么没有id
,或者说在这个手机上有但在另外的手机上却没有?
原因:
- 开发没有添加
- android 版本是4.4以下的
图中左边部分用红色圈出来的对象的id
,我们在右边的属性中可以看到,它的id
同样用红色圈出,如果我们需要对 “请输入淘宝账户” 这个输入框进行输入信息,只需操作右边的 id 就行,看代码:
driver.find_element_by_id("com.taobao.taobao:id/aliuser_login_account_et").send_keys("aaa")
2、className定位
在实际工作中className
定位用得相对而言会比较少。当你经常去看 class 时你会发现很多的className
是一样的,你没有办法对其进行唯一定位,下面我们看两张图:
可以看一下这两张图片中淘宝账号、密码两个输入框中的className
都是一样的,如果在这种情况下你使用下边这种方式去定位,你会发现你永远定位不了密码栏,这是为什么呢?
因为在设计的时候如果你查找的元素在页面有多个,系统会自动给你选择第一个,所以你永远操作不了后面的,那么在实际工作或实战中遇到此类问题如何解决?后面会讲到。
driver.find_element_by_class_name("android.widget.EditText").send_keys("aaa")
3、xpath定位
xpath
定位在 web 自动化中是最常见的,而且也是最有效的,使用xpath
定位避免了找不到元素导致报错的问题,但是在 app 中使用xpath
定位是一件很low的事情。为什么?
因为在过来人的经历中,只要遇到使用xpath
定位元素,它的反