Appium appium python 的一个判断语句报错,求帮助!

小阿飞 · December 19, 2016 · 1223 hits
def findElement(driver,id):

    if (driver.find_elements_by_id(id).is_displayed()):

        driver.find_elements_by_id(id).click
    else:
        driver.find_element_by_id('com.tuniu.app.ui:id/iv_style3_card_1').click


findElement(driver, 'android:id/button1')

报错信息:

Traceback (most recent call last):

findElement(driver, 'android:id/button1')

if (driver.find_elements_by_id(id).is_displayed()):
AttributeError: 'list' object has no attribute 'is_displayed'

我的疑问是,判断机制貌似没有生效,找了那个不存在的 id 后抛了异常,
对于 python,我知之不多,希望懂的朋友帮我看看如何修改。

共收到 4 条回复 时间 点赞
匿名 #1 · December 19, 2016

driver.find_elements_by_id(id),返回的是一个列表,你改成 driver.find_element_by_id(id) 试试

#1 楼 @Tank007 是一样的,我的 id 唯一的话,就是只有一个呢,不是列表

#2 楼 @xiaoafeizt 我觉得你理解错了。 @Tank007 的答复是对的。

find_elements 和 find_element 虽然只是相差一个单词,但返回值类型是完全不一样的,所以用法差异也很大。

elements 无论 id 是否唯一都是返回 List 类型,List 里面的元素才是 MobileElment (暂且认为是这个名字。具体类型名字我也不大清楚),而 element 如果存在就返回第一个匹配的元素,类型为 MobileElement,不存在直接抛出异常。

你可以类比为 ["string"]"string" 的区别。第一个是 elements 的返回值,第二个是 element 的返回值。

你这里是方法使用不对,只有 MobileElement 对象有 click,is_displayed 这些方法,list 没有。

这样试试?driver.find_elements_by_id(id)[0].is_displayed()

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up