2017-02-02 60 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); 
}; 
相關問題