Example #1
0
        public void PlayWith(StudentLoginInfo student)
        {
            _login.submitUserLogin(student.TeacherLogin);
            _login.submitStudent(student.CourseName, student.StudentName, student.StudentPassword);

            _student.WaitShowingLevels(); //// info: esperar carregar os níveis antes de tentar ler eles
            string[] levelNames = _student.GetAllActiveLevels();

            for (var levelNameIndex = GetIndexOf(levelNames, ContinueFromLevel); levelNameIndex < levelNames.Length; levelNameIndex++)
            {
                var levelName = levelNames[levelNameIndex];

                _student.WaitShowingBookshelf(); //// info: esperar os livros estarem visivelmente na prateleira para o loader ser encerrado
                _student.ClickLevelByName(levelName);
                _events.OnEnterLevel(levelName);

                _student.WaitShowingBookshelf(); //// info: esperar os livros estarem visivelmente na prateleira
                string[] bookNames = _student.GetAllBookNames();

                for (var bookNameIndex = GetIndexOf(bookNames, ContinueFromBook); bookNameIndex < bookNames.Length; bookNameIndex++)
                {
                    var bookName = bookNames[bookNameIndex];
                    _student.WaitShowingBookshelf(); //// info: esperar os livros estarem visivelmente na prateleira

                    _student.ClickBookByName(bookName);
                    _events.OnEnterBook(bookName);

                    _events.OnEnterBookLoading(bookName);
                    _reader.WaitLoadingBook();
                    _events.OnLeaveBookLoading(bookName);

                    //// TODO: esperar carregar o DOM do js antes para ter certeza de que a tela carregou todos os elementos de UI
                    Thread.Sleep(3000);

                    if (_reader.IsOpenModalContinue())
                    {
                        _reader.ClickContinueRead();
                    }

                    while (!_reader.HasReachLastPage())
                    {
                        Thread.Sleep(_stayEachPage); //// info: dar tempo para simular a ação de ler o livro
                        _reader.GoToNextPage();
                    }

                    //// info: esperar o envio do último tempo ao servidor e a resposta se foi aprovado ou não
                    _reader.WaitFinishBook();

                    _reader.ClickToFinishBook();
                    if (_reader.HasOpenModalFinishBook())
                    {
                        _reader.GoToLibrary();
                        _events.OnLeaveBook(bookName);
                    }
                }

                _events.OnLeaveLevel(levelName);

                if (levelNameIndex == levelNames.Length - 1)
                {
                    levelNameIndex = -1; //// info: manter um ciclo contínuo de leitura
                    _events.OnReadAllBooks();
                }
            }
        }