LogoLogo
  • Guide of goorm
  • ENGLISH
    • goorm account (for all services)
    • goormIDE
      • 01. Getting Started
        • What is goormIDE?
        • Key Terms
        • Quickstart
        • Build
          • C/C++
          • JAVA
          • Node.js
          • Python
          • Ruby
          • JSP
          • PHP
          • .NET
          • Spring-Maven
      • 02. Container
        • Container Specifications
        • Image: Packs
        • Inactive Container
        • Automatic Stop
      • 03. Workspace
        • Introduction to the Workspace
        • Collaboration
          • Contaienr Sharing
          • Co-Editing
          • Chatting
        • Keyboard Shortcut
        • Import Github Repos
        • Workspace Features
          • Init Script
          • Environment Variables
          • Commands
          • URL/Port
          • Application Modes
          • Muti Project
          • Merge Code
          • AI code completion
        • Source Code Management - Git
          • Git
          • Status
          • Add
          • Commit
          • Push
          • Pull
          • Ignore
          • Branch
          • Log
          • Event tab
          • Diff
        • File Management
          • Move
          • Open / Close
          • Properties
        • Terminal
        • Extra features
          • Auto Complete / Auto Import
          • Bug Reporting
          • Language Support
          • SBOM Management
      • 04. GPU
        • Introduction to the GPU
      • 05. Credits
        • About Credits
        • How credits are calculated
      • 06. Membership
        • About Membership
      • 07. FAQ
        • SSH / Port Forwarding Configuration
        • Why my container is blocked?
        • Can I use goormIDE on a mobile device?
        • React Native Container is not working
        • How to run as background process?
        • Using MySQL Workbench with goormIDE
        • I want to use Selenium.
        • How do I copy/paste from the terminal?
    • goormDEVTH (for applicants)
      • Access Evaluation
      • Proceed Evaluation
      • FAQ
        • The answer is correct, but it conflicts with the test case.
    • goormDEVTH (for interviewers)
      • Quick Start
        • Sign In & Sign Up
        • Reset Password
        • Free Trial
      • Management and Settings
        • New Assessment
        • Assessment Management
        • Assessment Information
        • Assessment Settings
        • Activity Log
      • Quiz Management
        • Making a New Quiz
        • Quiz Management
        • Import Quiz and General Settings
        • New Quiz(Different Types)
      • Test Management
        • Assessment List(New Assessment/Assessment Management)
        • Exam Result Management
        • Real Time Status
      • Applicant Management and Grade Report
        • Applicant Management
        • Applicant Invitation
        • Applicant Group Management
        • Grade Report
  • 한국어
    • 구름 계정(공통)
    • 구름IDE 사용법
      • 01. 시작하기
        • 구름IDE가 무엇인가요?
        • 주요 용어
        • 빠르게 사용해보기
        • 빌드
          • C/C++
          • JAVA
          • Node.js
          • Python
          • Ruby
          • JSP
          • PHP
          • .NET
          • Spring-Maven
        • 디버그
      • 02. 컨테이너
        • 컨테이너 성능
        • 이미지팩
        • 컨테이너 동면
        • 자동 정지
      • 03. 워크스페이스
        • 워크스페이스 소개
        • 협업 기능
          • 컨테이너 공유
          • 동시 편집
          • 채팅
        • 단축키
        • Github 저장소 불러오기
        • 편의 기능
          • 시작 스크립트
          • 환경 변수
          • 명령어
          • URL/Port
          • 애플리케이션 모드
          • 멀티 프로젝트
          • 코드 병합
          • AI 코드 자동완성 기능
        • 소스 코드 관리 - Git
          • Git
          • Status
          • Add
          • Commit
          • Push
          • Pull
          • Ignore
          • Branch
          • Log
          • Event tab
          • Diff
        • 파일 관리
          • 이동
          • 열기 / 닫기
          • 속성
        • 터미널
        • 기타 기능
          • 자동 완성 / 자동 Import
          • 버그 리포트
          • 다국어 지원
          • SBOM 관리
      • 04. GPU
        • GPU 소개
      • 05. 크레딧
        • 크레딧이란?
        • 크레딧 계산하기
      • 06. 멤버십
        • 멤버십이란?
      • 07. 자주 묻는 질문(FAQ)
        • SSH / 포트포워딩 설정 방법
        • 차단이 됐는데 이유를 모르겠어요
        • 모바일 기기에서 구름IDE를 사용할 수 있나요?
        • React Native 컨테이너가 실행이 안 돼요
        • 백그라운드 프로세스로 실행하는 방법
        • 구름IDE 에서 MySQL Workbench를 사용하고 싶어요
        • Selenium을 사용하고 싶습니다
        • 터미널에서 복사/붙여넣기는 어떻게 하나요?
    • 구름EDU 사용법(수강자용)
      • 00. 소개
      • 01. 회원 가입 & 로그인
        • 회원 가입 & 로그인
        • 비밀번호 재설정하기
        • 메인 페이지 안내
      • 02. 수강하기
        • 강좌 찾기
        • 무료 강좌 수강하기
        • 유료 강좌 수강하기
        • 내 수강 정보 화면 안내
        • 수강 평가하기
        • 수강 취소하기
      • 03. 학습 진행
        • 강의 시작하기
        • 수강화면 인터페이스
        • 실습화면 인터페이스
          • 채점 모드 / 제출 모드 / 실행 모드
      • 04. 시험/과제
        • 모니터 화면 공유(스크린캡쳐)/웹캠 권한 허용
        • 모바일(핸드폰) 카메라 설정
        • 시험/과제 화면 인터페이스
        • (동영상가이드)시험/과제 화면 인터페이스
      • 05. 문제 유형 소개
        • 스크래치 프로그래밍 문제 유형
        • 일반 프로그래밍 문제 유형
        • GUI 프로그래밍 문제 유형
        • 거북이 문제 (Skulpt) 유형
        • 유닛 테스트 문제 유형
        • 로보코드(코드) 문제 유형
        • 웹 서비스/애플리케이션 개발 문제 유형
        • HTML/CSS/JS 프로그래밍 문제 유형
        • RESTful API 실습 유형
        • 아두이노 스케치 개발 문제 유형
        • 스크래치두이노 개발 문제 유형
        • 일반 문제 유형
      • 06. 구름IDE를 이용한 강좌 수강
        • 구름IDE와 강좌의 연결
      • 07. 학교/기관/기업 채널 서비스 수강자
        • 채널 가입
          • 채널 가입하기
          • 초등학교 전용 채널 그림 로그인
        • 채널 검색
        • 수강 신청
          • 강좌 찾기
          • 수강 신청하기
          • 수강정보 화면 안내
        • 학습 진행
          • 출석
          • 온라인 튜터링
          • 시험 응시하기 & 과제 제출하기
      • 08. 구름LIVE Playground
        • 카메라와 마이크를 설정 할 수 없는 경우
      • 자주 묻는 질문(FAQ)
        • 채널 가입 신청이 승인 대기중이라고 나옵니다
        • 수강 신청을 했는데 강좌가 안 보입니다.
        • 실수로 시험을 종료했을 때, 다시 시험을 칠 수 있나요?
        • 수강 취소를 하고 싶어요
        • 수강취소했는데 환불이 안되었습니다
        • 모바일 버전 지원도 되나요?
        • [화상강의] 카메라와 마이크가 안 뜹니다.
    • 구름EDU 사용법(강의자용)
      • 01. 구름EDU 강의 관리 도구
        • 소개
        • 회원가입 & 로그인
        • 강의자 권한 신청
      • 02. 강좌 관리 및 설정
        • 강의자 홈
        • 강좌 만들기
        • 강좌 홈
        • 설정
        • 활동 내역
        • 뼈대 강좌로 강좌 생성하기
      • 03. 교육 컨텐츠 만들기
        • 강좌 컨텐츠의 구성
        • 챕터/강의 추가 및 삭제, 이름 변경, 위치 변경
        • 이론 중심 강의 편집하기
        • 동영상 한 번에 올리기
        • 실습 중심 강의 편집하기
        • 공개 기간 / 배지
        • 체험 강의 설정
      • 04. 문제 관리
        • 문제 가져오기 및 공통 설정
        • 스크래치 문제 만들기
          • 확장 기능 이용하기
        • 엔트리 문제 만들기
        • 일반 프로그래밍 문제 만들기
        • GUI/GAME 프로그래밍 문제 만들기
        • 유닛 테스트 문제 만들기
        • 로보코드 문제 만들기
        • 크루세이더 퀘스트 문제 만들기
        • 거북이 문제(Skulpt) 만들기
        • GlowScript 문제(VPython) 만들기
        • 웹 서비스/애플리케이션 개발 문제 만들기
        • 웹 서비스/애플리케이션 개발 문제 실행해보기
        • HTML/CSS/JS 프로그래밍 문제 만들기
        • 채점 스크립트 작성하기
        • RESTful API 문제 만들기
        • 아두이노 개발 문제 만들기
        • 스크래치두이노 개발 문제 만들기
        • O/X 문제 만들기
        • 주관식 문제 만들기
        • 객관식 문제 만들기
        • 선긋기 문제 만들기
        • 서술형 문제 만들기
        • 파일 제출 문제 만들기
        • 문제 검색, 수정, 삭제
      • 05. 시험/과제 관리
        • 시험/과제의 개념
        • 시험/과제 생성
        • 결과 분석
        • 실시간 시험 현황
      • 06. 수강자 관리
        • 수강자 관리
        • 신규 수강자 초대하기
        • 초대 메일 발송
        • 강좌 코드로 초대하기
        • 계정 만들어 주기
        • 출석 관리
        • 온라인 튜터링
      • 07. 성적 관리
        • 성취도 분석
        • 성적 보고서 만들기
      • 08. 기업/학교/학원/기관별 채널
        • 채널이란
        • 채널 신청 방법
        • 채널 관리
        • 사용자 관리
        • 채널 사용자 추가
          • 초대 메일 발송
          • 초대 링크로 사용자 초대하기
          • 계정 만들어주기
        • 강좌에 수강자 초대하기
          • 초대 메일 발송
          • 초대 코드 전달
          • 계정 만들어 주기
          • 임시 수강생 등록
        • 공동강의자 추가하기
        • 채널 활동 기록
          • 자동/수동 채점 및 채점 기록
        • 채널 설정
        • 채널 강좌 관리
      • 09. 구름LIVE Studio
      • 자주 묻는 질문(FAQ)
        • 내 강좌 교육과정에 뼈대 과목에 있는 몇 개의 강의를 복사하고 싶습니다
        • 시험 끝내기 버튼이 보이지 않습니다
        • 수강생의 학년/반/번호를 수정하고 싶습니다
        • 코드 에디터에서 복사/붙여넣기가 동작하지 않습니다
        • 수강생들이 제출한 파일은 어디에서 볼 수 있나요?
        • 제출시 프로그램 수행시간 제한과 실행시 프로그램 수행시간 제한의 차이점인 뭔가요?
        • 문제 가져오기에 보이는 문제와 안 보이는 문제는 무슨 차이가 있나요?
        • 시험과 과제는 어떤 차이점이 있는 건가요?
        • 성취도 보기에 완료로 되어있는데 제출 결과는 없습니다
        • 시험 가져오기를 통해 가져올 수 있는 시험은 어떤 건가요?
        • 채팅은 강의자와 수강생 1:1로만 대화가 가능한가요?
        • 기업, 학교 등 기관 회원 가입은 어떻게 하나요?
        • 강좌 개설 후 공개 설정을 했는데, 채널 메인에서 확인이 안 됩니다
        • 관리자 권한이 없습니다 / 관리자 페이지를 못찾겠습니다
        • 답안을 정규표현식으로 어떻게 작성할 수 있나요?
        • 구름EDU 강의자의 혜택이 궁금합니다
        • Interactice shell이 뭔가요?
        • 함수형 문제를 만들고 싶습니다
    • 구름DEVTH 사용법(지원자용)
      • 평가 접속하기
      • 평가 진행하기
        • 모니터화면공유(스크린캡쳐)/웹캠 권한 허용
        • 모바일(핸드폰) 카메라 설정
        • 스마트폰에서 QR코드 인식 방법
      • 평가 종료하기
      • 자주 묻는 질문(FAQ)
        • 로그인 시 정보가 일치하지 않는다고 합니다
        • 실행이 안됩니다
        • 시험을 종료하고 싶습니다
        • 채점 결과는 정답인데, 테스트케이스를 실행하면 불일치라고 합니다.
        • 사용 가능 언어를 알고 싶습니다 / 언어를 변경하고 싶습니다
        • 컴파일러 버전이 궁금합니다
        • 붙여넣기를 하지 않았는데, 경고문구가 뜹니다.
        • 초대 메일이 도착하지 않았습니다
        • 시험 응시를 위한 권장 환경은 어떻게 되나요?
    • 구름DEVTH 사용법(평가자용)
      • Quick Start
        • 평가/시험/문제
        • 평가 생성
        • 문제 생성
        • 시험 생성
        • 지원자 초대
        • 무료 체험 사용 신청
      • 평가 관리 및 설정
        • 평가 생성
        • 평가 관리
        • 평가 정보
        • 평가 설정
        • 활동 기록
      • 문제 관리
        • 문제 생성
        • 문제 관리
        • 문제 가져오기 및 공통 설정
        • 문제만들기(유형별)
      • 시험 관리
        • 평가 목록(시험 생성/관리)
          • 순위 보여주기
          • 구름IDE로 시험 보기
        • 결과 관리
          • 부정행위 방지 기능
            • 웹캠 / 스크린(화면) 캡쳐
            • 소스 코드 유사도 검사
            • 작성 이력 재생
        • 실시간 평가 현황
      • 지원자 및 성적 관리
        • 지원자 관리
        • 지원자 초대
        • 지원자 그룹 관리
        • 성적 보고서
      • 자주 묻는 질문(FAQ)
        • 문제, 답안, 채점결과까지 한 문서에 출력하고 싶습니다.
        • 기업용 문제은행은 어떻게 사용할 수 있나요?
        • 함수형 문제를 만들고 싶습니다
        • 구름DEVTH 옵저뷰 사용을 위한 권장 환경은 어떻게 되나요?
  • RELEASE NOTES
    • goormIDE
      • Jan 10, 2025
      • Nov 28, 2024
      • Nov 7, 2024
      • Oct 17, 2024
      • Sep 26, 2024
      • Sep 12, 2024
      • Aug 16, 2024
      • Jul 30, 2024
      • Jul 04, 2024
      • Jun 13, 2024
      • May 24, 2024
      • May 2, 2024
      • Apr 18, 2024
      • Mar 27, 2024
      • Oct 05, 2023
      • May 15, 2023
      • Apr 03, 2023
      • Feb 17, 2023
      • Jan 12, 2023
      • Nov 29, 2022
      • Nov 10, 2022
      • Oct 13, 2022
      • Sep 28, 2022
      • Sep 09, 2022
      • Jul 25, 2022
      • Jul 04, 2022
      • Jun. 21, 2022
      • May. 24, 2022
      • May. 2, 2022
      • Apr. 11, 2022
      • Mar. 24, 2022
      • Mar. 7, 2022
      • Feb. 10, 2022
      • Jan. 19, 2022
      • Dec. 23, 2021
      • Dec. 2, 2021
      • Nov. 11, 2021
      • Oct. 28, 2021
      • Sep. 29, 2021
      • Sep. 14, 2021
      • Aug. 19, 2021
      • Aug. 3, 2021
      • Jul. 13, 2021
      • May. 24, 2021
      • Apr. 9, 2021
      • Mar. 22, 2021
      • Jan. 7, 2021
      • Nov. 3, 2020
      • Jul. 23, 2020
      • May. 26, 2020
      • Apr. 20, 2020
      • Mar. 20, 2020
      • Feb. 21, 2020
      • Sep. 17, 2019
      • Nov. 28, 2019
    • goormEDU
      • Aug. 4, 2022
      • Jul. 1, 2022
      • May. 23, 2022
      • Mar. 23, 2022
      • Feb. 8, 2022
      • Dec. 24, 2021
      • Nov. 13, 2021
      • Oct. 23, 2021
      • Sep. 11, 2021
      • Aug. 21, 2021
      • Jul. 14, 2021
      • May. 12, 2021
      • Apr. 9, 2021
      • Jan. 20, 2021
      • Dec. 7, 2020
      • Nov. 19, 2020
      • Nov. 3, 2020
      • Jun. 30, 2020
      • Jun. 16, 2020
      • May. 16, 2020
      • Apr. 14, 2020
      • Feb. 14, 2020
      • Dec. 27, 2019
      • Nov. 18, 2019
    • goormEDU Channel
      • May. 16, 2025
      • Apr. 25, 2025
      • Sep. 5, 2022
      • Jul. 25, 2022
      • Jul. 1, 2022
      • Apr. 28, 2022
      • Mar. 24, 2022
      • Feb. 8, 2022
      • Jul. 14, 2021
      • May. 12, 2021
      • Apr. 14, 2021
      • Jan. 20, 2021
    • goormDEVTH
      • May. 15th, 2025
      • Apr. 24th, 2025
      • Apr. 4th, 2025
      • Mar. 17, 2025
      • Feb. 20, 2025
      • Apr.25, 2024
      • Jul. 19, 2022
      • May. 24, 2022
      • Mar. 29, 2022
      • Jan. 17, 2022
      • Dec. 24, 2021
      • Nov. 12, 2021
      • Oct. 22, 2021
      • Sep. 10, 2021
      • Aug. 20, 2021
      • Jul. 14, 2021
      • May. 12, 2021
      • Apr. 9, 2021
      • Jan. 20, 2021
