欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Appium在ios下获取页面元素的一种新思路

程序员文章站 2022-06-09 22:00:16
...

1.传统思路,获取页面所有的元素后,通过遍历去得到想要的值

#xpath慢
                    # time_list2 = driver.find_elements_by_xpath('//XCUIElementTypeCell/XCUIElementTypeStaticText[2]')
                    # print(time_list2)
                    # # 遍历time_list1
                    # for time2 in time_list2:
                    #     if re.search(re_time, time2.get_attribute('name')) is not None:
                    #         all_time.add(time2.get_attribute('name'))
                    #         print(time2.get_attribute('name'))

2.新思路

因为appium在ios中,通过driver.page_source属性,能得到一个xml格式的全部元素。于是采用这种方法,得到了全部元素,适合查询浏览等这类较少操作的页面。

tree = ET.parse('xiaokai.xml')
                    root = tree.getroot()

                    for page_cell in root.iter('XCUIElementTypeCell'):
                        page_st = page_cell.findall('XCUIElementTypeStaticText')
                        for page_leaf in page_st:
                            transname = page_leaf.get('name')
                            # print(transname)
                            if re.search(re_time, transname) is not None:
                                all_time.add(transname)
                                # print(transname)
                                print(timestr + '当前时间-------获取的记录' + transname)

主要用到的方法如下:

导入xml解析模块

1、import xml.etree.ElementTree as ET

 

生成xml文件,并对xml文件解析,得到根节点

2、

fp = open(xmlfile,'w')fp.write(driver.page_source)fp.close()

tree = ET.parse('test.xml')root = tree.getroot()

 

 

3、得到xml文件中所有的XCUIElementTypeStaticText节点数据。

# for page_el in root.iter('XCUIElementTypeStaticText'):

#     print(page_el.attrib)

 

4、查找感兴趣的element的方法

    Element.Iter()方法

    Element.findall() 查找当前element的孩子的属于某个tag的element。

  Element.find() 查找属于某个tag的第一个element。

  Element.text 访问element的文本内容。 

  Element.get()获取element的属性。

 

   下面代码就是通过循环获取相关页面元素并打印出来,因为是对xml文件进行操作,速度很快,并且获得的数据也很准确。也不会报错。

 for page_cell in root.iter('XCUIElementTypeCell'):
                        page_st = page_cell.findall('XCUIElementTypeStaticText')
                        for page_leaf in page_st:
                            transname = page_leaf.get('name')
                            # print(transname)
                            if re.search(re_time, transname) is not None:
                                all_time.add(transname)
                                # print(transname)
                                print(timestr + '当前时间-------获取的记录' + transname)