我正在使用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?我怎样才能避免为每种不同的语言重做测试用例?
谢谢。 玛尔塔
答案 0 :(得分:2)
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(在我编写此版本时并非所有浏览器都支持),您可以使用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'