Powered by GitBook
On this page
  • 1. 나이트워치 (Nightwatch.js)
  • 2. 채점 스크립트 작성해보기 #1
  • 3. 채점 스크립트 작성해보기 #2

Was this helpful?

  1. 한국어
  2. 구름EDU 사용법(강의자용)
  3. 04. 문제 관리

채점 스크립트 작성하기

PreviousHTML/CSS/JS 프로그래밍 문제 만들기NextRESTful API 문제 만들기

Last updated 4 years ago

Was this helpful?

1. 나이트워치 (Nightwatch.js)

구름EDU에서는 웹 서비스/애플리케이션 개발 문제 혹은 HTML/CSS/JS 프로그래밍 문제는 나이트워치 라는 UI테스트 프레임워크를 활용하여 채점을 합니다. 웹 관련 문제의 정확한 채점을 위해서는 나이트워치 라는 UI테스트 프레임워크에 익숙해져야 합니다.

2. 채점 스크립트 작성해보기 #1

본 도움말에서 Nightwatch.js의 모든 기능과 API에 대해서 설명을 할 수는 없기에 공식 사이트에 있는 아래의 예제를 기준으로 개념적인 부분을 설명합니다.

module.exports = {
  'Demo test Google' : function (browser) {
    browser
      .url('http://www.google.com')
      .waitForElementVisible('body', 1000)
      .setValue('input[type=text]', 'nightwatch')
      .waitForElementVisible('button[name=btnG]', 1000)
      .click('button[name=btnG]')
      .pause(1000)
      .assert.containsText('#main', 'Night Watch')
      .end();
  }
};
  1. module.exports = { : node.js의 문법으로써 사용자 모듈을 만드는 과정입니다. { 이하로 할당되었기 때문에 여러 테스트 메소드를 가지는 객체가 될 것입니다.

  2. 'Demo test Google' : function (browser) { : 테스트 케이스의 이름과 거기에 할당되는 테스트 메소드입니다. 이 코드에서는 'Demo test Google' 이라는 이름으로 작성이 시작되었습니다.

  3. browser : Nightwatch.js 에서는 가상의 웹브라우저가 객체 형태로 각각의 테스트 메소드에 전달됩니다. 이 browser는 우리가 개념적으로 알고 있는 웹브라우저로서, 눈에 보이지는 않지만 마치 웹브라우저처럼 동작하는 가상의 객체라고 이해하면 됩니다.

  4. .url('http://www.google.com') : .url() 은 browser 객체에게 특정 웹사이트의 URL로 접속하게 만드는 메서드로써, 이 코드에서는 구글로 접속하게 하고 있습니다.

  5. .waitForElementVisible('body', 1000) : 웹페이지의 기본 골격을 담당하는 body 태그가 화면에 보여질(Visible) 때까지 최대 '1초(=1000ms)간' 기다린다는 의미의 메서드입니다.

  6. .setValue('input[type=text]', 'nightwatch') : 화면에 보이는 요소 중에 input 태그요소이면서 그 속성이 type=text인 것을 찾아서 'nightwatch'라는 문자열 값을 입력하는 메서드입니다. 이 메서드는 결국 구글 첫 화면의 검색어 입력창에 'nightwatch'를 입력한 효과를 보여주게 됩니다.

  7. .waitForElementVisible('button[name=btnG]', 1000) : 5번째 라인과 동일한 메서드로서, 이번엔 button 태그요소 중 name=btnG인 것이 화면에 나타날 때까지 최대 1초간 기다린다는 의미입니다.

  8. .click('button[name=btnG]') : 메서드 명인 click() 이라는 의미 그대로 해당 요소(button[name=btnG])를 클릭합니다.

  9. .pause(1000) : 1초간 기다립니다.

  10. .assert.containsText('#main', 'Night Watch') : id 속성 값이 main인 HTML DOM 요소를 찾아서 'Night Watch'라는 문자열이 포함되어 있는지 확인합니다.

  11. .end() : 지금까지 가상의 브라우저와 상호작용하는 일련의 작업들을 그만하고 끝내겠다는 의미입니다.

자바스크립트 및 node.js 문법에 익숙해져야하고, 다소 복잡할 수 있지만 익숙해지면 쉽게 작성할 수 있는 것이 Nightwatch.js UI Testcase 입니다. 웹 서비스/애플리케이션이 실제로 동작한다고 가정하고 사용자의 행동을 기술하는 것이기 때문입니다. 위의 예에서는 서비스가 잘 만들어졌고, 원하는 대로 잘 동작하고 있는지 확인하는 부분이 바로 10번 라인입니다.

3. 채점 스크립트 작성해보기 #2

나이트워치를 이용하여 정답 판정은 테스트가 실패(fail)하거나 에러(error)가 하나라도 발생하면 오답, 그렇지 않으면 정답 판정을 내립니다. 오답이 나타나는 대표적인 케이스들에 대하여 하단에 열거하겠습니다.

  1. browser.waitForElementVisible(css_셀렉터, 최대_기다리는_시간_밀리세컨_단위) : 설정한 DOM이 기다리는 시간 내에 보이지 않을 경우, 실패

  2. browser.waitForElementPresent(css_셀렉터, 최대_기다리는_시간_밀리세컨_단위) : 설정한 DOM이 기다리는 시간 내에 존재하지 않을 경우, 실패

  3. browser.waitForElementNotVisible(css_셀렉터, 최대_기다리는_시간_밀리세컨_단위) : 설정한 DOM이 기다리는 시간 내에 보이지 않은 상태가 되지 않으면, 실패.

  4. browser.waitForElementNotPresent(css_셀렉터, 최대_기다리는_시간_밀리세컨_단위) : 설정한 DOM이 기다리는 시간 내에 존재하지 않은 상태가 되지 않으면 경우, 실패

  5. browser.assert : assert 뒤에 이어지는 구문의 조건이 만족되지 않으면 실패.

나이트워치 테스트 스크립트를 작성하다 보면, DOM을 지정해야 하는 경우가 많습니다. 나이트워치 API에서 DOM을 지정하기 위해서는 CSS 셀렉터나, XML의 Xpath를 이용해야 하는데, 여기 CSS 셀렉터에 대한 레퍼런스가 있습니다.

W3C는 월드 와이드 웹 컨소시움(World Wide Web Consortium)이라는 뜻으로, 웹 표준을 개발하고 장려하는 조직입니다.

Mozilla는 최초의 그래픽 웹 브라우저인 모자이크의 대를 잇는 자유 소프트웨어 커뮤니티입니다. 자바스크립트가 최초 적용된 넷스케이프 브라우저와도 연관이 깊습니다.

좀 더 깊은 이해를 위해 실제로 테스트 스크립트로 쓰이는 예제 스크립트 코드를 하단에 첨부했습니다.

해당 문제는 로그인 폼 처리하는 문제이며, 아래 스크립트 코드가 확인하는 기능은, 로그인이 된 이후에는 로그인 폼이 보이지 않게 되는 기능입니다.

  1. 사이트 접속

  2. 페이지가 로딩되고, id값을 입력하는 input이 나타날 때 까지 기다림

  3. id값 입력하는 input에 Anonymous라고 입력함.

  4. 로그인 버튼 클릭

  5. 잠시 기다림

  6. form 태그가 보이지 않는지 확인

var site_url;
module.exports = {
  'case' : function (browser) {
    site_url = browser.globals.server_url; 
    browser
        .maximizeWindow()
        .url(site_url)
        .waitForElementVisible('body', 2000)
        .waitForElementVisible('#id', 2000)
        .setValue('#id', 'Anonymous')
        .click('#login')
        .url(site_url)
        .pause(200)
        .waitForElementNotPresent('form', 2000)
  }
};

1~5번째 라인까지는 기본적으로 들어있는 템플릿 코드입니다. browser라는 객체의 메소드를 이용해서 테스트 케이스를 진행하면 됩니다. 라인 별로 설명을 하겠습니다.

  1. var site_url; : 어떤 사이트로 접속할 지 URL을 저장하기 위한 변수의 선언부입니다.

  2. module.exports = { : node.js의 문법으로써 사용자 모듈을 만드는 과정입니다. { 이하로 할당되었기 때문에 여러 테스트 메소드를 가지는 객체가 될 것입니다.

  3. 'case' : function (browser) { : 테스트 케이스의 이름과 거기에 할당되는 테스트 메소드입니다. 이 코드에서는 'case' 이라는 이름으로 작성이 시작되었습니다.

  4. site_url = browser.globals.server_url; : 구름EDU에서 자동으로 실행되는 웹 서버의 주소는 browser.globals.server_url이라는 곳에 그 값이 미리 들어가 있습니다. 따라서 비어있는 site_url에 채점하고자 하는 대상 웹서버 주소, 즉 수강자가 작성한 코드가 실행되는 웹 서버의 주소를 넣어주는 과정입니다.

  5. browser : Nightwatch.js 에서는 가상의 웹브라우저가 객체 형태로 각각의 테스트 메소드에 전달됩니다. 이 browser는 우리가 개념적으로 알고 있는 웹브라우저로서, 눈에 보이지는 않지만 마치 웹브라우저처럼 동작하는 가상의 객체라고 이해하면 됩니다.

  6. .waitForElementVisible('#id', 2000) : 8번째 라인의 메소드와 같으며, id값이 id인 태그를 최대 2초동안 기다린다는 뜻을 가지고 있습니다. 해당 문제는 id만 입력하여 로그인을 하는 문제이며, id값이 id인 태그는 사용자의 아이디를 입력하는 Text input태그입니다.

  7. .url(site_url) : url이라는 메소드는 7번째 라인의 내용과 같습니다.

위와 같은 방식으로 채점 스크립트를 작성하면 되며, 좀더 자세한 API들을 알고 싶으면 나이트워치 공식 홈페이지의 API 레퍼런스를 참조하시면 됩니다.

.maximizeWindow() : 는 테스트용 브라우저의 윈도우 화면을 최대화 하라는 뜻입니다. 화면이 작아서 웹 페이지가 모바일용 형태로 보인다던지 하는 예외상황을 막아줄 수 있습니다.

.url(site_url) : 는 해당 url로 이동하라는 뜻입니다.

.waitForElementVisible('body', 2000) : 는 첫번째 파라메터인 body태그가 보일 때까지 최대 2000밀리세컨(2초)동안 기다린다는 뜻입니다. 이 테스트 케이스에서 이 메소드는 해당 웹 url을 통해 접속을 하는데, 웹 페이지의 body 태그가 로딩될 때까지 최대 2초동안 기다린다는 맥락을 가지고 있습니다. 만약 2초 내에 body 태그가 보이지 않으면, 이 테스트 케이스는 실패로 끝나게 됩니다.

.setValue('#id', 'Anonymous') : 는 #id라는 셀렉터, 즉 id값이 id인 태그에 'Anonymous'라는 문자열 값을 입력하라고 하는 뜻을 가지고 있습니다. 만약 #id라는 셀렉터에 해당되는 DOM이 없다면 이 테스트 케이스는 에러로 끝나게 됩니다.

.click('#login') : 는 #login이라는 셀렉터, 즉 id값이 login태그를 클릭하라는 뜻을 가지고 있습니다. 만약 #login이라는 셀렉터에 해당되는 DOM이 없다면 이 테스트 케이스는 에러로 끝나게 됩니다.

.pause(200) : 는 200 밀리세컨(0.2초)만큼 잠시 멈추라는 뜻을 가지고 있습니다. 웹 페이지가 랜더링 되는 시간을 기다리는 부분입니다.

.waitForElementNotPresent('form', 2000) : 는 form 태그가 보이지 않게 될 때 까지 최대 2000밀리세컨 (2초)까지 기다린다는 뜻입니다. 로그인 한 뒤 form 태그가 보이지 않게 되는지 확인하는 부분입니다.

W3C CSS Selector Reference
Mozilla Developer Network CSS Selector Reference
maximizeWindow라는 메소드
url이라는 메소드
waitForElementVisible이라는 메소드
setValue라는 메소드
click이라는 메소드
pause라는 메소드
waitForElementNotPresent라는 메소드
Nightwatchjs API Reference
Nightwatch.js 공식 사이트