2015-05-18 56 views
4

我想保持我的量角器pageObjects儘可能乾淨,但反對在選擇子元素的一些行爲跑起來。量角器鏈式元素通過使用變量?

這工作:

var parent = element(by.css('.parent-class')); 

parent.element(by.css('.child-class')).getText(); 

然而,這並不:

var parent = element(by.css('.parent-class')); 
var child = element(by.css('.child-class')); 

parent.child.getText(); 

有什麼方法做類似第二個例子?我寧願沒有貫穿在我的pageObjects方法傳播元素定位器,但似乎這就是定位的子元素的唯一途徑?

在實際應用中我的卡一個長長的清單,從中篩選我下降到只有一個我期待的。然後我想用卡片的子元素做些事情。

+1

我發現一些看起來允許我從pageObject方法中分離出locator信息: var parent = element(by.css('。parent-class')); VAR兒童= by.css(」子級。); parent.element(child).getText();' – mollons

回答

5

您可以使用locator()函數來獲取子元素的定位器,並用它來尋找父母的孩子。這類似於您在您的評論所提供的解決方案,但允許您定義頁面對象上的所有屬性的網絡元素,而不是元素和定位的混合:

var parent = element(by.css('.parent-class')); 
var child = element(by.css('.child-class')); 

parent.element(child.locator()).getText(); 
+0

真棒。正是我在找的! – mollons

1

我有很多下面的代碼:

var parent = element(by.css('.parent-class')); 
var child = parent.element(by.css('.child-class')); 

child.getText(); 

但據我瞭解,你有很多孩子,你不想列出所有的變種。

另外彌敦道湯普森回答,你可以在頁面對象的輔助功能,找到子元素:

function getCard(parent, child) { // Or getChild() 
    return element(by.css(parent)).element(by.css(child)); 
} 

function getCardText(parent, child) { // Or getChildText 
    return getCard(parent, child).getText(); 
} 

,那麼你可以在規範只是寫:

expect(cardPage.getCardText('.parent-class', '.child-class')).toBe('...');