Python函数用于获取定位器值

时间:2014-08-12 19:31:41

标签: python xml parsing user-interface

<?xml version="1.0" encoding="UTF-8" ?>
<uimap>
    <page name="login">
        <uielement name="username">
             <locator>//input[@type='text']</locator>           
        </uielement>
        <uielement name="password">
            <locator>//input[@type='password']</locator>

如果我有一个像上面这样的XML文件,我想要的是,如果我这样做了:

login.getlocator("username"),其中login是XML部分的对象,username是XML部分的一个属性。 getlocator只是一个我可能不得不写的函数名。

目标是,我想要定位器的值(我的意思是登录中包含的文本)。关于如何实现这一目标的任何建议?我查找了BeautifulSoup,它使用Python进行XML解析,但还有其他选项吗?

1 个答案:

答案 0 :(得分:0)

一种选择是使用lxml并动态构造xpath表达式:

from lxml import etree as ET

data = """<?xml version="1.0" encoding="UTF-8" ?>
<uimap>
    <page name="login">
        <uielement name="username">
             <locator>//input[@type='text']</locator>
        </uielement>
        <uielement name="password">
            <locator>//input[@type='password']</locator>
        </uielement>
    </page>
</uimap>
"""

tree = ET.fromstring(data)
page = 'login'
element = 'username'

print tree.findtext('.//page[@name="{page}"]/uielement[@name="{element}"]/locator'.format(page=page, element=element))

打印:

//input[@type='text']

然后,您可以改进它并提取到可重用的功能,例如:

def get_locator(tree, page, element):
    return tree.findtext('.//page[@name="{page}"]/uielement[@name="{element}"]/locator'.format(page=page, element=element), 'Not Found')

tree = ET.fromstring(data)

print get_locator(tree, 'login', 'username')
print get_locator(tree, 'login', 'password')
print get_locator(tree, 'login', 'invalid element')

打印:

//input[@type='text']
//input[@type='password']
Not Found

当然,这仍然可以改进,但我希望它至少能给你一个基本的想法。

相关问题