不使用eval更改元素引用

时间:2017-02-02 19:02:26

标签: javascript protractor

我想要做的是有一个函数可以用来执行从元素中抓取文本的相同工作,除了我想要更改我想从中拉出文本的定位器

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();
};

但是为了让它能够工作,我必须在它周围包裹一个eval。基于我将传入的定位器,我们最好的方法是引用我的常量.checkWarning?

由于

1 个答案:

答案 0 :(得分:1)

querySelector() DOM API方法解决了此问题,如果您的browser.findElement函数如下所示:

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