Appium appium 列表中元素 ID 相同,有些内容有,有些没有,怎样判断元素是否存在?

milky · 2018年01月04日 · 最后由 milky 回复于 2018年01月09日 · 2550 次阅读

如图,列表如下:
列表内每条航班的 ID 都相同,但里面的元素(例如共享航班,更换机场之类)有些有,有些是没有的。
当我尝试判断第一条航班中是否存在共享航班,总是返回 True,经过分析,确定因为下面第四条航班是有 “共享航班” 的,每次定位都会定到第四条航班。
代码如下

def get_flight_info(self):
    flight_results = self.getElementlist(2, 3, **point.TIMELINE["flight_container"])
    code_share = self.isElement_exist(flight_results[0], *point.TIMELINE["flight_container"]["code_share"])

def getElementlist(self, x, y, **loc):
    dict = sorted(list(loc.items()), key=lambda d: d[0])
    loc1 = dict[y][1]
    loc2 = dict[x][1]
    # self.log.debug(loc1, loc2)
    element = self.find_element(*loc1)
    elements = element.find_elements(*loc2)
    return elements

def isElement_exist(self, flight_results, *loc):
    try:
        flight_results.find_element(*loc)
        return True
    except:
        return False

怎样可以判断第一条航班有没有共享航班?

共收到 8 条回复 时间 点赞

方案 1:使用 find elements by id 定位四个航班的数组,第一个就是第一个航班
方案 2:使用其他不重复的信息来定位元素,如 xpath 等

Jerry li 回复

方案一已经试过,都是用 find_element_by_定位的。
方案二的话,基本不同的航班信息都很类似,区别在于有些内容有,有些没有,感觉用 xpath 的话不是很灵活

xpath 可以的。根据层级。

find_element_by_xpath('//*[@id="list_id"]/Box[1]/Label[@class="code_share"]')

这里的意思是,找到 list 下面第一个 box 下的 label(假设 lable 就是共享航班的 label),那就只找第一个。

milky 回复

试下 find_elements_by_, 注意和 find_element_by_ 的区别

大东 回复

那如果我之后要定位第二个 box 的话,xpath 就又要改吗?

Jerry li 回复

嗯,我上面打错了,我就是用 find elements by ID 的

我用 xpath 的确可以定位到第一条航班的内容,但是我当我想获取第二条航班的时候,是不是只能修改 xpath?

用 xpath 还是不行,提示这个 Cannot use xpath locator strategy from an element. It can only be used from the root element

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