概觀

編寫任何 Web 互動的第一步是尋找元素。需要選擇器才能從 DOM 樹狀結構中找到元素。透過 Nightwatch v3,選擇器已升級,使尋找元素更加容易。V3 也導入了 `find()` 指令的鏈結,以便輕鬆定位巢狀元素。

CSS 選擇器

您可以使用 CSS 選擇器輕鬆尋找 DOM 樹狀結構中的元素。Nightwatch 支援多種類型的簡單和複雜 CSS 選擇器。一些常見的範例包括

  1. 基於 ID
  2. 基於類別
  3. 基於元素類別
  4. 巢狀
// Find an element which contains id = element-id
browser.element.find('#element-id');

// Find all elements with CSS class active browser.element.findAll('.active');
// Find all <p> elements with class active browser.element.find('p.active');
// Find element with class active nested within an element with id list browser.element.find('#id > .active');
// Find an element which contains id = element-id
browser.element.find('#element-id');

// Find all elements with CSS class active browser.element.findAll('.active');
// Find all <p> elements with class active browser.element.find('p.active');
// Find element with class active nested within an element with id list browser.element.find('#id > .active');

XPath 選擇器

XPath 是一種查詢語言,用於根據節點的位置和屬性從 XML 文件中選擇節點。您可以使用 XPath 來定位 DOM 樹狀結構中的元素。

// Find an element with XPath
browser.element.find(by.xpath('xpath string'))

// Find all elements with XPath browser.element.findAll(by.xpath('xpath string'))


我們不建議使用 XPath 選擇器,因為它可能會頻繁地中斷您的測試

您可以在這裡了解有關 XPath 選擇器的更多資訊。

基於文字

基於文字的選擇器是一種非常自然的尋找元素方式。

// Find an element with text 'Sign In'
browser.element.findByText('Sign In');

// Find all elements with text 'Sign In' browser.element.findAllByText('Sign In');
// Find an element with text 'Sign In'
browser.element.findByText('Sign In');

// Find all elements with text 'Sign In' browser.element.findAllByText('Sign In');
如果網站或 Web 應用程式具有國際化功能,使用基於文字的選擇器可能會出現問題

基於佔位符文字

佔位符文字在表單元素或搜尋列中很常見。讓我們看看如何尋找包含佔位符文字「在此搜尋...」的元素

// Find the search bar with placeholder text 'Search here...'
browser.element.findByPlaceholderText('Search here...');

// Find all elements with placeholder text 'Enter here' browser.element.findAllByPlaceholderText('Enter here');
// Find the search bar with placeholder text 'Search here...'
browser.element.findByPlaceholderText('Search here...');

// Find all elements with placeholder text 'Enter here' browser.element.findAllByPlaceholderText('Enter here');

基於替代文字

替代文字在頁面中的媒體中很常見。您可以使用基於替代文字的方法輕鬆找到此類元素。

// Find the element with alt text 'cat-image'
browser.element.findByAltText('cat-image');

// Find all elements with alt text 'cat-image' browser.element.findAllByAltText('cat-image');
// Find the element with alt text 'cat-image'
browser.element.findByAltText('cat-image');

// Find all elements with alt text 'cat-image' browser.element.findAllByAltText('cat-image');

基於標籤的輸入

有時,表單輸入可能不包含文字或佔位符文字,但可能包含如下所示的標籤

Label

您可以使用基於標籤的方法輕鬆找到與標籤 `First Name` 相關的輸入元素

// Find the input element associated with label 'First Name'
browser.element.findByLabelText('First Name');
// Find the input element associated with label 'First Name'
browser.element.findByLabelText('First Name');

選擇第 n 個元素

如果您需要從元素列表中尋找特定索引處的元素,Nightwatch 提供了一個方便的方法 `.nth`

// Find the 2nd element from all ul elements
browser.element.findAll('ul').nth(2);
// Find the 2nd element from all ul elements
browser.element.findAll('ul').nth(2);

現在您了解了選擇器,您可以使用它們來編寫指令和斷言。

指令
斷言