2017-02-02 62 views
1

我想要做的是有一个功能,我可以使用它来执行从元素中抓取文本的相同作业,但我想更改要从中拉取文本的定位器在不使用eval的情况下更改元素参考

const firstNameError = by.id('firstNameError'); 
const lastNameError = by.id('lastNameError'); 
const dateError = by.id('dateError'); 
const emailError = by.id('emailAddressError'); 


this.checkWarning = function(locator) { 
    return browser.findElement(eval(locator + 'Error')).getText(); 
}; 

所以上面,目前的作品,但使用eval函数(我宁愿避免)。所以我调用.checkWarning并传入'firstName',例如它会使用firstNameError const。

我曾尝试推行之类的东西下面,我有定位器的列表,然后我还基于定位器如

const locatorValues = 
{ 
    'firstName': 'firstNameError', 
    'lastName': 'lastNameError', 
    'date': 'dateError', 
    'email': 'emailError', 
}; 

this.checkWarning = function(locator) { 
    return browser.findElement(locatorValues[locator]).getText(); 
}; 

但是再次得到那个工作我会ammended访问列表功能必须在它周围包装eval。我们是基于定位器引用我的常量的最佳方法,我会传入.checkWarning?

感谢

+0

你可以尝试找到'窗口[localtor + '错误']'(或如果你不在浏览器上,使用'global'而不是'window') – Arthur

+0

看起来'const'不在'window'上。我错了 – Arthur

回答

1

querySelector() DOM API方法来解决这个问题,如果你的browser.findElement功能是这样的:

findElement = function(loc){ 
    return document.querySelector("#" + loc); 
}; 
相关问题