在python中执行解析的xml数据作为命令

时间:2016-01-08 21:35:00

标签: android xml python-2.7 ui-automation androidviewclient

我正在尝试在python中编写自动化脚本,其步骤在xml文档中描述。 但是当我试图在python中运行解析的xml数据作为命令时,它将解析的数据视为字符串而不执行它。 我正在使用 xml.etree.ElementTree 来解析xml中的数据。

我的xml代码是

    <Setting >

        <device.startActivity name="('com.android.settings/.Settings')" />
        <device.press   name="('KEYCODE_DPAD_DOWN')" />
        <vc.dump name="()" />
        <vc.findViewWithText name="('About phone')">.touch(</vc.findViewWithText>
        <device.press   name="('KEYCODE_DPAD_DOWN')" />
        <device.press   name="('KEYCODE_DPAD_DOWN')" />
        <vc.dump name="()" />
        <vc.findViewWithText name="('Android verion')">.getParent().getChildren()[1].getText()</vc.findViewWithText>

    </Setting>

我正在使用以下代码来解析并执行它。

Settings = ET.ElementTree(file = configration_file_name).getroot()
length = 0
for ui_application in Settings:
        if length == len(Settings) - 2:
            break
        else:
            length +=1
        if ui_application.text != None :
                ui_application.tag+ui_application.attrib['name']+ui_application.text
        elif ui_application.attrib['name'] !=None:
            ui_application.tag + ui_application.attrib['name']
        else:
             ui_application.tag

有没有更好的方法来完成这项任务?

1 个答案:

答案 0 :(得分:2)

确实连接字符串只会产生另一个字符串。要将包含python代码的字符串作为python表达式运行,您需要使用exec()函数,例如:

....
else:
    exec(ui_application.tag)

或者如果您希望表达式返回值,则可以使用eval()代替exec()

....
else:
    result = eval(ui_application.tag)