2017-03-09 93 views
0

我想创建一个测试,我检查页面中是否存在所有必需的元素。我有JSON文件名为json.data其右NOE看起来是这样的:如何从json获取动态路径?

{ 
    "perfTest": { 
     "input":"abc", 
     "outputs":["a","b","c"], 
     "elemAndXpath": ["Login","password","submit"] 
     } 
    } 
} 

我的测试是这样的:

it("should check that required elements are present", function() { 
     var elemNames = data.perfTest.elemAndXpath); 
     elemNames.forEach(function(elemName){ 
      //search on the page that the specified elem is present 
      expect(element(by.xpath("//div[.='" + elemName + "']")).isPresent()).toBe(true); 
     }); 
    }); 

现在这个工作,如果所有的人都可以找到我的定位器,其在相似路径。我需要使这个测试能够从json文件中获取使用的定位器路径。所以,我现在的JSON文件如下所示:

{ 
    "perfTest": { 
     "input":"abc", 
     "outputs":["a","b","c"], 
     "elemAndXpath": { 
      "Login":"by.id('login')", 
      "password":"by.id('pass')", 
      "submit":"by.xpath(//button)" 
     } 
    } 
} 

我无法为此json文件编写测试。问题是由于最后一把钥匙的动态特性造成的。请帮我解决一下这个。

回答

1

我认为你的问题是你传递一个字符串到元素。试试这个:

var data = { 
    "perfTest": { 
    "input":"abc", 
    "outputs":["a","b","c"], 
    "elemAndXpath": { 
     "Login":"by.id('login')", 
     "password":"by.id('pass')", 
     "submit":"by.xpath(//button)" 
    } 
    } 
} 

for(key in data.perfTest.elemAndXpath){ 
    expect(element(eval(data.perfTest.elemAndXpath[key]))).isPresent()).toBe(true) 
} 
+0

实际上没有......测试我写了'elemAndXpath'中的所有密钥。现在,当我想遍历所有的键并获得相应的值时,它不会为我工作。 – Ravi

+0

除非你需要其他东西的钥匙,你可以放下它们,并将by.x字符串作为数组中的项目,那么我相信上面的方法就行了。否则,在对象上执行for循环并执行相同的操作。 – jdgower

+0

是的,我也需要钥匙。我尝试了for循环的事情。我使用Object获得了所有的键。我用for循环来遍历键,但无法获得它们的值 – Ravi