使用Robot Framework

时间:2018-01-12 09:03:30

标签: python xpath robotframework

我正在使用Robot Framework(Python 2.7)自动化应用程序。我使用xpath来定位对象。我已经看到,当我更改语言应用程序时,对象的xpath是不同的。例如:

ES

// * [@ id =“dnn_ctr 489 _ViewINT_Cupones_ibtnAdd”]

FR

// * [@ id =“dnn_ctr 644 _ViewINT_Cupones_ibtnAdd”]

EN

// * [@ id =“dnn_ctr 583 _ViewINT_Cupones_ibtnAdd”]

这迫使我重做测试用例,因为xpath是不同的。

是否可以使用正则表达式来形成xpath?我怎样才能避免为每种不同的语言重做测试用例?

谢谢。 玛尔塔

2 个答案:

答案 0 :(得分:2)

XPath 1

xpath 1.x不支持通配符或正则表达式。但是,xpath支持多个string functions,可以将它们组合起来以匹配您想要的内容。例如,有一个starts-with函数。没有ends-with,但有contains,所以您可以使用以下内容:

//*[starts-with(@id, 'dnn_ctr') and contains(@id, 'ibtnAdd')]

当然,这将与“dnn_ctr blah ibtnAdd blah”之类的某些东西相匹配。如果您需要精确地“以cnn_ctr开头”和“以ibtnAdd结尾”,您可以通过更多工作来实现:

//*[starts-with(@id, 'dnn_ctr') and substring(@id, string-length(@id) - string-length('ibtnAdd') + 1) = 'ibtnAdd' ]

XPath 2

使用xpath版本2(在我编写此版本时并非所有浏览器都支持),您可以使用ends-with,使表达式更具可读性:

//*[starts-with(@id, 'dnn_ctr') and ends-with(@id, 'ibtnAdd')]

您还可以使用matches匹配正则表达式:

//*[matches(@id, 'dnn_ctr.*ibtnAdd')]

答案 1 :(得分:0)

您可以使用变量文件作为输入,并将所有xpath值放入其中。我在我的例子中使用JSON.Robot框架JSONlibrary可用于解析JSON文件(https://github.com/nottyo/robotframework-jsonlibrary

input.json

{
    "Languages": {
         "ES": {
            "xpath1": "// * [@ id = "dnn_ctr489_ViewINT_Cupones_ibtnAdd"]",
             },
         "FR": {
            "xpath1": "// * [@ id = "dnn_ctr644_ViewINT_Cupones_ibtnAdd"]",
             },
         "EN": {
            "xpath1": "// * [@ id = "dnn_ctr583_ViewINT_Cupones_ibtnAdd"]",
             }

您可以使用类似以下的变量

,根据应用程序中的语言选择将值传递给测试用例

<强> test.py

language_selected = 'EN'