Appium [已解决]appium+ptyhon 如何通过控件 id 来获取控件内容

zws20041984 · 2014年01月07日 · 最后由 jacky 回复于 2014年03月24日 · 3355 次阅读

测试 APP 搜索的结果是否正确,现通过判断搜索结果列表页的 title 是否为输入的关键字来验证。
结果页的 title 控件的 id 为 normal_title_name,如下图:

通过 find_element_by_name(id) 来取得控件内容:
代码输入为:

title = driver.find_element_by_name(normal_title_name)
print title.text

运行后提示错误:
NameError: name 'normal_title_name' is not defined

改为:

title = driver.find_element_by_name("normal_title_name")
print title.text

也不行
通过 find_element_by_name("红酒") 就可以取到的,但输入的关键字不同,这个内容也会不同,不能写死,ID 是固定的,所以现只想到通过 ID 来获取,然后判断内容是否为输入的。

共收到 20 条回复 时间 点赞

寻找一个元素的方式,元素标签 (tagname),元素的位置 (xpath),元素的值 (name)。

find_element_by_name/tag_name/xpath.getAttribute("attribute_name")

#2 楼 @532589730 您的意思是要这样写吗
find_element_by_name.getAttribute("normal_title_name")
这样写提示
AttributeError: 'function' object has no attribute 'getAttribute'

#3 楼 @zws20041984 。。。完全不对,你最好先去看下 web driver 相关的文档。

#4 楼 @spikeshen 好的,这块儿完全没接触过,多谢

#3 楼 @zws20041984
忘了说了,是 python,应该是
find_element_by_[name/tag_name/xpath].get_attribute("value")

#6 楼 @532589730 这也不对,找元素的时候没指定条件值

#5 楼 @zws20041984 我一開始也糾結這塊弄了半天。。。後來恍然大悟- - find by id 要是整個 resource-id 裏面的值,而不是單單的 id, try again~ good luck, 而且 by name 的方法不可以放 id 的~要用 by id~

13楼 已删除

#8 楼 @vincent
确定是写成这样可以获取到了:
title = driver.find_element_by_id("com.dangdang.buy2:id/normal_title_name")
其中遇到个问题,现在想把它的内容打出来,写成 print title.text
这样会报错呢
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
查了一下是 Python 内部的编码问题,改成 print title.text.encode('utf8') 后可正常显示

#10 楼 @zws20041984 2.x 中文會有問題~正常了,反正遇到這樣的都轉碼一下就成了~我一開始用 Py3 的時候正常的,不需要轉碼~

7 楼 @spikeshen
哦,是的,比如说在 ios 中,把页面中名为"Check In"的按钮找到,获取这个按钮的属性"name"值:
当然,"Check In"按钮在这页面中要唯一。

find_element_by_name("Check In").get_attribute("name")

请问下我的怎么没有 resource-id 这一参数呢?

#13 楼 @wangyemami 不是所有的控件都会有 ID,让开发加上去就好了

好的,谢谢。

@vincent 这个 id 是指那个 id?通过 hierachyviewer 查看到的 id 怎么不行啊?
mID id/compose

self.driver.find_element_by_id('id/compose')

报错

NoSuchElementException: Message: u'An element could not be located on the page using the given search parameters.' 

#16 楼 @jacky 用 uiautomatorviewer, 在 sdk 的 tools 目录下,ID 是类似这样的:android:id/title,如果是自定义控件 ID 一般 android 会是你的包名

@vincent 我用 uiautomatorviewer,但是没 ID 哪一项

设备是 Android 4.2,是不是版本的问题?
另外,我用 hierarchyViewer 找到的 ID 怎么没法使用,用 Monkeyrunner 就可以找到。。。。。。
谢谢~~

#18 楼 @jacky 好像是没有 root 的机器看不到 ID 来着- -,好像。。。你拿台 root 掉的设备吧,跟版本无关系

#14 楼 @vincent 想请问一下,如果没有 source_id,有没有别的方法能够实现点击? 因为刚开始学习,所以不懂的比较多,谢谢

#1 楼 @spikeshen 请问一下, 元素的 tag name 如何确定?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册