diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..c74b0fa --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,17 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": ["standard", "prettier"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": { + "no-useless-constructor": "off" + }, + "ignorePatterns": ["node_modules"] +} diff --git a/.gitignore b/.gitignore index a31eedb..a7db917 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ node_modules -.DS_store \ No newline at end of file +courses.json \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..4541955 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,6 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run prettier +npm run lint +npm run prettier diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..89ad1d7 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,14 @@ +{ + "printWidth": 120, + "tabWidth": 4, + "proseWrap": "always", + "overrides": [ + { + "files": "*.json", + "options": { + "tabWidth": 4, + "useTabs": false + } + } + ] +} diff --git a/README.md b/README.md index 310669a..0b39c13 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,11 @@ # TestAutomationUniversity -Code project to automatically scrape and store course answers. You can then also submit them. +Project to automatically gather and submit course answers to the Test Automation University website. Run `npm run go` to +start. -DISCLAIMER: I didn't use it in ages, so I have no idea if this still works. +DISCLAIMER: Don't cheat. -DISCLAIMER2: Don't cheat. +TODO: + +1. Add github actions +1. Abstract API calls, so it is easier to have a try catch/retry on all API's. diff --git a/courses.json b/courses.json deleted file mode 100644 index 7dfeff4..0000000 --- a/courses.json +++ /dev/null @@ -1,24255 +0,0 @@ -[ - { - "id": "course0", - "title": "TAU - Open House", - "titleSlug": "demo-course", - "teacher": { - "profilePath": "angie_jones", - "twitter": "techgirl1908", - "name": "Angie Jones", - "photoURL": "angie.jpg" - }, - "level": "beginner", - "type": "demo", - "sortOrder": 0, - "abstract": "Learn about TestAutomationU itself", - "group": "demo_testing", - "releaseDate": "11/15/2018", - "duration": 5, - "chaptersCount": 5, - "learningPaths": [], - "status": "live", - "credits": 500, - "courseId": "course0", - "category": "Foundational Test Automation Courses", - "tags": [ - "beginner" - ], - "groupName": "Demo", - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "Test Automation U primarily provides courses focused on", - "type": "radio", - "answers": [ - "Test Automation", - "Manual Testing", - "Ninja fighting", - "Ice skating" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "How much is the tuition for Test Automation U", - "type": "radio", - "answers": [ - "Free", - "$100", - "$1000", - "$10,000" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Where do you take courses?", - "type": "radio", - "answers": [ - "Online", - "At a conference near me", - "At a local library", - "At an actual college" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "January 1, 2019", - "June 15, 2019", - "December 25, 2018", - "November 29, 2018" - ], - "question": "When is the first course scheduled to be released?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Setting the Foundation for Successful Test Automation", - "How to Design an Automation Strategy", - "The Whole Team Approach to Continuous Testing", - "Selenium 101" - ], - "question": "What is the name of the first course that is scheduled to be released?", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Who is the Test Automation U targeted towards?", - "type": "radio", - "answers": [ - "Anyone interested in test automation", - "Testers with programming knowledge", - "Expert automation engineers", - "Developers" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "How many instructors does Test Automation U currently have?", - "type": "radio", - "answers": [ - "10", - "1", - "3", - "5" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Jason Arbon", - "Angie Jones", - "Jonathan Lipps", - "Amber Race" - ], - "question": "Which instructor literally wrote the book on how Google tests software?", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Which instructor provides an active newsletter with Selenium tips and tricks?", - "type": "radio", - "answers": [ - "Dave Haeffner", - "Raja Rao", - "Elisabeth Hocke", - "Joe Colantonio" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "What is your current rank?", - "type": "radio", - "answers": [ - "Unicorn", - "Dragon", - "Kraken", - "Pegasus" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "How many credits does it take to earn the highest rank?", - "type": "radio", - "answers": [ - "15000+", - "12500", - "10000", - "500" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Yes!🤓", - "Not sure" - ], - "question": "Are you excited about Test Automation U?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "All the below answers", - "Best Test automation courses", - "Top industry professionals teaching the courses", - "Free courses", - "Badges, Ranks, Swags", - "Encourages constant learning" - ], - "question": "Why Test Automation U?", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course1", - "courseId": "course1", - "category": "Foundational Test Automation Courses", - "tags": [ - "beginner", - "foundation", - "ui", - "mobile", - "api", - "codeless" - ], - "groupName": "Foundational Testing", - "title": "Setting a Foundation for Successful Test Automation", - "titleSlug": "setting-a-foundation-for-successful-test-automation", - "teacher": { - "photoURL": "angie.jpg", - "profilePath": "angie_jones", - "twitter": "techgirl1908", - "name": "Angie Jones" - }, - "level": "beginner", - "sortOrder": 1, - "abstract": "Learn about tooling, future-proofing, testability and strategies for successful test automation", - "group": "foundational_testing", - "releaseDate": "01/01/2019", - "duration": 47, - "chaptersCount": 7, - "learningPaths": [ - "learningPathUIJava", - "learningPathUIJS", - "learningPathUICS", - "learningPathUIRuby", - "learningPathUIPython", - "learningPathMobileSwift", - "learningPathMobileJava", - "learningPathMobilePython", - "learningPathMobilePython", - "learningPathApiJava", - "learningPathApiJS", - "learningPathCodeless" - ], - "status": "live", - "credits": 700, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "answers": [ - "Release features faster", - "Enable continuous testing", - "Reduce regression testing time", - "Solve all quality issues" - ], - "question": "What is NOT a reasonable goal for test automation?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Which programming language to use", - "What's the goal of automation", - "How many people are needed", - "Which framework to use" - ], - "question": "What’s the first thing that should be decided before starting a new test automation initiative?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Authoring automated tests", - "Monitoring test results", - "Maintaining automated tests", - "All the above" - ], - "question": "Which of these tasks are associated with a test automation project?", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "question": "Which is NOT a consideration when determining who will write the automated tests?", - "type": "radio", - "answers": [ - "Person's capacity", - "Person's skill set", - "Person's seniority", - "Person's desire" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "It’s recommended that your very first automated test should be immediately added to continuous integration to begin gating developer check-ins:", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "question": "What’s the best approach for getting team buy-in for test automation?", - "type": "radio", - "answers": [ - "Communicate the goal, strategy, and opportunities for collaboration", - "Assign tasks to individuals", - "Force team members to contribute", - "All of the above" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "Automate tests", - "Provide business insight on which scenarios should be automated", - "Triage test failures", - "Evaluate test automation tools" - ], - "question": "Given the traditional role of a product owner, what’s the most probable way they can assist with test automation?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "They get to write more code", - "They are able to develop features with more confidence", - "They don’t need to worry about testing", - "None of the above" - ], - "question": "What’s a benefit of good test automation to product developers?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "Replace them", - "Slow them down", - "Assist them", - "Devalue them" - ], - "question": "How should test automation affect manual testers?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "Which of these team members can play a part in the success of test automation?", - "type": "radio", - "answers": [ - "Developer", - "Tester", - "Business analyst", - "All of the above" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "Code seams", - "UI element identifiers", - "Application shortcuts", - "Shopping carts" - ], - "question": "Which of the following does NOT improve test automatability?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "Services", - "UI", - "Unit", - "JavaScript" - ], - "question": "Which of the following is NOT a level of the Test Automation Pyramid?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "Which level should you automate your test at to have it execute as quickly as possible? ", - "type": "radio", - "answers": [ - "As close to the production code as possible", - "As far away from the production code as possible", - "The easiest level to get to", - "Any level" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "The absence of reliable element identifiers affects which type of tests? ", - "type": "radio", - "answers": [ - "Unit", - "Service", - "API", - "UI" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "question": "Which is NOT an example of utilizing a code seam?", - "type": "radio", - "answers": [ - "Navigating the UI just as a user would", - "Calling a business level function directly", - "Invoking an HTTP request to bypass the UI", - "Avoiding navigation by launching specific application pages" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "Which of these is a key consideration for choosing a tool for test automation?", - "type": "radio", - "answers": [ - "Who will be using them", - "Available support and resources", - "Compatibility with required programming languages, devices, and browsers ", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Developers use the same language", - "Easy to learn", - "Unsupported by most test automation tools", - "Great documentation" - ], - "question": "When considering a programming language for test automation, which factor may be a deterrent?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "Calling product-level functions", - "Making HTTP requests to product’s services", - "Navigating product’s UI", - "Reporting test results" - ], - "question": "Which of the following is NOT an example of automated tests interacting with the application?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Enable a test to pass or fail", - "Add tests to continuous integration", - "Make API calls", - "Navigate UI" - ], - "question": "The purpose of validation libraries is to:", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "Which of the following is NOT a consideration needed for future-proofing automated tests?", - "type": "radio", - "answers": [ - "Utilizing design patterns", - "Clean coding practices", - "Enabling parallel execution of tests", - "Keeping the source code on your machine" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "To run tests in parallel, your tests should:", - "type": "radio", - "answers": [ - "Be thread-safe", - "Rely on other tests", - "Modify shared test data when needed", - "Define shared objects/variables as static" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "Short tests", - "Excessive code duplication", - "Short methods", - "Efficient waiting techniques" - ], - "question": "Which of the following is a violation of clean coding practices?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "All of them", - "None of them", - "The ones that make sense for your project", - "Only one" - ], - "question": "To future-proof your tests, which design patterns should you use?", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "question": "What are some ways in which your automated tests may need to scale beyond your local machine?", - "type": "radio", - "answers": [ - "Different environments", - "Different devices", - "Different browsers", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "When scaling for different environments, the management of ______ should be considered.", - "type": "radio", - "answers": [ - "Environment-specific data", - "Programming languages", - "Test automation tools", - "APIs" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "What’s the best approach when choosing which browsers to execute on?", - "type": "radio", - "answers": [ - "The tests are automated; run on every browser!", - "Only run on the browser which is easiest to automate for", - "Consider your business needs and choose your browsers accordingly", - "Run in all browsers offered by your cloud provider" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "What considerations should be made for mobile test automation?", - "type": "radio", - "answers": [ - "Dealing with responsive layouts", - "Mobile apps developed by your organization", - "Appropriate automation tools", - "All of the above" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "question": "What’s the best way to avoid unrealistic expectations from your test automation initiative?", - "type": "radio", - "answers": [ - "Don’t set any expectations", - "Identify and communicate expectations early", - "Secretly set personal expectations", - "None of the above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Which of the following is NOT a reasonable return on your investment in test automation?", - "type": "radio", - "answers": [ - "Fast feedback", - "Faster development time", - "Shortened regression testing cycles", - "100% test coverage" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "Most benefits of test automation are seen after the first test is automated.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "The benefits of test automation cannot be measured.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "Test automation is a ________", - "type": "radio", - "answers": [ - "Side project", - "Software development project", - "Waste of time", - "Way to replace testers" - ], - "correctAnswerIndex": 1 - } - ] - } - ] - }, - { - "id": "course11", - "chaptersCount": 3, - "learningPaths": [ - "learningPathMobilePython", - "learningPathMobileJS", - "learningPathMobileJava" - ], - "status": "live", - "credits": 300, - "courseId": "course11", - "category": "Test Automation for Real World Problems", - "tags": [ - "mobile", - "advanced", - "ai", - "appium", - "locators" - ], - "groupName": "Real World Testing", - "title": "AI for Element Selection: Erasing the Pain of Fragile Test Scripts", - "titleSlug": "ai-for-element-selection-erasing-the-pain-of-fragile-test-scripts", - "teacher": { - "name": "Jason Arbon", - "photoURL": "jason_arbon.jpg", - "profilePath": "jason_arbon", - "twitter": "jarbon" - }, - "level": "advanced", - "sortOrder": 7, - "abstract": "Learn how you can use AI to automatically find elements and build a hard to break testing suite", - "group": "real_world_testing", - "releaseDate": "03/04/2019", - "duration": 22, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Source code", - "Document Object Model", - "Screenshot", - "None of the above" - ], - "question": "What does an AI Selector look at to find elements?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Appium is pluggable for other AI Selectors?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "Appium is pluggable for other non-AI Selectors?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "1", - "10", - "1000", - "Many thousands" - ], - "question": "How many elements were used to train the AI Selector?", - "type": "radio", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "answers": [ - "Karas", - "Appium", - "Kubernetes", - "TensorFlow" - ], - "question": "What is the name of Google’s open-source Machine Learning framework?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "MOBILENET is trained on what type of images?", - "type": "radio", - "answers": [ - "Random images and networks optimized for large cloud-compute resources", - "Pictures of Cats and Dogs", - "Pictures of Testers and Developers", - "Pictures and networks optimized for mobile devices" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "An integer value representing an aspect of an image", - "A floating point number between 0.0 and 1.0 representing an aspect of an image", - "A new user-facing feature in the application under test", - "The opposite of a bug" - ], - "question": "A feature is:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "How long does it take to train the classifiers?", - "type": "radio", - "answers": [ - "2 seconds", - "2 minutes", - "2 hours", - "2 days" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - "Examples of both positive and negative are useful", - "Examples of only positive are useful", - "Grab a coffee, it will be a while", - "Consider what it will be like when the machines can actually think, thanks to your training" - ], - "question": "When training a classifier:", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "answers": [ - "Run_model.py", - "Retrain.py", - "Py.py", - "Python 3" - ], - "question": "The command line to train the classifiers is:", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Add a folder with some pictures of the new custom element", - "Train another neural network to train this neural network and ask it to add the new classifier", - "Magic" - ], - "question": "How can you add a new type of classification for a custom object?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "It's OK to only have one example for the training process", - "You should get examples that look visually similar to your new element", - "You should get an additional example of elements that do not look similar, but functionally behave similarly to your element", - "You should just create different sizes and pixel depths of this one image for training" - ], - "question": "If you only have one image of the new element you’d like to classify, which of the following is true?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "How do you test your new classifier?", - "type": "radio", - "answers": [ - "Run your tests", - "Run ‘run_model.py’ pointing to an image of the new element", - "Run ‘run_model.py’ pointing to an image of the new element, and try other types of images used in the full training set to make sure those classifications haven’t degraded" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Machine Learning Engineer", - "Ninja", - "Hot Yoga Instructor", - "Artificial Intelligence" - ], - "question": "If you actually perform this process, you can re-title yourself:", - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course12", - "teacher": { - "photoURL": "amber_race.jpg", - "profilePath": "amber_race", - "twitter": "ambertests", - "name": "Amber Race" - }, - "level": "beginner", - "sortOrder": 2, - "abstract": "Learn about API testing and best practices related to that", - "group": "foundational_testing", - "releaseDate": "01/18/2019", - "duration": 77, - "chaptersCount": 4, - "learningPaths": [ - "learningPathApiJava", - "learningPathApiJS" - ], - "status": "live", - "credits": 400, - "courseId": "course12", - "category": "Foundational Test Automation Courses", - "tags": [ - "api", - "web services", - "postman", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "Exploring Service APIs through Test Automation", - "titleSlug": "exploring-service-apis-through-test-automation", - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "What does API stand for?", - "type": "radio", - "answers": [ - "Application Protection Interface", - "Application Programming Interface", - "Application Parameter Interface", - "Application Payload Interface" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Websites", - "Consumers", - "Developers", - "Bots" - ], - "question": "Who are the target “end users” for an API?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "Why is it important to separate API testing from UI testing?", - "type": "radio", - "answers": [ - "Because UI testing is too difficult", - "Because APIs are dependent on UIs", - "Because you can’t always see what an API is doing", - "Because the API can potentially be accessed outside of the UI" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "Request headers", - "Response body", - "Response cookies", - "All of the above" - ], - "question": "What API information is exposed in Web Developer Tools?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "question": "How does a proxy tool work?", - "type": "radio", - "answers": [ - "By sitting between your mobile device your internet connection", - "By logging all your mobile requests", - "By querying the target service", - "By exposing your information" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Copy all as HAR", - "Copy URL", - "Copy as cURL", - "Copy Request Headers" - ], - "question": "What can you use to get API information from Web Developer Tools into Postman?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "How can you organize requests in Postman?", - "type": "radio", - "answers": [ - "With Collections", - "In the History tab", - "Save as JSON", - "Export to File" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "Making the same request multiple times with POST will result in the same response, but PUT could be different each time", - "PUT is used to update data while POST can be used to create new data", - "PUT can update a resource with partial information, but POST cannot", - "PUT is only for creating resources and POST is only for modifying" - ], - "question": "What is the difference between a POST and a PUT?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Where are query parameters stored in a GET request?", - "type": "radio", - "answers": [ - "In the headers", - "In the request body", - "As a cookie", - "In the URL" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "question": "What is the Restful Booker API best used for?", - "type": "radio", - "answers": [ - "Supporting hotel booking sites", - "Demonstrating good API design", - "Practicing API test techniques", - "Looking up booking information" - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "By entering the variable name as [[var]]", - "By entering the variable name as {{var}}", - "By entering the variable name as ${var}", - "By entering the variable name as _var_" - ], - "question": "How do you access a Postman variable?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "What could potentially be entered as numeric parameter in a JSON request body?", - "type": "radio", - "answers": [ - "null", - "“abc”", - "9223372036854775807", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "What does a Cross-site scripting attack do?", - "type": "radio", - "answers": [ - "Injects a script that is executed on the server", - "Injects a script that is executed on the client", - "Retrieves hidden data from a database", - "Exposes passwords on the server" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "200 OK", - "404 Not Found", - "400 Bad Request", - "500 Internal Server Error" - ], - "question": "What is the best HTTP response code for a POST request with incorrect parameters?", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "What can you use in Postman to iterate a request 1000 times?", - "type": "radio", - "answers": [ - "Collection Runner", - "History", - "Test script", - "Local Environment" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "answers": [ - "Bash", - "Python", - "Ruby", - "JavaScript" - ], - "question": "What programming language is used for Postman tests?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "What will execute first in a Collection run?", - "type": "radio", - "answers": [ - "Pre-request scripts in the History tab", - "Pre-request scripts at the Folder level", - "Pre-request scripts at the Collection level", - "Pre-request scripts at the Request level" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "Why is it useful to create a new API resource before running tests?", - "type": "radio", - "answers": [ - "So you have an expected result for your action", - "So you can populate the database", - "To compare one resource against another", - "To make sure resource creation works" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "Lodash", - "Moment", - "UUID", - "All of the above" - ], - "question": "What are some of the JavaScript libraries available in Postman?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "answers": [ - "Jerry", - "Newman", - "Elaine", - "Kramer" - ], - "question": "What tool can you use to run Postman collections in Jenkins?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - } - ] - }, - { - "id": "course14", - "level": "Advanced", - "sortOrder": 4, - "abstract": "Learn about Docker and how to use it to easily scale your automation testing efforts", - "group": "real_world_testing", - "releaseDate": "02/01/2019", - "duration": 31, - "chaptersCount": 5, - "learningPaths": [ - "learningPathUIJava", - "learningPathUIJS", - "learningPathUICS", - "learningPathUIRuby", - "learningPathUIPython", - "learningPathMobileSwift", - "learningPathMobileJava", - "learningPathMobilePython", - "learningPathMobilePython", - "learningPathApiJava", - "learningPathApiJS", - "learningPathCodeless" - ], - "status": "live", - "credits": 500, - "courseId": "course14", - "category": "Test Automation for Real World Problems", - "tags": [ - "docker", - "parallel", - "advanced", - "ui", - "mobile", - "api", - "codeless" - ], - "groupName": "Real World Testing", - "title": "Scaling Tests with Docker", - "titleSlug": "scaling-tests-with-docker", - "teacher": { - "profilePath": "carlos_kidman", - "twitter": "CarlosKidman", - "name": "Carlos Kidman", - "photoURL": "CarlosKidman.jpg" - }, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "answers": [ - "They are faster and more lightweight than VMs", - "They allow you to package only what you need for a service", - "They create an entire operating system" - ], - "question": "Which is NOT true about containers?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "XML files", - "The \"blue prints\" to create containers", - "Used to hold services" - ], - "question": "Images are", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "Managing versions of services is manual and complex", - "Static environments because it's difficult to create environments", - "One small change requires the entire app to be tested", - "All of the above" - ], - "question": "Which are problems that containers can solve?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "To build, ship, and run business critical applications at scale by using containers", - "Just for test automation", - "To convert your monolith into microservices via the command-line" - ], - "question": "Docker is designed", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "You must have a Docker account to use Docker", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "The Docker whale icon appears in your taskbar after starting the Docker app", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Virtualization in the BIOS is mandatory for Windows", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Only the Command Prompt can be used for Docker commands", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Docker Engine, Grid, Firefox, Chrome", - "Grid, Hub, Browser Nodes", - "Docker Engine, Hub, Browser Nodes", - "Docker Engine, Grid, Hub, Browser Nodes" - ], - "question": "What are the main pieces of the setup of our Grid?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Docker Images at images.docker.com", - "Docker Hub at hub.docker.com", - "Docker Station at dockerstation.com", - "Docker Docker at dockerdocker.docker" - ], - "question": "Where do we get images from?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What is the Docker command to download images?", - "type": "radio", - "answers": [ - "docker pull", - "docker get", - "docker download", - "docker-pull" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "What is the Docker command to list your images?", - "type": "radio", - "answers": [ - "docker list", - "docker img", - "docker ps -a", - "docker images" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "question": "Which file is used for docker-compose up?", - "type": "radio", - "answers": [ - "compose.yml", - "docker-compose.xml", - "dockerfile", - "docker-compose.yml" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "answers": [ - "True", - "False" - ], - "question": "localhost:4444/grid/console is the URL to see your local Grid in a browser?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question7", - "question": "What is the docker-compose command to restart your Grid?", - "type": "radio", - "answers": [ - "docker-compose restart", - "docker-compose up -d", - "docker-compose update", - "docker-compose --restart" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "docker-compose teardown", - "docker-compose stop", - "docker-compose down" - ], - "question": "What is the docker-compose command to completely tear down the Grid?", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "answers": [ - "True", - "False" - ], - "question": "Tests should NOT share a WebDriver", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Tests should be dependent on each other", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which WebDriver class do we use for the Grid?", - "type": "radio", - "answers": [ - "ChromeDriver", - "FirefoxDriver", - "RemoteWebDriver", - "GridWebDriver" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "What was the URI we passed to the WebDriver to connect to the Grid?", - "type": "radio", - "answers": [ - "http://localhost:4444/wd/hub", - "http://localhost:8888/wd/hub", - "http://localhost:4444/grid/console", - "http://localhost:8888/grid/console" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "$ docker-compose scale chrome=10", - "$ docker-compose up -d --scale chrome=10", - "$ docker-compose chrome=10", - "$ docker-compose up chrome=10" - ], - "question": "If I wanted to scale my chrome containers to 10, which command would I use?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "A collection of Docker Engines joined into a cluster is called a", - "type": "radio", - "answers": [ - "Docker Cluster", - "Docker Swarm", - "Docker Stack", - "Docker Group" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "You can only use Virtual Machines in a Docker Swarm", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Manager Nodes can execute tasks like Worker Nodes", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Which is true about Docker Swarm?", - "type": "radio", - "answers": [ - "Swarm will maintain the Desired State for you automatically", - "Swarm will maintain the Actual State for you automatically", - "Swarm will periodically restart nodes for you automatically" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "docker swarm start", - "docker swarm create", - "docker swarm init", - "docker swarm initialize" - ], - "question": "Which Docker command is used to initialize a Swarm?", - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "question": "The token to add a Worker or Manager Node is the same", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "question": "Docker must be installed on each machine you want to join to the swarm", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "Swarm must be initialized before you can deploy your stack", - "Stack will initialize the Swarm for you", - "Stack works like docker-compose and even uses a .yml file for easy configuration" - ], - "question": "Which is NOT true about Docker Stack?", - "correctAnswerIndex": 1 - } - ] - } - ] - }, - { - "id": "course15", - "courseId": "course15", - "category": "Foundational Test Automation Courses", - "tags": [ - "c#", - "chsarp", - ".net", - "microsoft", - "selenium webdriver", - "beginner", - "ui" - ], - "groupName": "Foundational Testing", - "title": " Intro to Selenium WebDriver with .NET Core", - "titleSlug": "intro-to-selenium-webdriver-with-net-core", - "teacher": { - "photoURL": "nikolayAdvolodkin.png", - "profilePath": "nikolay_advolodkin", - "name": "Nikolay Advolodkin" - }, - "level": "beginner", - "sortOrder": 6, - "abstract": "Learn to write your very first automated script using Selenium WebDriver with .NET Core", - "group": "foundational_testing", - "releaseDate": "03/04/2019", - "duration": 45, - "chaptersCount": 5, - "learningPaths": [ - "learningPathUICS" - ], - "status": "live", - "credits": 500, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "Where can you download Visual Studio for Mac?", - "type": "radio", - "answers": [ - "https://visualstudio.microsoft.com/vs/mac/", - "https://mac.com", - "https://imac.com", - "https://google.com" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "What is .NET Core?", - "type": "radio", - "answers": [ - "A cross platform framework that allows you to write C# code for Windows, Mac, Linux", - "A C# framework designed by Microsoft for Mac", - "A .NET framework that runs only on Mac", - "A .NET framework that runs only on Mac and Linux" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Which framework do we use to write C# code in this course?", - "type": "radio", - "answers": [ - ".NET Core", - ".NET Framework", - ".C Framework", - ".Core .NET Framework" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "question": "What is MsTest?", - "type": "radio", - "answers": [ - "A reporting tool from Microsoft", - "A way for us to live our life", - "A cross platform UI automation framework", - "A unit testing framework" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "What is the attribute that tells us that we have a class that has tests in it?", - "type": "radio", - "answers": [ - "[TestClass]", - "[TestingClass]", - "[TestFixture]", - "[Class]" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "What is the attribute that tells us that we have a method that should be executed as a test?", - "type": "radio", - "answers": [ - "[TestClass]", - "[TestMethod]", - "[Test]", - "[UnitTest]" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "They should be private", - "They should have a class inside", - "They should be public", - "They should be protected" - ], - "question": "All test methods should be/have this so that they will run", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "What should be the return type for test methods?", - "type": "radio", - "answers": [ - "bool", - "string", - "void", - "int" - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "An internet browser", - "An API that allows us to manipulate a browser", - "A way to run many browsers at the same time", - "A way to drive the browser on the roads" - ], - "question": "What is Selenium WebDriver?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "What is one way to locate an element in the DOM?", - "type": "radio", - "answers": [ - "ID", - "Symbol", - "Localization name", - "Page it’s on" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "Have an Xpath", - "Have CSS attributes", - "Have a unique attribute", - "Be of a type Element" - ], - "question": "When locating an element in the DOM to manipulate, it should:", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "Selenium HQ", - "Simon Stewart", - "Angie Jones", - "Jason Huggins" - ], - "question": "Who created Selenium?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "4", - "8", - "12", - "1" - ], - "question": "Which version of Selenium will be the first to support W3C standard?", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "What is a NuGet package?", - "type": "radio", - "answers": [ - "A container full of caramel Nuget", - "NuGet is a free and open-source package manager designed for the Microsoft development platform", - "NuGet is a free and open-source package manager designed by the Selenium community", - "NuGet is a Selenium package" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "Selenium.WebDriver", - "Nuget.Open", - "Open.Nuget", - "Selenium.Nuget.Java.WebDriver" - ], - "question": "Which NuGet package do we need to install to use Selenium WebDriver API?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "FirefoxDriver", - "SafariDriver", - "EdgeDriver", - "ChromeDriver" - ], - "question": "Which of these is required for us to work with Selenium WebDriver and Chrome?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "driver.Navigate().PerformWebRequest(“www.google.com”);", - "driver.Navigate().Open(“www.google.com”);", - "driver.Navigate().GoToUrl(“www.google.com”);", - "driver.Navigate().Go(“www.google.com”);" - ], - "question": "Which of these commands will open a browser and browse to www.google.com?", - "type": "radio", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "Which class can be used to conditionally wait for the state of an element before proceeding?", - "type": "radio", - "answers": [ - "Selenium", - "ChromeWait", - "WebDriverWait", - "SeleniumWait" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Which method is used for typing text into in field?", - "type": "radio", - "answers": [ - "TypeKeys()", - "SendKeys()", - "EnterKeys()", - "AliciaKeys()" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Tap()", - "Enter()", - "Flick()", - "Click()" - ], - "question": "Which method is used to click on a button?", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "LocateElements", - "FindElements()", - "By", - "SeleniumElements" - ], - "question": "Which Selenium class is used to locate elements?", - "type": "radio", - "correctAnswerIndex": 2 - } - ] - } - ] - }, - { - "id": "course16", - "level": "beginner", - "sortOrder": 7, - "abstract": "Learn to automate your API tests using REST Assured", - "group": "foundational_testing", - "releaseDate": "03/08/2019", - "duration": 60, - "chaptersCount": 6, - "learningPaths": [ - "learningPathApiJava" - ], - "status": "live", - "credits": 600, - "courseId": "course16", - "category": "Foundational Test Automation Courses", - "tags": [ - "api", - "web services", - "java", - "rest-assured", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "Automating your API tests with REST Assured", - "titleSlug": "automating-your-api-tests-with-rest-assured", - "teacher": { - "photoURL": "bas_dijkstra.png", - "profilePath": "bas_dijkstra", - "name": "Bas Dijkstra" - }, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "answers": [ - "A Java library for testing browser applications", - "A domain specific language for testing RESTful APIs", - "A Python library for testing Gherkin files", - "A JavaScript plugin for testing SOAP APIs" - ], - "question": "What is REST Assured?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "Golang", - "Java", - "Python", - "All of the above" - ], - "question": "For what programming language(s) is REST Assured available?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Using the ‘Run tests’ button in the REST Assured GUI", - "Through the dedicated REST Assured test runner", - "REST Assured tests run on top of an xUnit testing framework, such as JUnit or TestNG", - "By invoking the REST Assured REST API" - ], - "question": "How are REST Assured tests run?", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "Using GitHub", - "Using only Gradle", - "Using only Maven", - "Using Gradle or Maven" - ], - "question": "How can you add REST Assured as a dependency to your test project?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "question": "What is the minimum number of lines of code that you need to create a basic REST Assured test that includes creating the request, performing the HTTP call and performing a check on the response status code? Hint: Only count the number of lines of code in the body of the test method; the method signature does not count to the total.", - "type": "radio", - "answers": [ - "1", - "2", - "3", - "4" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "JsonPath", - "GPath", - "XPath", - "XmlPath" - ], - "question": "What query language is used to extract response body elements from an XML response in a REST Assured test?", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "Which of these can NOT be used to extract response body elements from a JSON response in a REST Assured test?", - "type": "radio", - "answers": [ - "GPath", - "XPath", - "JsonPath" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which of these is a syntax or pattern that you can use to write REST Assured tests?", - "type": "radio", - "answers": [ - "The Arrange-Act-Assert pattern", - "The Gherkin syntax (Given/When/Then)", - "The Page Object pattern", - "The Object Repository pattern" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Which of the following is an invalid way to check that the content type of an API response body is in the JSON format?", - "type": "radio", - "answers": [ - "then().assertThat().contentType().equalTo().JSON();", - "then().assertThat().contentType(ContentType.JSON);", - "then().assertThat().contentType(“application/json”);" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "Which of the following fragments will log all details of an API response?", - "type": "radio", - "answers": [ - "given().log().all()", - "given().log().body()", - "then().log().all()", - "then().log().body()" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "answers": [ - "Query a response body for an individual element and check the size of the collection that the element is part of", - "Query a response body for an individual element and check its value against an expected value", - "Query a response body for a collection of elements and check the size of the collection", - "Query a response body for a collection of elements and check whether an individual value is in the obtained list of elements values" - ], - "question": "What can you NOT do with JsonPath and Hamcrest matchers in REST Assured?" - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "Only query parameters", - "Only path parameters", - "Both query and path parameters", - "REST Assured does not support parameters" - ], - "question": "What kind of REST API parameters does REST Assured support?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "When you want to run the same test for different combinations of input parameters and expected outcome values", - "When you want to be able to quickly add new test data combinations and change existing combinations without having to touch the test code logic", - "When you want to avoid duplicated code", - "All of the above" - ], - "question": "When is it a good idea to parameterize your REST Assured tests?" - }, - { - "id": "question3", - "question": "Which statement is NOT true about the @DataProvider mechanism?", - "answers": [ - "It returns a two-dimensional array containing all of the data values that you can use in your REST Assured tests", - "The name of the method annotated with @DataProvider has to match the value specified in the @UseDataProvider(“”) to enable your REST Assured tests to access the test data values", - "The @DataProvider mechanism as shown is built into both JUnit 4 (the version used in the course) and TestNG by default", - "When you have parameterized your REST Assured tests, you only need to add another combination of test data values to the two-dimensional array returned by your @DataProvider method to create a new test iteration" - ] - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "By name", - "By value", - "By data type", - "By the order in which they appear" - ], - "question": "In what way are the test data values as they are specified in the two-dimensional test data array mapped to the arguments of your test method?", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "What can you NOT do with a RequestSpecification in REST Assured?", - "type": "radio", - "answers": [ - "Specify a base URL for all API requests that use the RequestSpecification", - "Specify a base path for all API requests that use the RequestSpecification", - "Specify an expected HTTP status code for all API requests that use the RequestSpecification", - "You can do all of the above with a RequestSpecification" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "What extract() mechanism? REST Assured does not have this feature", - "Extracting an authentication token from an API response body so it can be reused for subsequent API calls", - "Extracting the status code of the API response for further inspection", - "Extracting the API request body so it can be reused in another test run the following day" - ], - "question": "What is a typical use case for using the extract() mechanism in REST Assured?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "To avoid duplicated code and unnecessary test maintenance effort", - "To allow you to define a check on an API response once and reuse it in all tests where you would like to perform that check", - "To make your test code cleaner and easier to understand", - "All of the above" - ], - "question": "Why would you use the RequestSpecification and/or the ResponseSpecification mechanisms ?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "question": "Can you add checks on an API response that are specific to a single test method when you’re also using general checks that are defined in a ResponseSpecification?", - "type": "radio", - "answers": [ - "Yes, these two concepts can be combined without trouble", - "Yes, but adding a specific check on the API response body if the ResponseSpecification also contains a check on the API response body will result in an error at runtime", - "No, you will have to write to separate test methods if you want to do this", - "No, trying to do so will result in a syntax error" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "How does REST Assured determine how to process an API response if you don’t tell it how to do so explicitly? ", - "type": "radio", - "answers": [ - "Using Artificial Intelligence", - "By prompting you during a test run to select the correct API response format from a list", - "Using the response content type", - "It will default to JSON" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "Use a pound character directly in front of the attribute name (#attribute)", - "Use an at character directly in front of the attribute name (@attribute)", - "Use an ampersand character directly in front of the attribute name (&attribute)", - "XmlPath cannot work with XML attributes" - ], - "question": "What’s the notation used to select an XML attribute in XmlPath?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "That’s impossible", - "By concatenating a series of XmlPath (or JsonPath) expressions, then using a single Hamcrest matcher", - "By concatenating a series of Hamcrest matchers", - "By using a filter in your XmlPath (or JsonPath) expression that extracts the desired set of elements from your response, then using a single Hamcrest matcher" - ], - "question": "How can you check that the value of a number of elements in an XML (or JSON) response is the same, all in one go?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "question": " Which special index points to the last element in a list of elements selected by an XmlPath query?", - "answers": [ - "999", - "-1", - "MaxIndex", - "∞" - ] - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - " Pretty Obtrusive Java Obfuscator – A mechanism to automatically encode passwords in your Java code", - "Python On, Java Off – A mechanism to be able to include Python in your Java code to make it easier to write Machine Learning applications", - "Plain Old Java Object – One of the simplest forms of a Java object, containing properties and methods to access and modify the values of these properties", - "Partially Optimistic Java Operator – A new feature in Java 11 that allows you to assign a ‘maybe’ value to a Boolean variable" - ], - "question": "What is a POJO?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "Deserialization is the process of creating an API request body (be it either in XML or JSON format) from a POJO", - "Deserialization is the process of creating a POJO from an API response", - "Serialization is the process of creating an API request body (be it either in XML or JSON format) from a POJO", - "Serialization works for JSON as well as for XML" - ], - "question": "Which of these statements is NOT true?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Do the names of the elements in a JSON request or response have to match the names of the POJO properties exactly?", - "answers": [ - "Yes", - "No, REST Assured applies heuristics to determine which JSON element matches any given POJO property", - "No, you can specify regular expressions to map JSON elements to POJO property names", - "No, you can use the @JsonProperty annotation to map a POJO property to a JSON element and vice versa" - ] - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "given().contentType(ContentType.JSON).body(myObject)", - "given().serializeToJson(myObject)", - "when().get(“endpoint”).using().serializedAsJson(myObject)", - "given(myObject).contentType(ContentType.JSON)" - ], - "question": "Which snippet is correct when you want to serialize a POJO that goes by the name of myObject to a JSON API request body in REST Assured?", - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course17", - "sortOrder": 8, - "abstract": "Learn to execute and verify your automated tests with TestNG", - "group": " foundational_testing", - "releaseDate": "03/20/2019", - "duration": 116, - "chaptersCount": 9, - "learningPaths": [ - "learningPathUIJava" - ], - "status": "live", - "credits": 900, - "courseId": "course17", - "category": "Foundational Test Automation Courses", - "tags": [ - "beginner", - "ui", - "java", - "testng", - "assertions" - ], - "groupName": "Foundational Testing", - "title": "Introduction to TestNG", - "titleSlug": "introduction-to-testng", - "teacher": { - "photoURL": "rex_jones_II.png", - "profilePath": "rex_jones_II", - "name": "Rex Jones II" - }, - "level": "beginner", - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "What does TestNG stands for?", - "type": "radio", - "answers": [ - "Test New Generation", - "Test Next General", - "Test Next Generation", - "Test New General" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "A structure for creating web applications", - "A pattern for writing and running test scripts", - "A structure for unit testing", - "A pattern for updating test scripts" - ], - "question": "What is a test framework?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "xUnit is a name for a compilation of Unit Testing Frameworks", - "xUnit is a name for all Test Frameworks", - "xUnit is a popular framework that can perform Cross Browser Testing, Data Driven Testing, Functional Testing and more importantly Unit Testing ", - "xUnit became popular after releasing PyUnit" - ], - "question": "Which answer is true about the xUnit family of frameworks?" - }, - { - "id": "question4", - "question": "Which of the following is NOT an action that can be done via a test framework?", - "type": "radio", - "answers": [ - "Executing test scripts", - "Reading test data", - "Producing logs from the application under test", - "Generating test reports" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - "TestNG influenced JUnit to include more concepts in JUnit 4", - "TestNG was released before the xUnit family of frameworks", - "TestNG can create test scripts, execute test scripts, generate test reports, and generate logs", - "TestNG can perform data-driven testing, cross browser testing, and integration testing" - ], - "question": "Which answer is false about TestNG?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "answers": [ - "Integrated Design Environment", - "Integrated Design Edition", - "Integrated Development Environment", - "Integrated Development Edition" - ], - "question": "What does IDE stand for?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Which IDE is NOT compatible with TestNG?", - "type": "radio", - "answers": [ - "Microsoft Visual Studio", - "NetBeans", - "Eclipse", - "IntelliJ IDEA" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "TestNG can be integrated with build tools such as Ant and Maven.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "Using an IDE is the only way to set up TestNG." - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "Which of these denotes an annotation?", - "answers": [ - "Exclamation Mark (!)", - "At Symbol (@)", - "Percent Sign (%)", - "Hyphen (-)" - ] - }, - { - "id": "question10", - "answers": [ - "True", - "False" - ], - "question": "Multiple methods within the same class can be annotated with the same annotation." - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "An annotation that begins with Config", - "An annotation that begins with Before", - "An annotation that begins with DataProvider", - "An annotation that begins with Test" - ], - "question": "Which of the following is an example of a configuration annotation?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which of the following is an example of a post-condition annotation?", - "type": "radio", - "answers": [ - "Finally", - "AfterSuite", - "Previously", - "BeforeMethod" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "Annotations must be placed in the order you would like them to be executed.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "BeforeSuite", - "BeforeMethod", - "BeforeTest", - "BeforeClass" - ], - "question": "Which annotation has the highest rank?", - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "Which annotation is executed immediately before a test method is executed?", - "type": "radio", - "answers": [ - "BeforeMethod", - "BeforeTest", - "BeforeClass", - "BeforeSuite" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question7", - "answers": [ - "The number of tests executed within a class", - "The number of tests executed within a suite", - "The number of classes executed within a suite", - "The total number of classes within a project" - ], - "question": "Which of these determines the number of times a method that is annotated as AfterClass will be executed?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "After all test methods are executed", - "After each individual test method is executed", - "After a class of test methods are executed", - "After the first test of the suite fails" - ], - "question": "When are methods that are annotated as AfterSuite executed?", - "correctAnswerIndex": 0 - }, - { - "id": "question9", - "question": "What is the difference between AfterTest and AfterMethod annotations?", - "type": "radio", - "answers": [ - "AfterTest runs after each method that is annotated as Test. AfterMethod runs after every method even if there is no annotation", - "AfterTest runs after all methods that are annotated as Test. AfterMethod runs after each method that is annotated as Test", - "AfterTest and AfterMethod are synonymous and both work the same", - "AfterTest runs if the test passes. AfterMethod runs if the test fails" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "answers": [ - "It is used to store data about the tests to execute", - "It enables the tests to run on continuous integration", - "It is used to install TestNG", - "It specifies the configurations" - ], - "question": "What’s the purpose of a TestNG xml file?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "", - "", - "", - "" - ], - "question": "A tag can contain one or more _____ tags", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "A tag can contain one or more _____ tags", - "answers": [ - "", - "", - "", - "" - ] - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "", - "", - "", - "" - ], - "question": "Which tag appears first in a TestNG xml file?", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "Which tag can contain one or more tags?", - "type": "radio", - "answers": [ - "", - "", - "", - "" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "The purpose of the priority attribute is to determine the execution order of _______.", - "type": "radio", - "answers": [ - "DataProvider annotations", - "Configuration annotations", - "Test methods", - "BeforeTest methods" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "In which order does TestNG execute test methods that contain a priority attribute?", - "type": "radio", - "answers": [ - "Ascending numerical order", - "Descending numerical order", - "Ascending alphabetical order", - "Descending alphabetical order" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "In which order does TestNG execute test methods that do not contain a priority attribute? ", - "type": "radio", - "answers": [ - "In random order", - "By method name in ascending order", - "By method name in descending order", - "In the order that the method appears within the class" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Only methods can be annotated as Test.", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "Which of the following must be true for methods to be considered tests within a class annotated as Test?", - "type": "radio", - "answers": [ - "The tests must also be annotated as Test", - "The tests must be public", - "The tests must have the priority attribute", - "The tests must be listed in the order they should be executed" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "question": "What is the purpose of assertions?", - "type": "radio", - "answers": [ - "To verify if a test passed or failed", - "To specify the order the test should be executed in", - "To catch any exceptions that may be thrown during the test", - "To group tests within a suite" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question10", - "question": "Is it recommended to use hard asserts or soft asserts for test automation?", - "type": "radio", - "answers": [ - "hard asserts", - "soft asserts", - "neither", - "both" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question11", - "question": "The assertAll method is used with_____?", - "type": "radio", - "answers": [ - "hard asserts", - "soft asserts", - "neither", - "both" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "checkTrue", - "verifyTrue", - "assertTrue", - "isTrue" - ], - "question": "Which assertion method should be used to check if a condition is positive?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "Which assertion method should be used to check for equality?", - "type": "radio", - "answers": [ - "assertEquals", - "verifyEquals", - "checkEquals", - "isEqual" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "checkForNull", - "assertNotNull", - "verifyNullFalse", - "isNotNull" - ], - "question": "Which assertion method verifies that an object is not null?", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "Expected result", - "Actual result", - "Message", - "Test name" - ], - "question": "Which one of the following is NOT an argument for an assertion method?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "A TestNG class that enables JUnit assertions to continue to work if there is a migration to TestNG", - "A JUnit class containing all assertion methods", - "A Junit package that can be installed separately and integrated with TestNG", - "A utility class that automatically asserts all of your test methods without any extra code added to the tests" - ], - "question": "What is AssertJUnit?", - "correctAnswerIndex": 0 - }, - { - "id": "question7", - "answers": [ - "If the assertion fails", - "If the assertion passes", - "If the assertion is skipped", - "If the assertion is executed" - ], - "question": "When is the assertion message presented to the user?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "question": "What is a hard assert?", - "type": "radio", - "answers": [ - "An assertion that skips any tests that have duplicate assertions", - "An assertion that stops execution of the current annotation upon failure", - "An assertion that stops execution of the entire test suite upon failure", - "An assertion that verifies hard-coded values only" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "question": "What is a soft assert?", - "type": "radio", - "answers": [ - "An assertion that still continues on to the next assertion even upon failure", - "An assertion that skips the verification in case of error", - "An assertion that verifies boolean values only", - "An assertion that prevents the test from completing" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "question": "What is dependency testing in TestNG?", - "type": "radio", - "answers": [ - "Validating the maven or gradle dependencies that need to be added to an automation project", - "Validating the third party products that an application depends upon", - "When two or more actions, tasks, or functions depend on the order of their methods", - "When a dependent application is assumed to be tested before the current application under test" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question10", - "answers": [ - "True", - "False" - ], - "question": "Members of a group cannot belong to any other groups.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question11", - "question": "Which of the following is able to depend on groups?", - "type": "radio", - "answers": [ - "Test methods", - "Other groups", - "Classes", - "Suites" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question12", - "question": "Which of the following allow the execution of groups at runtime?", - "type": "radio", - "answers": [ - "XML file", - "Command line", - "Ant", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Failed", - "Passed", - "Skipped", - "Ignored" - ], - "question": "If a test fails, what is the default status of other tests that depend on the failed test?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "What is a cascade of failures?", - "type": "radio", - "answers": [ - "When at least two failures cause the remaining tests to fail", - "When one failure causes the remaining tests to fail", - "When five skips cause a test to fail", - "None of the above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "Test annotation", - "Configuration annotation", - "Attribute", - "Method" - ], - "question": "dependsOnMethods is a(n)", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "How do you specify which methods a test should depend on?", - "type": "radio", - "answers": [ - "By method names", - "By method annotations", - "By method priority", - "By method link" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "A test can only depend on one method?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "answers": [ - "", - "", - "", - "" - ], - "question": "Which xml tag can you use to prevent a test from executing?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "All tests within scope will be executed regardless of groups", - "No groups will be executed", - "Only tests that are not a part of a group will be executed", - "An error will occur" - ], - "question": "If a tag is empty, which of the following will occur?", - "correctAnswerIndex": 0 - }, - { - "id": "question9", - "answers": [ - "Test methods", - "Variables", - "Test results", - "Classes" - ], - "question": "What does the group attribute add to a list?", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter8", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Ability to pass an unlimited number of values to a test method", - "Allow the test method to be invoked with different data sets", - "Verify the name of a test method" - ], - "question": "Which is NOT a purpose of data-driven testing?", - "correctAnswerIndex": 2 - }, - { - "id": "question10", - "answers": [ - "True", - "False" - ], - "question": "A data provider annotation is required to have a name.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "BeforeTest", - "BeforeMethod", - "DataProvider ", - "TestData" - ], - "question": "Which annotation is used to supply test data to a test method?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "Method", - "Class", - "XML file", - "Jar file" - ], - "question": "The test data for data-driven testing is provided via a _______?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "List", - "Array", - "Map", - "Tree" - ], - "question": "Which data structure holds test data for data-driven testing?", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "String", - "Integer", - "Boolean", - "Any data type" - ], - "question": "Test data must be in the form of which data type?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "answers": [ - "To specify the name of the source that will provide the test data", - "To specify the test data itself", - "To specify the order in which the test data should be processed", - "To specify the data file" - ], - "question": "What is the purpose of the dataProvider attribute?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "All data entries are combined and executed as a single test", - "Each data entry is considered a separate test", - "Each data entry is dependent upon the preceding entry", - "Multiple entries are not supported" - ], - "question": "How does TestNG handle the execution of data-driven testing?", - "correctAnswerIndex": 1 - }, - { - "id": "question8", - "answers": [ - "True", - "False" - ], - "question": "The data provider and test method must exist within the same class.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "answers": [ - "True", - "False" - ], - "question": "A data provider can only be used by one test method.", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter9", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "To specify the name and value of a variable to be used within tests", - "To specify which browser to run against", - "To specify which tests should be run", - "To specify the location of the test data" - ], - "question": "What is the purpose of the tag within the XML file?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": " If tag with the same name appears within both the suite and the test, what will occur?", - "type": "radio", - "answers": [ - "The value specified within the suite will be used", - "The value specified within the test will be used", - "Both values will be used by executing the test twice", - "An error will occur" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "When should you use a parameter at the suite level", - "type": "radio", - "answers": [ - "When the parameter will be used by multiple tests", - "When the parameter’s value will need to change within every test", - "When the parameter’s value is unknown until runtime", - "When the parameter will be used by multiple suites" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "How does the value from a tag get passed to the test method?", - "type": "radio", - "answers": [ - "Via the DataProvider annotation", - "Via the Parameters annotation", - "Via the Variable annotation", - "By default. No annotation required." - ], - "correctAnswerIndex": 1 - } - ] - } - ] - }, - { - "id": "course18", - "teacher": { - "name": "Elisabeth Hocke", - "linkedIn": "", - "photoURL": "elisabeth.jpeg", - "profilePath": "lisi_hocke", - "twitter": "lisihocke" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn to achieve continuous testing even without an automation expert", - "group": "real_world_testing", - "releaseDate": "03/29/2019", - "duration": 63, - "chaptersCount": 7, - "learningPaths": [ - "learningPathUIJava", - "learningPathUIJS", - "learningPathUICS", - "learningPathUIRuby", - "learningPathUIPython", - "learningPathMobileSwift", - "learningPathMobileJava", - "learningPathMobilePython", - "learningPathMobilePython", - "learningPathApiJava", - "learningPathApiJS", - "learningPathCodeless" - ], - "status": "live", - "credits": 700, - "courseId": "course18", - "category": "Test Automation for Real World Problems", - "tags": [ - "beginner", - "foundation", - "ui", - "mobile", - "api", - "codeless" - ], - "groupName": "Real World Testing", - "title": "The Whole Team Approach to Continuous Testing", - "titleSlug": "the-whole-team-approach-to-continuous-testing", - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "What is the core of continuous testing?", - "type": "radio", - "answers": [ - "Testing 24/7 without stopping", - "Continuously running automated tests on production", - "Running many different types of tests—both manual and automated—continually throughout the delivery process", - "No idea, this is why I took the course!" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "When it comes to the software delivery workflow, where does the feedback we get from automation fit in best?", - "type": "radio", - "answers": [ - "At the end when the feature is implemented", - "At any step where it helps your team provide value", - "Only while we are in development and testing environments", - "When building a new increment in our CI tool" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What are the benefits of continuous testing?", - "type": "radio", - "answers": [ - "Fast feedback", - "Continuous learning", - "Increased confidence in releases", - "Faster time to market", - "All of the above" - ], - "correctAnswerIndex": 4 - }, - { - "id": "question4", - "question": "It’s all about learning fast, so we want to get rid of feedback loops.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "What is a good first step on your way to testing throughout the workflow as well as a great exercise to do from time to time?", - "type": "radio", - "answers": [ - "Sit with your team", - "Visualize how your delivery process looks as of now and which questions testing tries to answer at which step", - "Brainstorm challenges and problems you see", - "Come up with experiments what to improve next", - "All of the above" - ], - "correctAnswerIndex": 4 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "question": "According to the whole team approach, who is responsible for quality and testing?", - "type": "radio", - "answers": [ - "The testers", - "The product team", - "The product owner", - "All developers", - "The customers" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "What can happen if you have only one person in the team who’s taking care of testing?", - "type": "radio", - "answers": [ - "They feel like a rockstar", - "They don’t want to test anymore", - "They get overloaded with work", - "They are tired of clicking around" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Having very flexible strategies when testing depending on the context", - "Continuously changing your approach of testing your target", - "Collaborative testing practices that occur continuously focusing on delivering value frequently", - "Giving feedback all the time, from inception to delivery and beyond", - "Including the whole team when testing the end product" - ], - "question": "What describes the core of agile testing best?", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "How can you coach the team to improve their testing?", - "type": "radio", - "answers": [ - "By telling people what to do", - "By asking them lots of questions", - "By giving lectures and expecting them to take over", - "By using a mixture of formats, including pair testing with them on hands-on tasks" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "The whole team", - "The testers", - "The developers", - "The product owner" - ], - "question": "According to the whole team approach, who‘s responsible for automation in the team?", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "True – Automation development is a serious development endeavor on its own. You need an expert in your team to do the work.", - "False – There are ways to cope with the situation and still get it done." - ], - "question": "No expert at hand? We are doomed.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "What should you focus on when you start learning about automation?", - "type": "radio", - "answers": [ - "Start by learning programming", - "It depends on your context", - "Start learning the most popular automation frameworks and tools", - "Start learning about build pipelines" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Read books, they always provide the best knowledge source as they are edited", - "Just use the internet, there are a lot of resources available for free", - "Always learn together with others, alone you will get stuck", - "At work", - "Find your own way of learning that helps you succeed" - ], - "question": "What is the absolute best way learn about automation?", - "correctAnswerIndex": 4 - }, - { - "id": "question4", - "question": "To improve your automation skills you need to practice hands-on, getting your hands dirty.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "Which is the best advice when setting up automation in your team?", - "type": "radio", - "answers": [ - "Lower the entrance barriers for the whole team", - "Choose the programming language you yourself are most familiar with" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "What does working solo mean?", - "type": "radio", - "answers": [ - "You work on your task mainly on your own", - "You write automation after everything else is finished", - "You are sitting alone, away from your team" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "You do a lot of things and feel productive, but the highest priority story is still not released", - "You have to wait for others to become available so your questions get answered", - "You have to switch context a lot of times", - "Only you know which test data to use", - "All of the above" - ], - "question": "What kinds of problems can occur when working solo?", - "correctAnswerIndex": 4 - }, - { - "id": "question3", - "question": "What can you do to avoid bottlenecks when working asynchronously?", - "type": "radio", - "answers": [ - "Leave slack time in your schedule to provide fast feedback", - "Implement strict handover rules from development to testing", - "Continuously ping people to get faster answers on your questions" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Walk the team through your automation setup and answer all questions", - "Nothing special, just have team members ask you in case they need support", - "Hand out books for everyone so they can read things themselves" - ], - "question": "What can you do to spread automation knowledge in your team?", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "Start a testing community to share knowledge across teams", - "Have lunch and learn sessions where you give lightning talks about automation for anyone who‘s interested", - "Facilitate hands-on workshops for other teams so they can experience your automation solution hands-on", - "All the above" - ], - "question": "What can you do to spread automation knowledge in your company?", - "type": "radio", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "answers": [ - "You have the knowledge of two persons available and are less likely to get blocked", - "Only one person has to work, the other one can sit back and relax", - "You need less computers, one for two is enough", - "If one person gets sick, the other one cannot work either and enjoys a free day" - ], - "question": "What is one benefit of pairing over working solo?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Traditional style, informal style, remote pairing, strong-style", - "Informal style, macaron-style, two-keyboards-style, strong-style", - "Informal style, remote pairing, strong-style, pear-style, traditional style", - "Traditional style, informal style, remote pairing, strong-style, pear-style, two-keyboards-style", - "Two-keyboards-style, traditional style, remote pairing, strong-style, informal style" - ], - "question": "Which ways of pairing have been mentioned in this course?", - "correctAnswerIndex": 4 - }, - { - "id": "question3", - "answers": [ - "The navigator is in the power position and can decide on everything, also staying in this role", - "The driver can decide to listen to the navigator or just ignore what they say and go ahead with their own solution", - "For an idea to go from your head into the computer, it must go through someone else’s hands" - ], - "question": "What is strong-style pairing?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "Exploratory testing", - "Debugging an issue you found", - "Implementing a new automation scenario", - "Finding the root cause for a problem reported by a user", - "All of the above" - ], - "question": "In which situations can pairing help by generating more ideas, faster?", - "type": "radio", - "correctAnswerIndex": 4 - }, - { - "id": "question5", - "question": "With whom can you pair on automation?", - "type": "radio", - "answers": [ - "Only with your fellow tester on the team as pairing requires automation knowledge", - "With anyone interested in any role, on any team, in any company", - "It’s best to pair with developers on your team to combine testing and programming knowledge" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "question": "What is the mob approach?", - "type": "radio", - "answers": [ - "The whole team cleaning the office", - "The whole team working on automation", - "The whole team working on the same thing, at the same time, in the same space, on the same computer", - "The whole team working in their own office in front of a big screen, collocated, on the same task, in parallel on several computers", - "All of the above" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "True", - "Fasle" - ], - "question": "Mob programming cannot be productive, yet is effective.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Everyone is synchronized all the time", - "Implicit knowledge becomes obvious and is instantly shared with the whole team", - "Only two persons have to work, the rest can relax", - "You can quickly onboard new people", - "All of the above", - "Answers a, b, d apply" - ], - "question": "What are the benefits of mob programming?", - "correctAnswerIndex": 5 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Read about mob programming and try facilitating a mob yourself", - "Watch an introduction video about mob programming and try facilitating a mob yourself", - "Participate in a mob yourself at a meetup or conference and try facilitating a mob yourself", - "All options above, as long as you try facilitating a mob yourself" - ], - "question": "How to get started?", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "Only when new people join your team", - "Whenever it helps your team to turn up the good", - "Friday afternoons for learning", - "The whole week, 9 to 5", - "You can mob any time besides when stakeholders might witness it", - "Every time you have a programming task at hand" - ], - "question": "When is it a good time to mob?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Best practices can always be applied to software development, no matter the domain", - "Your context is unique so you have to try things out and see what works in your context", - "If the experts tell you this is how it‘s done nowadays, then you should jump on the bandwagon" - ], - "question": "Which of the following statements is true?", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Which other practices can help you?", - "type": "radio", - "answers": [ - "BDD", - "Growing more full-stack", - "Zero-defect tolerance", - "Getting closer to your users", - "All of the above" - ], - "correctAnswerIndex": 4 - }, - { - "id": "question3", - "question": "How often can you run experiments?", - "type": "radio", - "answers": [ - "As often as possible! We want to learn, right?", - "One per quarter to not overwhelm your team", - "Any time when the team is ready; to ease that, start with rather small probes", - "When the business year is over and you have new budget for experiments" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "Before you start an experiment, make sure to be clear about the perceived problem.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "Take a deep breath", - "Write down anything that could go wrong during the experiment", - "Consult your manager to see whether you have budget for the experiment", - "Come up with a hypothesis before and then run the experiment with three different groups with varied parameters", - "Write down your underlying hypothesis and ways to measure the experiment’s outcome", - "Design the experiment so that it’s surely a success so we can build on that", - "Run a big experiment, small ones aren’t worth the effort to come up with a hypothesis upfront" - ], - "question": "What’s important when designing your experiment?", - "type": "radio", - "correctAnswerIndex": 4 - } - ] - } - ] - }, - { - "id": "course19", - "status": "live", - "credits": 800, - "courseId": "course19", - "category": "Foundational Test Automation Courses", - "tags": [ - "beginner", - "locators", - "ui", - "mobile", - "codeless" - ], - "groupName": "Foundational Testing", - "title": "Web Element Locator Strategies", - "titleSlug": "web-element-locator-strategies", - "teacher": { - "profilePath": "andrew_knight", - "twitter": "AutomationPanda", - "name": "Andrew Knight", - "linkedIn": "", - "photoURL": "andrew_knight.jpg" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn how to locate elements within the DOM for test automation", - "group": "foundational_testing", - "releaseDate": "04/08/2019", - "duration": 79, - "chaptersCount": 8, - "learningPaths": [ - "learningPathUIJava", - "learningPathMobileSwift", - "learningPathMobileJava", - "learningPathMobilePython", - "learningPathMobileJS", - "learningPathCodeless" - ], - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "answers": [ - "HTML is a programming language that enables dynamic content on the page.", - "HTML is a markup language that provides the structure of the page and its elements.", - "HTML provides text for a page but nothing else.", - "HTML provides only tags for the elements to appear on the page." - ], - "question": "What does HTML do in a web page?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "True", - "False" - ], - "question": "HTML elements can have child elements nested within their content.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "Set text size for the whole page to be small.", - "Change the background color for a page.", - "Position sections on a page relative to each other.", - "All the above." - ], - "question": "Which of the following is something that CSS can do?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "It can’t be done. A separate .css file is required.", - "Set the element’s “style” attribute to the desired CSS properties.", - "Set the element’s “class” attribute to the desired CSS properties.", - "Add each CSS property as an HTML attribute to the element." - ], - "question": "How can CSS be added to an HTML element without using a separate .css file?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "What analogies could be made for the three major components of a web page?", - "type": "radio", - "answers": [ - "HTML is the skeleton, CSS is the muscle, JavaScript is the skin", - "HTML is the body, CSS is the mind, JavaScript is the spirit", - "HTML is the head, CSS is the body, JavaScript is the muscle", - "HTML is the skeleton, CSS is the skin, JavaScript is the muscle" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "All major browsers support JavaScript for client-side execution.", - "JavaScript is objectively the best programming language available today.", - "JavaScript can be used for test automation.", - "JavaScript evolved from Java." - ], - "question": "Why do nearly all modern Web applications use JavaScript for their front-end?", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "question": "What does DOM stand for?", - "type": "radio", - "answers": [ - "Document Object Mapping", - "Document Object Model", - "Document-Oriented Model", - "Document Model" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "HTML, CSS, and JavaScript", - "HTML only", - "HTML and XML", - "HTML, XML, and CSS" - ], - "question": "What types of documents can be modeled by the DOM interface?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "A query that finds and returns Web element objects from the DOM.", - "An object representing the state and behaviors of a Web element.", - "An attribute on a Web element object.", - "A special type of HTML tag." - ], - "question": "What is a Web element locator?", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "Page structure could change at any time due to dynamic content.", - "Referencing every element directly from root-to-child becomes unwieldy for large pages.", - "Elements might disappear from a page due to code changes or even bugs.", - "All the above." - ], - "question": "Why are Web elements and locators separate concerns?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "answers": [ - "True", - "False" - ], - "question": "Every element on a page can have a unique locator.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "What is one thing JavaScript calls to the DOM can do that Selenium WebDriver calls cannot?", - "type": "radio", - "answers": [ - "Get an element’s text content.", - "Get an attribute value for an element.", - "Set an attribute value for an element.", - "Click an element." - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "You cannot - Chrome hides it from the user.", - "Right-click anywhere on the page and select “Inspect”.", - "Navigate from the three-dot menu to “More Tools” > “Developer Tools”.", - "Both (2) and (3)." - ], - "question": "How can you look at the source code, network activity, and other information for a live web page in Google Chrome?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "\"Name\" locators only work for tag elements.", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "\"Class name\" locators can return multiple elements.", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "You need to write a locator for an element, and you discover that it has an ID. What should you do?", - "type": "radio", - "answers": [ - "Use a “by ID” locator without question because it is guaranteed to be unique.", - "Verify that the ID truly is unique on the page, and then use it for the “by ID” locator.", - "Use the ID with a “by name” locator.", - "Never use IDs for locators. Look for a class name instead." - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "By.id(“first-name-input”)", - "By.name(“first-name”)", - "By.className(“important-field”)", - "By.className(“big-field”)" - ], - "question": "Which would be the best locator for locating this element uniquely (assuming unique attribute values)? ", - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "By.id(“main-article”)", - "By.className(“article”)", - "By.className(“opinion”)", - "All the above" - ], - "question": "Review the HTML document above. What locator would uniquely target the parent
element for the article?", - "correctAnswerIndex": 3 - }, - { - "id": "question7", - "question": "Review the HTML document above. What locator would uniquely target the “Agree with Argument” button?", - "type": "radio", - "answers": [ - "By.className(“response-button”)", - "By.id(“agree”)", - "By.name(“agree”)", - "By.id(“Agree with Argument”)" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question8", - "question": "Review the HTML document above. What locator would return all section header

elements?", - "type": "radio", - "answers": [ - "By.id(“topic-header”)", - "By.name(“topic-header”)", - "By.className(“topic-header”)", - "A CSS selector or XPath is needed" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question9", - "question": "Review the HTML document above. What locator would return the

paragraph element in the rebuttal section?", - "type": "radio", - "answers": [ - "By.className(“section”)", - "By.name(“p”)", - "By.name(“section[2] p”)", - "None of the above." - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "answers": [ - "A type of Web element selector.", - "Part of the CSS syntax.", - "Pattern-matching expressions.", - "All of the above." - ], - "question": "What are CSS selectors?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "True", - "False" - ], - "question": "CSS selectors can uniquely identify any given element on a Web page.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which of the following CSS selectors would select only “div” elements with the class name “parent”?", - "type": "radio", - "answers": [ - ".parent", - "div parent", - "div.parent", - "div[parent]" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - ":not(.parent)", - ":not(div.parent)", - "div:not(parent)", - "div:not(.parent)" - ], - "question": "Which of the following CSS selectors would select only

elements that do not have the class name “parent”?", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "question": "Review the HTML document above. Which of the following CSS selectors would uniquely identify the main article div?", - "type": "radio", - "answers": [ - "div.main-article", - "main-article", - "#main-article", - "div[‘main-article’]" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "question": "Review the HTML document above. Which of the following CSS selectors would NOT uniquely identify the “Agree with Argument” button?", - "type": "radio", - "answers": [ - "div.article div.section button[1]", - "[name=’agree’]", - "#main-article button[name=’agree’]", - ".section button:nth-child(1)" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Any element on a Web page can be uniquely located using XPath.", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "/div/a/img", - "/a//img", - "//a//img" - ], - "question": "Which of the following XPaths would locate all image elements that are within hyperlink elements?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "What is the best way to get a
element by class name using an XPath (assuming you have made sure there are no false positives)?", - "type": "radio", - "answers": [ - "//div[@class=’classname’]", - "//div[contains(@class, ’classname’)]", - "Don’t ever use XPath for class names" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "//p[not(@class=’main-content’)]", - "//p[not(contains(@class, ‘main-content’))]", - "//p[not(@class, ‘main-content’)]", - "//p[contains(@class, not(‘main-content’))]" - ], - "question": "Which of the following XPaths would locate all paragraphs that do not contain the class “main-content”?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "answers": [ - "True", - "False" - ], - "question": "XPaths are always slower than CSS selectors.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Which of the following XPaths would locate a

paragraph that contains the word “elephant”?", - "type": "radio", - "answers": [ - "//*[contains(text(), ‘elephant’)]", - "//p[contains(‘elephant’)]", - "//p[contains(., ‘elephant)]", - "//p[@elephant]" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "What are abilities XPath has that CSS selectors do not have?", - "type": "radio", - "answers": [ - "Locating elements by text contents", - "Locating any element by index", - "Locating elements using conditional positions and axes", - "All the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "//h2[.=’Rebuttal’]", - "//div[@class=’section’]/h2[starts-with(text(), ‘R’)]", - "(//h2[contains(@class, ‘topic-header’)])[2]", - "All the above" - ], - "question": "Which of the following selectors would uniquely identify the “Rebuttal” header element?", - "type": "radio", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "question": "You can always trust Chrome DevTools for generating good locators.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "There is no difference between link text and partial link text.", - "Link text matches full equality, whereas partial link text matches a substring.", - "Link text matches a working link, whereas partial link text matches a broken link.", - "Link text matches text for any type of element, whereas partial link text matches only “a” elements." - ], - "question": "What is the difference between link text and partial link text?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Based on the order of preference, which of the following would be the best locator for the following element:

Giant panda

", - "type": "radio", - "answers": [ - "ID: firstHeading", - "CSS Selector: h1.firstHeading", - "XPath: //h1[contains(text(), ‘panda’)]", - "Tag: h1" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "Tag: span", - "CSS Selector: span.header__logo", - "XPath: //*[.=’DuckDuckGo’]", - "Link Text: DuckDuckGo" - ], - "question": "Based on the order of preference, which of the following would be the best locator for the following element: ", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter8", - "questions": [ - { - "id": "question1", - "question": "Coded test automation solutions are always better than codeless ones.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "True", - "False" - ], - "question": "Coded test automation tools require software development skills to use.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "Both codeless and coded test automation tools use Web element locators.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Selenium WebDriver can be used only in Java.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "Which of the following is NOT a codeless test automation tool?", - "type": "radio", - "answers": [ - "Selenium IDE", - "Selenium WebDriver", - "SmartBear TestComplete", - "TestCraft" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "Page objects make Web UI interactions more self-documenting.", - "Page objects make it easier to reuse locators.", - "Page objects make it easier to reuse interaction calls.", - "All the above." - ], - "question": "What are good reasons for using the Page Object Model instead of raw WebDriver calls?", - "correctAnswerIndex": 3 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "They shouldn’t - the Screenplay pattern is too complicated.", - "The Screenplay pattern uses AI to automatically find and “self-heal” locators.", - "The Screenplay pattern splits locators and interactions into separate classes for even greater reusability and composability.", - "Trick question - the Screenplay pattern is just another type of Page Object Model." - ], - "question": "Why should someone consider using the Screenplay pattern instead of the Page Object Model?", - "correctAnswerIndex": 2 - } - ] - } - ] - }, - { - "id": "course2", - "title": "Codeless Test Automation with Selenium IDE", - "titleSlug": "codeless-test-automation-with-selenium-ide", - "teacher": { - "profilePath": "dave_haeffner", - "twitter": "TourDeDave", - "name": "Dave Haeffner", - "linkedIn": "", - "photoURL": "dave.jpeg" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn about Selenium IDE and get started with automation without code!", - "group": "foundational_testing", - "releaseDate": "04/26/2019", - "duration": 98, - "chaptersCount": 10, - "learningPaths": [ - "learningPathCodeless" - ], - "status": "live", - "credits": 1000, - "courseId": "course2", - "category": "Foundational Test Automation Courses", - "tags": [ - "codeless", - "beginner", - "selenium ide" - ], - "groupName": "Foundational Testing", - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "Codeless test automation is worth paying attention to because:", - "type": "radio", - "answers": [ - "Codeless solutions have gotten quite good", - "There's no need to continue reinventing the wheel", - "You don't need to program in order to do automated testing", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Smart element locators", - "Conditional waiting", - "Control structures", - "Easy assertions", - "The ability to do modification without redo", - "All of the above" - ], - "question": "Worthwhile codeless test automation tools have:", - "correctAnswerIndex": 5 - }, - { - "id": "question3", - "answers": [ - "Reusable steps", - "Cross-browser support", - "Reporting", - "The ability to insert code", - "The ability to be used with Continuous Integration", - "All of the above" - ], - "question": "Worthwhile codeless test automation tools also have:", - "type": "radio", - "correctAnswerIndex": 5 - }, - { - "id": "question4", - "question": "Selenium IDE is:", - "type": "radio", - "answers": [ - "a commercial tool", - "a free tool", - "an open-source tool", - "a free and open-source tool" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "question": "Selenium IDE is available on:", - "type": "radio", - "answers": [ - "Firefox", - "Chrome", - "Internet Explorer", - "Firefox and Chrome" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Only tests", - "Only suites", - "Only test plans", - "Tests and suites", - "Tests, suites, and test plans" - ], - "question": "A Selenium IDE project has:", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "CSV file", - "SIDE file", - "XLSX file", - "XML file" - ], - "question": "A Selenium IDE project saves to a:", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "A Selenium IDE project file contains:", - "type": "radio", - "answers": [ - "XML", - "ASCII art", - "JSON", - "Wingdings" - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "Which one of the following will NOT allow you to manually add a command to an existing test.", - "type": "radio", - "answers": [ - "Clicking at the end of a test", - "Right-clicking on a test step and selecting 'Insert new command'", - "Using a hot-key" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Test names can not:", - "type": "radio", - "answers": [ - "Contain special characters", - "Be longer than 100 characters", - "Have spaces", - "Be the same as another test" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "Suites can contain:", - "type": "radio", - "answers": [ - "Other suites", - "Just one test", - "One or more tests", - "Individual test steps" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "A test can be part of zero or more test suites:", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "You can reuse a test case with the _______ command", - "type": "radio", - "answers": [ - "store", - "click", - "execute", - "run" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "The run command takes the ______ of a test you'd like to execute", - "type": "radio", - "answers": [ - "id", - "name", - "number", - "none of the above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "store", - "click", - "execute", - "run" - ], - "question": "You can make reused test cases dynamic with variables created by the ______ command:", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "concise", - "readable", - "maintainable", - "all of the above" - ], - "question": "Reusable tests can make your tests more:", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "answers": [ - "1", - "2", - "3", - "4", - "5" - ], - "question": "There are ______ types of control flow commands in Selenium IDE:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Execute certain test steps if a predefined condition is met", - "Iterate over a set of test steps based on a predefined condition", - "None of the above" - ], - "question": "Conditional commands enable you to:", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Looping commands enable you to:", - "type": "radio", - "answers": [ - "Execute certain test steps if a predefined condition is met", - "Iterate over a set of test steps based on a predefined condition", - "None of the above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "Regular expressions", - "Java", - "JavaScript", - "Wingdings" - ], - "question": "In Selenium IDE predefined conditions are expressed using:", - "type": "radio", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Troubleshooting issues in your test", - "Executing certain test steps if a predefined condition is met", - "Iterating over a set of test steps based on a predefined condition" - ], - "question": "The debugger is a useful tool for:", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "Setting a breakpoint", - "Using 'Play to this point' from the right-click menu", - "Use a hot-key on a specific test step", - "All of the above" - ], - "question": "You can have your test stop during playback by:", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Execute an individual command", - "Step over a command", - "Resume playback", - "Abort Playback", - "All of the above" - ], - "question": "When in the debugger, you can:", - "correctAnswerIndex": 4 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Enter the debugger during playback if there is a problem during playback", - "Always enter the debugger during playback", - "Prevent playback from starting", - "None of the above" - ], - "question": "By enabling 'Pause on exceptions' your test will:", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "answers": [ - "User customizations", - "Third-party integrations", - "Troubleshooting issues in your test" - ], - "question": "Which is NOT a use of plugins:", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Events", - "Emojis", - "Wingdings", - "All of the above", - "None of the above" - ], - "question": "Selenium IDE emits _____ for plugins to use:", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "The Applitools Eyes plugin is an example of:", - "type": "radio", - "answers": [ - "A user customization", - "A third-party integration", - "How to troubleshoot an issue in your test", - "All of the above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "New commands", - "Visual Assertions", - "Control Flow" - ], - "question": "The Applitools Eyes plugin does NOT enable you to add _____ to your tests:", - "type": "radio", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter8", - "questions": [ - { - "id": "question1", - "question": "With the command-line runner you can execute your Selenium IDE tests:", - "type": "radio", - "answers": [ - "In parallel", - "Cross-browser", - "Locally", - "Headlessly", - "On a Selenium Grid", - "All of the above" - ], - "correctAnswerIndex": 5 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "server", - "capabilities", - "filter", - "config-file" - ], - "question": "You can run just a subset of your tests with the _____ option:", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "You can change which browser your tests run on with the _____ capability:", - "type": "radio", - "answers": [ - "platform", - "browserName", - "version", - "filter" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "You can install the command-line runner and browser drivers from:", - "type": "radio", - "answers": [ - "RubyGems", - "pypi", - "Maven", - "npm" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter9", - "questions": [ - { - "id": "question1", - "question": "CI is an uncommon practice in software development.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "A Continuous Integration (CI) server enables you to:", - "type": "radio", - "answers": [ - "Automate execution of your tests", - "Connect your tests to your team's development workflow", - "Send notifications to you and your team when there are failures", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "How you connect your tests to CI depends on how your team currently uses CI for its development workflow.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "There are only a few CI solutions available:", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter10", - "questions": [ - { - "id": "question1", - "question": "Regardless of your test automation maturity, there is a use for Selenium IDE in your test automation practice.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Automate repetitive tasks", - "Bootstrap manual testing efforts", - "Aid exploratory testing efforts", - "Capture a defect in a reproducible automated test case", - "All of the above" - ], - "question": "Selenium IDE can be used to:", - "correctAnswerIndex": 4 - }, - { - "id": "question3", - "question": "The only way to contribute to open-source is by contributing code:", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "Be reliable and maintainable", - "Give fast, cross-browser feedback", - "Be extendible", - "Have something for everyone", - "All of the above" - ], - "question": "With a worthwhile tool, codeless test automation can:", - "type": "radio", - "correctAnswerIndex": 4 - } - ] - } - ] - }, - { - "id": "course20", - "status": "live", - "credits": 800, - "courseId": "course20", - "category": "Foundational Test Automation Courses", - "tags": [ - "ios", - "xcuitest", - "mobile", - "swift", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "Introduction to iOS Test Automation with XCUITest", - "titleSlug": "introduction-to-ios-test-automation-with-xcuitest", - "teacher": { - "name": "Shashikant Jagtap", - "linkedIn": "", - "photoURL": "shashikant_jagtap.png", - "profilePath": "shashikant_jagtap", - "twitter": "Shashikant86" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn to automate iOS testing with Apple's native framework, XCUITest", - "group": "foundational_testing", - "releaseDate": "04/15/2019", - "duration": 91, - "chaptersCount": 8, - "learningPaths": [ - "learningPathMobileSwift" - ], - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "When did Apple announce the XCUITest framework?", - "type": "radio", - "answers": [ - "2015", - "2016", - "2017", - "2018" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "XPath", - "CSS Selectors", - "ID", - "Accessibility Identifiers" - ], - "question": "Which type of locator is best to ensure stable XCUITests?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Yes", - "No" - ], - "question": "Can we write tests with XCUITest using any programming language?", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "White-Box", - "Black-Box", - "Grey-Box", - "None of these" - ], - "question": "What kind of framework is XCUITest?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "True", - "False" - ], - "question": "XCUITest can be used for testing cross-platform iOS and Android apps?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "IntelliJ IDEA", - "Eclipse", - "Xcode", - "Atom" - ], - "question": "What is the recommended IDE/Editor used for writing XCUITest?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Main Target of the app", - "XCUITest needs separate target" - ], - "question": "Where you can write XCUITest?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which of the following statements is false?", - "type": "radio", - "answers": [ - "XCUITests recorded by recorder doesn’t need refactoring", - "XCUITest recorder required cursor to be in the test method to enable recording", - "XCUITest recorders has bugs at the moment", - "XCUITest recording feature is great place to start writing UI tests" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Which is the better method to write better and stable tests with XCUITest?", - "type": "radio", - "answers": [ - "Recording", - "Writing XCUITest from scratch without recorder" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "How can you add a breakpoint in Xcode while writing XCUITest?", - "type": "radio", - "answers": [ - "By right clicking on the line of code", - "By clicking on the line of code (line numbers)", - "By adding print statement after code", - "None of above" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "What’s purpose of adding a base class?", - "type": "radio", - "answers": [ - "Make XCUITest framework look better", - "Avoid Code duplication" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "The base class should be subclass of _____", - "type": "radio", - "answers": [ - "XCTest", - "XCTestCase", - "XCUIApplication", - "None of Above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "setup and tearDown methods", - "actual test methods" - ], - "question": "What’s the best candidate for abstraction in base class?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Once you define a base class, test classes can be added as subclasses of base class.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "The base class adds complexity in the XCUITest framework", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "In relation to this course, BDD stands for ____", - "type": "radio", - "answers": [ - "Backend Driven Development", - "Behaviour Driven Development" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "What are the benefits of BDD for test automation?", - "type": "radio", - "answers": [ - "BDD makes test faster", - "BDD makes tests human readable" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What have we used to implement the Given-When-Then steps defined in the XCUITest scenario?", - "type": "radio", - "answers": [ - "Swift Generics", - "Swift Struct", - "Swift extensions", - "Swift Class" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "Extension can be used all over the XCUITest target", - "Swift extension is a fancy way of defining steps." - ], - "question": "What’s a major benefit of using extension to step definitions?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "True", - "False" - ], - "question": "BDD scenarios written in XCUITest can be executed outside of Xcode?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Swift extension", - "Swift Structs", - "Swift Enums", - "None of Above" - ], - "question": "What have we used to store XCUIElements?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "What’s the benefit of using enums for locator strategy?", - "type": "radio", - "answers": [ - "Swift enums are lightweight", - "We can return dynamic XCUIElements from enums" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Xcode groups are similar to folders on the disk?", - "type": "radio", - "answers": [ - "Yes, it’s same thing", - "No, Xcode groups are folders but also has reference to Xcode project files." - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "UI elements with Accessibility Identifiers", - "Pixel position of UI element on the screen" - ], - "question": "What we can store in the enum cases?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "Xcode groups makes the XCUITest more organised.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "question": "What’s correct method to open an application with XCUITest?", - "type": "radio", - "answers": [ - "open", - "kickoff", - "launch", - "None of Above" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Which of the following gets all labels on the screen?", - "type": "radio", - "answers": [ - "XCUIApplication().labels", - "XCUIApplication().texts", - "XCUIApplication().StaticTexts", - "None of Above" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "XCUIApplication().buttons.hello", - "XCUIApplication().buttons[“Hello”]", - "XCUIApplication().buttons.StaticText[“Hello”]", - "None of Above" - ], - "question": "Which of the following finds the button with accessibility identifier “Hello”", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Which method waits for the existence of an XCUIElement?", - "type": "radio", - "answers": [ - "wait()", - "waitForExistance(timeout: TimeIntervals)", - "sleep()", - "None of Above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "By grouping tests in groups and folders", - "By editing the scheme and enable parallel execution checkbox", - "By tagging tests with @parallel annotation", - "None of Above" - ], - "question": "How can you enable parallel testing in Xcode?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "question": "What’s the name of Applitools SDK that we can use with Swift apps?", - "type": "radio", - "answers": [ - "EyesXCUI", - "ApplitoolsiOSSDK", - "SwiftXCUIEyes", - "None of Above" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Which iOS dependency management framework have we used for the downloading Applitools SDK?", - "type": "radio", - "answers": [ - "Carthage", - "Swift Package Manager", - "Homebrew", - "CocoaPods" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "An API Key is optional to run tests on Applitools test manager?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "The Applitools test manager can add baselines to visual validation tests?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "With Eye XCUI SDK can you add only one checkpoint per test?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter8", - "questions": [ - { - "id": "question1", - "answers": [ - "xcodebuild", - "xcrun", - "xcbuild", - "None of Above" - ], - "question": "Which of these is a native Apple developer tool that can be used to run XCUITest from the command line?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "It’s pre-installed in macOS", - "It makes commands much simpler ", - "Fastlane is fast", - "All of Above" - ], - "question": "Why is Fastlane easier than native tools for running XCUITest from command line?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Xcode Scheme must be shared in order to seen by a CI server.", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Can you run Applitools visual validation tests on CI?", - "type": "radio", - "answers": [ - "Yes", - "No" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "By updating scheme", - "By deleting test completely", - "By tagging tests", - "All of Above" - ], - "question": "How have we disabled the tests running on CI?", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course23", - "status": "live", - "credits": 700, - "courseId": "course23", - "category": "Foundational Test Automation Courses", - "tags": [ - "unit testing", - "mocks", - "spies", - "ui", - "mobile", - "api", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "Testing From The Inside: Unit Testing Edition", - "titleSlug": "unit-testing", - "teacher": { - "photoURL": "tariq-king.jpg", - "profilePath": "tariq_king", - "twitter": "tariq_king", - "name": "Tariq King", - "linkedIn": "" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn the fundamentals of unit testing by applying code-based techniques such as mocking, code coverage analysis, and more", - "group": "foundational_testing", - "releaseDate": "05/13/2019", - "duration": 145, - "chaptersCount": 7, - "learningPaths": [ - "learningPathUIJava", - "learningPathUIJS", - "learningPathUICS", - "learningPathUIRuby", - "learningPathUIPython", - "learningPathMobileSwift", - "learningPathMobileJava", - "learningPathMobilePython", - "learningPathMobilePython", - "learningPathApiJava", - "learningPathApiJS" - ], - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "answers": [ - "It requires individuals who are highly skilled in software design, coding and testing", - "It requires less skill than black box testing", - "It facilitates more thorough testing of internal code paths, structures, and logic", - "It eliminates the need for black box testing" - ], - "question": "Which of these is an advantage of testing from the inside?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Which are current trends in software testing that make us care about testing from the inside?", - "type": "radio", - "answers": [ - "Shift-Left", - "Continuous Delivery and Deployment", - "The “No Tester” approach in which traditional roles are being blurred", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "Testing from the Inside is another way to refer to:", - "type": "radio", - "answers": [ - "Structural or White Box Testing", - "Functional or Black Box Testing", - "Usability or User Experience Testing", - "None of the above" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "In the testing pyramid:", - "type": "radio", - "answers": [ - "All testing from the inside occurs at the unit level", - "Most testing from the inside occurs in the upper part of the pyramid", - "Using knowledge of any part of the code for testing is white/grey box testing", - "Black box testing is the least important part of the pyramid" - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "answers": [ - "Inspections are an informal practice", - "Inspections do not focus on finding software defects", - "Inspections use predefined checklists to guide the examination of software artifacts", - "Inspections are not an effective method for examining code" - ], - "question": "Which of the following is true for inspections:", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "Walkthroughs are a rigorous and formal process", - "Walkthroughs involve an engineer stepping through one or more software artifacts", - "Walkthroughs avoid using any relevant test data", - "All of the above" - ], - "question": "Which of the following is true for walkthroughs:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What are some things you should look for during a code review:", - "type": "radio", - "answers": [ - "Are classes and routines well named", - "Are there any unreachable code statements", - "Does the class and/or routine have a clear, singular purpose", - "All of the above." - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "A simple solution", - "Other issues besides the technical aspects", - "No problem in particular", - "All of the above" - ], - "question": "Code that looks and feels confusing may indicate:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "A study mentioned in Steve McConnell’s book “Code Complete 2” suggests that code reviews can find an average of:", - "type": "radio", - "answers": [ - "55-60% of defects", - "35-45% of defects", - "10-25% of defects", - "30-35% of defects" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "answers": [ - "Did the developer understand the requirements?", - "Are there any missing requirements/steps?", - "Are there any steps which are out of order?", - "All of the above" - ], - "question": "When thinking about what could go wrong while coding a sequence of steps, what should be considered?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question7", - "answers": [ - "Requirements", - "Implementation", - "Observation", - "All of the above" - ], - "question": "Tests should have expectations based on:", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "answers": [ - "0, 1, and 2", - "Typical number of iterations", - "Maximum and maximum+1", - "All of the above" - ], - "question": "For iterations through a loop, which of the following are recommended values to test:", - "type": "radio", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "The component does not need to be tested.", - "The component does not have the responsibility of defending against bad inputs.", - "The component is likely to have a significant number of bugs.", - "All of the above." - ], - "question": "Which of the following statements is TRUE about a component that is designed by contract?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question10", - "question": "Which of the following statements describes a way to achieve good test coverage?", - "type": "radio", - "answers": [ - "Good test coverage is achieved by executing methods or functions on a variety of values selected using testing techniques.", - "Good test coverage is achieved by writing tests that execute every line of code at least once.", - "Good test coverage is achieved by writing tests that execute every block of code at least once.", - "Good test coverage is achieved by testing only the most important functionality of the component under test." - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "The component requires more robustness testing.", - "The component does not need to be tested.", - "The component does not have the responsibility of defending against bad inputs.", - "All of the above." - ], - "question": "Which of the following statements is TRUE about a component that is designed defensively?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Which of these is a possible result of writing tests that focus on the internal implementation of a component instead of its behavior, results and public interface?", - "type": "radio", - "answers": [ - "Test readability will be improved.", - "Tests may change the behavior of the component under test.", - "The component under test can be refactored without having to alter the tests.", - "Tests are more likely to fail for other reasons besides the actual presence of a defect." - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "question": "Which of the following is an acceptable way to write tests for complex private logic?", - "type": "radio", - "answers": [ - "Never use private methods/functions.", - "Make all private methods/functions public.", - "Refactor the code such that private methods/functions are accessible through public methods/functions.", - "There is no need to test complex private logic because it is private." - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "Unit tests should avoid conditional logic (if/then, try/catch, loops) and sleeps.", - "Unit tests should be readable and understandable.", - "Unit tests should tests as much functionality as possible with as few unit tests as possible.", - "Each unit test should be independent from any other unit tests." - ], - "question": "Which of the following statements is NOT true about properly written unit tests?", - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "question": "Which of the following statements describes a scenario that requires mocking out dependencies?", - "type": "radio", - "answers": [ - "Dependencies have not been implemented yet.", - "Dependencies have non-deterministic behavior.", - "Dependencies initiate long-running processes.", - "All of the above." - ], - "correctAnswerIndex": 3 - }, - { - "id": "question7", - "question": "Which of the following is a potential pitfall of mocking?", - "type": "radio", - "answers": [ - "Mocks may not adequately represent the actual behavior of the mocked component in production.", - "Mocking introduces non-deterministic behavior into the component under test.", - "Mocks always initiate long running processes that make tests slow.", - "All of the above." - ], - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "answers": [ - "Test code should not be held to the same standards as product code.", - "Repetition is okay if it makes tests simpler and easier to read.", - "The DRY principle has no benefits in test code.", - "All of the above." - ], - "question": "In testing, why might it be okay to violate the \"do not repeat yourself (DRY)\" principle?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "question": "Which of the following is TRUE about code coverage?", - "type": "radio", - "answers": [ - "Code coverage and test coverage refer to the same thing.", - "100% code coverage means you have strong tests.", - "Low code coverage indicates that your tests are weak.", - "Code coverage is the primary goal of unit testing." - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "answers": [ - "Unit testing provides early feedback on quality.", - "Unit testing facilitates making changes since they help to ensure that bugs are not introduced as components evolve.", - "Unit testing ensures that all components of a system work well together.", - "Properly written unit tests serve as a valuable piece of documentation." - ], - "question": "Which of the following is NOT a benefit of unit testing?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "assertEquals(expected, actual);", - "assertEquals(actual, expected);", - "assert(expected == actual);", - "assert(actual == expected);" - ], - "question": "Which of the following is the correct way to assert that two objects are equal using TestNG?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "A “main” method in a class.", - "A tool such as JUnit or TestNG.", - "The JavaDoc generation engine.", - "All of the above are test drivers." - ], - "question": "Which of the following is NOT an example of a test driver?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "Which of the following statements is TRUE about unit testing in design by contract?", - "type": "radio", - "answers": [ - "It is not necessary to test components that are designed by contract.", - "There is no need to write negative tests (i.e. tests that use invalid/unexpected input) for components that are designed by contract.", - "Parameterized testing must be used for components that are designed by contract.", - "All of the above." - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "We should strive to test as many behaviors as possible in each unit test.", - "We should never test more than one behavior in a single unit test.", - "When there is a natural grouping of behaviors that are oftentimes executed together.", - "When we would otherwise have repeated test code." - ], - "question": "When is it OK to test more than a single behavior in a single unit test?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "answers": [ - "Use a code coverage tool to generate a report of which lines, branches, methods and/or classes have been executed.", - "Use a dependency analysis tool to determine how much code has been executed.", - "Use a mutation testing tool to determine how much code has been executed by unit tests.", - "Run each unit test multiple times and take a mental note of which code paths are executed." - ], - "question": "Which of these statements describes a way to determine how much code has been executed by a set of unit tests?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question7", - "answers": [ - "Branch Coverage", - "Line Coverage", - "Method Coverage" - ], - "question": "Which of the following types of code coverage does IntelliJ NOT report by default?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "question": "Which of the following statements is TRUE about unit testing in defensive designs?", - "type": "radio", - "answers": [ - "It is only necessary to write tests for positive scenarios.", - "It is only necessary to write tests for negative scenarios.", - "It is necessary to write tests for both negative and positive scenarios.", - "All of the above." - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "How can we implement a one-time setup method using TestNG?", - "type": "radio", - "answers": [ - "Annotate the target method with @BeforeClass", - "Annotate the target method with @OneTimeSetupMethod", - "Annotate the target method with @RunOnlyOnce", - "Name the target method “beforeClass”" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question10", - "type": "radio", - "answers": [ - "A spy is a special type of Mock", - "Spies intercept calls to real objects", - "Spies allow verification that objects were called with specific parameters", - "All of the above" - ], - "question": "Which of the following is TRUE of Spies?", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "Tests are less verbose", - "For implementing heavy operations that are only executed once", - "Data that doesn't change from test to test is defined once", - "All of the above" - ], - "question": "What is the advantage of using a one-time setup method?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "How can we implement an each-time setup method using TestNG?", - "type": "radio", - "answers": [ - "Annotate the target method with @BeforeEachTest", - "Annotate the target method with @RunOncePerTest", - "Annotate the target method with @BeforeMethod", - "Name the target method “beforeEachTest”" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "What should be included in an each-time setup method?", - "type": "radio", - "answers": [ - "Heavy operations that are only executed once", - "Database queries", - "Data that may be changed by the test" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "What is one advantage of using Data Providers to parameterize tests?", - "type": "radio", - "answers": [ - "Tests give more verbose results", - "Reduce redundancy and duplication in our tests", - "Reduces number of requirements covered", - "Increases code coverage" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "question": "How can we instantiate a Mock using Mockito?", - "type": "radio", - "answers": [ - "Annotate a field with @Fake", - "Annotate a field with @Mock", - "Annotate a field with @Double", - "All of the above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "return(100.00).when(mock.targetMethod());", - "It is not possible to control the behavior of a Mock, instead a Spy must be used.", - "when(mock.targetMethod()).thenReturn(100.00);" - ], - "question": "How can we control the behavior of a Mock to return a specific value?", - "correctAnswerIndex": 2 - }, - { - "id": "question8", - "question": "Scenarios where using Mocks are appropriate are:", - "type": "radio", - "answers": [ - "All test scenarios", - "When there's a component that's not available yet", - "A process returns quickly", - "Where you don't want to use one-time or each-time setups" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "type": "radio", - "answers": [ - "It is not possible to verify the behavior against a Spy, instead a Mock must be used.", - "verifyExecuted(spiedService).spiedMethod(eq(100.00));", - "spy(spiedService).spiedMethod(eq(100.00)).wasCalled()", - "verify(spiedService).spiedMethod(eq(100.00));" - ], - "question": "How can we verify a method call was executed against a Spy using Mockito?", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Storage Layer", - "Business Logic Tier", - "Presentation Layer", - "All of the above" - ], - "question": "At what tier of your application can unit tests be written?", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "JavaScript unit testing tends to be challenging because:", - "type": "radio", - "answers": [ - "JavaScript never has side effects, even when manipulating the DOM", - "There is no strict and generally accepted definition of a unit", - "Browsers are built around standards that remove variability of behavior" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "An important factor that impacts testing JavaScript code is whether or not the:", - "type": "radio", - "answers": [ - "Front-end JavaScript code was designed for testability", - "Database is eventually consistent", - "Schemas are defined in JSON or XML", - "Middle-tier is properly connected to data access objects" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Unit tests should exercise small pieces of the front-end like attribute directives", - "Integration tests that verify interactions between two or more small pieces", - "Component tests that validate coarse-grained pieces of the front-end", - "All of the above" - ], - "question": "When testing Angular-based applications, which of levels of testing should be in place:", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "Istanbul", - "Chai", - "Jest", - "Mocha" - ], - "question": "Which of the following tools is used to measure code coverage for JavaScript?", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Clear, Repeatable, Independent, Simple, Performant", - "Containerized, Remote, Isolated, Simple, Powerful", - "Concise, Readable, Isolating, Self-Sufficient, Purposeful" - ], - "question": "This course introduced the “CRISP” acronym. Which of the following does it NOT stand for:", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "Only doing exploratory testing", - "Engaging in pair programming with developers", - "Advocating for developers to perform code reviews", - "Documenting test cases" - ], - "question": "Testing from the inside encourages testers to find new ways to add value by:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Create Solution, Details, Optimism vs. Analyze Problems, Big Picture, Pessimism", - "Big Risks vs. Risk Averse", - "Loose and Quick vs. Controlling and Slow", - "Intelligent and Scientific vs. Emotional and Theatrical" - ], - "question": "What is the contrast between the developer mindset and the testing mindset?", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "Ice Cream Cone: Small number of Unit Tests, larger number of Integration Tests, and even more System Tests", - "Hour Glass - A large number of Unit Tests and System Tests, with a small number of Integration Tests", - "Soup Can - Each level has the same number of tests", - "Pyramid - A large number of Unit Tests, a smaller number of Integration Tests, and a small number of System Tests" - ], - "question": "Which of the following is a known pattern for promoting efficient test automation:", - "type": "radio", - "correctAnswerIndex": 3 - } - ] - } - ] - }, - { - "id": "course24", - "chaptersCount": 6, - "learningPaths": [ - "learningPathUIRuby" - ], - "status": "live", - "credits": 600, - "courseId": "course24", - "category": "Foundational Test Automation Courses", - "tags": [ - "ui", - "ruby", - "beginner", - "selenium webdriver" - ], - "groupName": "Foundational Testing", - "title": "Selenium WebDriver with Ruby", - "titleSlug": "selenium-webdriver-with-ruby", - "teacher": { - "photoURL": "meaghan_lewis.jpg", - "profilePath": "meaghan_lewis", - "twitter": "meaghan_lewis", - "name": "Meaghan Lewis", - "linkedIn": "" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn to automate tests using Selenium WebDriver and Ruby", - "group": "foundational_testing", - "releaseDate": "05/22/2019", - "duration": 60, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "Ruby is a required tool to write and run tests in this course?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Ruby can be installed with the help of ______.", - "type": "radio", - "answers": [ - "Package managers", - "Installers", - "Managers", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "Gems are installed through the help of what?", - "type": "radio", - "answers": [ - "The command line", - "Ruby", - "The bundler", - "WebDriver" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "What is the browser driver called for the Chrome browser?", - "type": "radio", - "answers": [ - "ChromeDriver", - "ChromiumDriver", - "ChromeBrowserDriver", - "BrowserDriver" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "question": "What is a commonly used method from the driver class?", - "type": "radio", - "answers": [ - "Open", - "Navigate", - "Drive", - "Close" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "Class", - "Id", - "Name", - "CSS Selector", - "All of the above" - ], - "question": "What are the options available to find an element?", - "type": "radio", - "correctAnswerIndex": 4 - }, - { - "id": "question3", - "answers": [ - "Element", - "Action", - "User", - "Search" - ], - "question": "The _____ class is used to drive actions like clicking and typing on WebElements", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "type", - "enter_text", - "send_keys", - "enter" - ], - "question": "To tell WebDriver to type in an element’s text field, what method needs to be used?", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - "True", - "False" - ], - "question": "The find_element method will find the first element matching the given arguments.", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "What needs to be specified in a test to use the “selenium-webdriver” API?", - "type": "radio", - "answers": [ - "require", - "install", - "use", - "gem" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Implicit waits will wait for a specific element or condition?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "The switch_to method allows the driver to switch contexts between ______", - "type": "radio", - "answers": [ - "drivers", - "elements", - "windows", - "classes" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "The _______ method allows you to move one element onto another", - "type": "radio", - "answers": [ - "move", - "drag_and_drop", - "move_to", - "drag" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "Use the Google Places API", - "Use keyboard input", - "Use mouse input", - "Use keyboard and mouse input" - ], - "question": "What is the approach to automate an autocomplete field?", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "The datepicker allows a date to be selected from a calendar?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Id", - "CSS", - "XPath", - "All of the above" - ], - "question": "Radio buttons can be selected using ______", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "The easiest way to automate a datepicker is to open it, find the locator for a specific date in the calendar, and click on it?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "After selecting a date from the datepicker, it must be closed by sending the keys ____", - "type": "radio", - "answers": [ - "Return", - "Click", - "Enter", - "Mouse down" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "To automate a dropdown menu, all you need to do is to click on an option from the menu.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "WebDriver methods can be chained together?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "True", - "False" - ], - "question": "A select menu can have a value can be sent directly to it for automation?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "Spec", - "RSpec", - "WebDriver" - ], - "question": "_____ is a behavior driven test framework for Ruby", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "Conditions", - "Alerts", - "Expectations", - "Comparisons" - ], - "question": "_____ are used as common ways to express outcomes in tests.", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - "Find an element", - "Use an expectation", - "Use a wait", - "Create a new driver" - ], - "question": "For a test that submits a form or changes pages it might be necessary to _____", - "type": "radio", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "answers": [ - "Write more code", - "Write clean code", - "Write less code", - "Write code with repetition" - ], - "question": "How do you create tests that are reusable and maintainable over time?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "A global variable in Ruby will allow you to?", - "type": "radio", - "answers": [ - "Access the variable in the entire test class", - "Access the variable within a method", - "Access the variable across classes" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Extract test steps into _____ and call them in the test to make it cleaner and easier to read.", - "type": "radio", - "answers": [ - "Variables", - "Gems", - "Methods" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Expectations should be defined in tests, and not extracted into methods.", - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course25", - "sortOrder": 8, - "abstract": "Learn UI automation with Capybara in Ruby", - "group": "foundational_testing", - "releaseDate": "07/19/2019", - "duration": 68, - "chaptersCount": 7, - "learningPaths": [ - "learningPathUIRuby" - ], - "status": "live", - "credits": 700, - "courseId": "course25", - "category": "Foundational Test Automation Courses", - "tags": [ - "capybara", - "ruby", - "ui", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "Introduction to Capybara", - "titleSlug": "capybara-ruby", - "teacher": { - "photoURL": "tj_maher.jpg", - "profilePath": "tj_maher", - "twitter": "tj_maher", - "name": "T.J. Maher", - "linkedIn": "" - }, - "level": "beginner", - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "What should we type in the Mac Terminal to find out what version of Ruby we have?", - "type": "radio", - "answers": [ - "ruby --version", - "ruby -v", - "All of the Above" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "brew install ruby", - "ruby -v", - "gem install bundler", - "bundle install" - ], - "question": "What should we type in the Mac Terminal to install all Ruby dependencies for our gems in our project’s Gemfile? ", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "RubyGems.org", - "spec/features", - "bundle install", - "Gemfile" - ], - "question": "Where do we store the names and version of the Ruby libraries we will be using in our project?", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "RubyGems.org", - "spec/features", - "bundle install", - "Gemfile" - ], - "question": "What website does Ruby access to fetch the files for our project?", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "The browser our tests will use", - "The main landing page for our automation suite", - "How long to wait for unresponsive web elements", - "The RSpec configuration where the test output will be printed", - "All the above" - ], - "question": "What resides in the spec_helper.rb file?", - "type": "radio", - "correctAnswerIndex": 4 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "A browser opens, displaying what our tests are doing", - "The tests run without a browser opening" - ], - "question": "What happens when the tests run in a “headless” browser?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "answers": [ - "Clicking on a button", - "Checking if expected values to match actual values", - "Navigating to a page" - ], - "question": "With Arrange, Act, and Assert, what part of the test would be the assertion?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Cucumber", - "Gauge", - "RSpec" - ], - "question": "What Test Framework are we using in this course?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "have_css(`h2`, text: `Available Examples`)", - "have_content(‘Available Examples’)" - ], - "question": "Which Capybara method specifically checks to see if the text is a heading? ", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Which Capybara property sets the main landing page?", - "type": "radio", - "answers": [ - "Capybara.default_driver", - "Capybara.app_host", - "Capybara.default_max_wait_time" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "Which Capybara property sets how long to wait for a slow loading component? ", - "type": "radio", - "answers": [ - "Capybara.default_driver", - "Capybara.app_host", - "Capybara.default_max_wait_time" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "question": "Which Capybara property sets the browser the tests will be using?", - "type": "radio", - "answers": [ - "Capybara.default_driver", - "Capybara.app_host", - "Capybara.default_max_wait_time" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "find_button", - "find_field", - "find_link" - ], - "question": "What Finder searches the page for a textbox?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Capybara’s default settings are to find all hidden elements on the page", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "It is better to check that an element is there than to check that an element is not there because it takes a lot of time to do a negative assertion.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "If there are two links, Password and Password Confirmation, how can you make sure to match only the first link?", - "type": "radio", - "answers": [ - "have_link(“Password”)", - "have_link(“Password”, exact: true)" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "By id", - "By Capybara test attribute", - "By value", - "By title", - "By text content", - "By alt tag, if it includes an image", - "All of the above" - ], - "question": "With Capybara method click_button, how can Capybara locate the button?", - "type": "radio", - "correctAnswerIndex": 6 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "choose", - "fill_in", - "select", - "uncheck" - ], - "question": "What Capybara method enters text into a textbox?", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Easy way to capture all of the current page information for our browser session", - "Built-in waiting for slow loading components", - "All of the Above" - ], - "question": "Why should we use expect(page).to in our assertions for our Capybara tests?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "Which block deals with common setup that happen before the test starts?", - "type": "radio", - "answers": [ - "scenario", - "background", - "expect(page).to" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "def login(username)", - "def login(username, password)", - "def login" - ], - "question": "If we wanted to refactor commonly used steps to login, passing in a username and a password, which definition of a method would be correct?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "Which Capybara method picks one of the values in a dropdown list?", - "type": "radio", - "answers": [ - "select", - "choose", - "check", - "uncheck" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Which Capybara method picks a radio button?", - "type": "radio", - "answers": [ - "select", - "choose", - "check", - "uncheck" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "select", - "choose", - "check", - "uncheck" - ], - "question": "Which Capybara method picks a checkbox?", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "What does Capybara use to locate a checkbox?", - "type": "radio", - "answers": [ - "Label text", - "Name", - "ID", - "All of the above" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "answers": [ - "accept_alert", - "accept_prompt", - "dismiss_confirm" - ], - "question": "If a message box popped up with some text you can read, with an “OK” and a “Cancel” button, what Capybara method would you use to emulate selecting on the “OK” button?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "accept_alert", - "accept_prompt", - "dismiss_confirm" - ], - "question": "What Capybara method would you use to emulate selecting on the “Cancel” button?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "accept_alert", - "accept_prompt", - "dismiss_confirm" - ], - "question": "What Capybara method would you use to enter a response into an alert box?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "If you wish to accept an alert that is triggered by clicking on a link called “Information”, what would replace (x) in the following code block: accept_alert do (x) end?", - "type": "radio", - "answers": [ - "click_link(“Information”)", - "select(“Information”)", - "click_button(“Informaton”)" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - ":browser", - ":driver" - ], - "question": "With the Capybara property, page.driver.browser.manage.logs.get(), which property would capture JavaScript errors in Chrome?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "A headless browser will run a test without opening up a browser:", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - ":selenium", - ":selenium_chrome", - ":selenium_headless", - ":selenium_chrome_headless" - ], - "question": "Which property will make the Capybara.default_driver run Selenium WebDriver with Chrome in headless mode? ", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "question": "Which Applitools Eyes method is used to take screenshots?", - "type": "radio", - "answers": [ - "eyes.open", - "eyes.close", - "eyes.check_window" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "How do you initialize Applitools Eyes in your code?", - "type": "radio", - "answers": [ - "eyes.open", - "eyes.close", - "eyes.check_window" - ], - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course26", - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn core Java programming", - "group": "foundational_testing", - "releaseDate": "05/31/2019", - "duration": 355, - "chaptersCount": 30, - "learningPaths": [ - "learningPathApiJava", - "learningPathUIJava", - "learningPathMobileJava" - ], - "status": "live", - "credits": 3000, - "courseId": "course26", - "category": "Foundational Test Automation Courses", - "tags": [ - "java", - "programming", - "beginner", - "ui", - "api", - "mobile" - ], - "groupName": "Foundational Testing", - "title": "Java Programming", - "titleSlug": "java-programming-course", - "teacher": { - "profilePath": "angie_jones", - "twitter": "techgirl1908", - "name": "Angie Jones", - "linkedIn": "", - "photoURL": "angie.jpg" - }, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Allow people to download software", - "Provide instructions to a computer to enable it to perform tasks", - "Provide a career path for software engineers", - "Disrupt the world" - ], - "question": "The purpose of programs is to _____?", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Any programming language", - "Only machine language", - "Only Java", - "Only human-friendly programming languages" - ], - "question": "What kind of language is a computer able to understand?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What is an algorithm?", - "type": "radio", - "answers": [ - "A complex problem", - "A guide that provides the high level steps to complete a task", - "A programming language", - "A coffee flavor" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Programs are implementations of ____?", - "type": "radio", - "answers": [ - "Algorithms", - "Computers", - "Machine code", - "0s and 1s" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "question": "Which of the following serves as a folder to organize Java files?", - "type": "radio", - "answers": [ - "class", - "package", - "method", - "variable" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question10", - "question": "Which of the following denotes a comment in Java?", - "type": "radio", - "answers": [ - "%%", - "..", - "//", - "##" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question11", - "question": "Which statement will print HELLO to the console?", - "type": "radio", - "answers": [ - "print.out(“HELLO”):", - "System.out.println(“HELLO”);", - "Scanner.in(“HELLO”).", - "Out(“HELLO”)," - ], - "correctAnswerIndex": 1 - }, - { - "id": "question12", - "question": "What is the purpose of the semicolon in Java?", - "type": "radio", - "answers": [ - "To enclose a block of statements", - "To declare a new variable", - "To end a statement", - "To see all available methods" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question13", - "question": "Which of the following is a data type suitable for whole numbers?", - "type": "radio", - "answers": [ - "double", - "int", - "nextInt", - "nextDouble" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question14", - "type": "radio", - "answers": [ - "double", - "int", - "nextInt", - "nextDouble" - ], - "question": "Which of the following is a data type suitable for decimal numbers?", - "correctAnswerIndex": 0 - }, - { - "id": "question15", - "question": "Which of the following is a data type suitable for text?", - "type": "radio", - "answers": [ - "String", - "int", - "double", - "nextString" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question16", - "question": "Which operator is used to multiply numbers in Java?", - "type": "radio", - "answers": [ - "+", - "/", - "*", - "x" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question17", - "answers": [ - "+", - ".", - ":", - "*" - ], - "question": "Which operator is used to append a variable’s data to a String?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question18", - "answers": [ - "“Hello World” = String output;", - "“Hello World” = output String;", - "String output = “Hello World”;", - "output = String “Hello World”;" - ], - "question": "Given you have a variable named output with a data type of String, which of the following is a valid assignment for this variable?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question19", - "answers": [ - "compilation error", - "bug report", - "runtime error", - "warning alert" - ], - "question": "If you type something within your program that is invalid, you will get a _____?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "class", - "package", - "method", - "variable" - ], - "question": "Which of the following represents a Java file?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question20", - "question": "Java is case-sensitive.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "class", - "package", - "method", - "variable" - ], - "question": "Which of the following is a memory location used to store data?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "main", - "first", - "default", - "priority" - ], - "question": "What’s the name of the method that is invoked first when a Java class is executed?", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "MyPackage", - "mypackage", - "mypackage1", - "my_package" - ], - "question": "Which of the following package names violates Java convention?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "answers": [ - "MYCLASS", - "myClass", - "MyClass", - "myclass" - ], - "question": "Which of the following class names follows Java convention?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "name1", - "nameOne", - "1name", - "name_one" - ], - "question": "Which of the following variable names is invalid?", - "correctAnswerIndex": 2 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "public", - "print", - "scanner", - "hours" - ], - "question": "Which of the following is a reserved word in Java?", - "correctAnswerIndex": 0 - }, - { - "id": "question9", - "answers": [ - "Brackets - []", - "Curly braces - {}", - "Parentheses - ()", - "Semicolon - ;" - ], - "question": "Which of the following encloses a block of statements?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3a", - "questions": [ - { - "id": "question1", - "question": "Which of the following is used to enclose code comments that span multiple lines?", - "type": "radio", - "answers": [ - "//", - "/* */", - "{}", - "[]" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Comments can only exist within a method.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What is an if statement?", - "type": "radio", - "answers": [ - "A decision structure that executes statement(s) given some condition is met", - "A loop", - "A variable", - "A class" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "What goes inside of the parentheses of an if statement?", - "type": "radio", - "answers": [ - "A counter", - "A variable declaration", - "A condition", - "A String" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - "String", - "int", - "float", - "boolean" - ], - "question": "A condition is what type of expression?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "question": "The boolean data type holds ____", - "type": "radio", - "answers": [ - "whole numbers", - "decimal numbers", - "Strings", - "true or false" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Any time a variable is updated with a new value, it must be re-declared.", - "correctAnswerIndex": 1 - }, - { - "id": "question8", - "answers": [ - "A number that the program randomly generates", - "A number that is hard-coded as opposed to being represented by a variable", - "A number that changes every time the program runs", - "A number with the data type of Magic" - ], - "question": "What is a magic number?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3b", - "questions": [ - { - "id": "question1", - "question": "How many paths exist in an if-else statement?", - "type": "radio", - "answers": [ - "0", - "1", - "2", - "3" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "When will statements inside of an if block be executed?", - "type": "radio", - "answers": [ - "All the time", - "Only if condition is true", - "Only if condition is false", - "Never" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "When will statements inside of an else block be executed?", - "type": "radio", - "answers": [ - "All the time", - "Only if condition is true", - "Only if condition is false", - "Never" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "It is possible to execute the statements of both the if and the else blocks of an if-else statement.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "When there’s only one statement that needs to be executed", - "When there are several statements that need to be executed", - "Anytime - it’s completely optional", - "Never - it’s always required" - ], - "question": "When can curly braces be omitted from an if statement?", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3c", - "questions": [ - { - "id": "question1", - "answers": [ - "True", - "False" - ], - "question": "An if statement can exist inside of another if statement.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "True", - "False" - ], - "question": "The double data type can hold decimal and whole numbers.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "Nested ifs have the same effect as multiple stand-alone if statements.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Nested ifs have the same effect as a single if-else statement.", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "The corresponding else statement is the very next else statement that follows a completed if statement", - "There cannot be multiple if and else statements within a single program", - "The corresponding if and else statements are given the same name", - "Java has no way of knowing" - ], - "question": "Within a class, how does Java know which else statement is meant to correspond to which if statement.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "When will a nested if statement be evaluated?", - "type": "radio", - "answers": [ - "When the if statement in which it is nested inside of is false", - "When the if statement in which it is nested inside of is true", - "The order is random and cannot be controlled by the programmer", - "Before the if statement in which it is nested inside of" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3d", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "When there is one possible path", - "When there are two possible paths", - "When there are more than two possible paths" - ], - "question": "When is it ideal to use an if-else-if statement?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "With if-else-if statements, multiple conditions must be specified.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Which branches of an if-else-if statement are executed?", - "type": "radio", - "answers": [ - "All that are true", - "The first one that is true", - "All that are false", - "The last one that is false" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Which of the following is a valid value for the char data type?", - "type": "radio", - "answers": [ - "2", - "3.5", - "“Hello World”", - "‘Z’" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "When declaring a variable, you are required to also initialize it with a value within the same declaration statement.", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3e", - "questions": [ - { - "id": "question1", - "question": "When is it ideal to use a switch statement?", - "type": "radio", - "answers": [ - "When there is one possible path", - "When there are two possible paths", - "When there are more than two possible paths" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question10", - "question": "Which decision structure is best when there’s two conditional paths, where one should be executed if the condition is true and the other if the condition is false?", - "type": "radio", - "answers": [ - "if", - "if-else", - "if-else-if", - "nested ifs", - "switch" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question11", - "type": "radio", - "answers": [ - "if", - "if-else", - "if-else-if", - "nested ifs", - "switch" - ], - "question": "Which decision structure is used when there are more than two conditional paths and its condition only checks for equality?", - "correctAnswerIndex": 4 - }, - { - "id": "question12", - "answers": [ - "if", - "if-else", - "if-else-if", - "nested ifs", - "switch" - ], - "question": "Which decision structure can be used when you need to immediately check another condition if the first condition was met?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "Which decision structure is interchangeable with the switch statement?", - "type": "radio", - "answers": [ - "if", - "if-else", - "if-else-if", - "nested ifs" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "Any", - "None", - "Equality", - "Greater or less than" - ], - "question": "Which type of expression does the condition of a switch statement evaluate?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "case", - "switch", - "if", - "break" - ], - "question": "Each path of a switch statement is denoted by the word _____", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "All that are true", - "The first one that is true", - "All that are false", - "The last one that is false" - ], - "question": "Which cases of a switch statement are executed?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "question": "The purpose of the reserved word, break, is to ______", - "type": "radio", - "answers": [ - "Exit an if block and enter an else block", - "End a case block within a switch statement", - "Denote the end of the nested if statements", - "Close the input stream" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "Before all other cases are executed", - "When there are no case statements present", - "When the value being evaluated does not equal any of the case statements", - "After a case is executed" - ], - "question": "When is the default case within a switch statement executed?", - "correctAnswerIndex": 2 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "The next case will also be executed", - "The program will crash", - "There will be a compilation error", - "The program will add it by default" - ], - "question": "What will happen in a case where the break statement is omitted?", - "correctAnswerIndex": 0 - }, - { - "id": "question9", - "question": "Which decision structure is best for a case where there’s only one conditional path needed?", - "type": "radio", - "answers": [ - "if", - "if-else", - "if-else-if", - "nested ifs", - "switch" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3f", - "questions": [ - { - "id": "question1", - "question": "Which relational operator is used to test for equality?", - "type": "radio", - "answers": [ - ">", - "<", - "=", - "==" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "Which of these is an appropriate way to test if a equals 5?", - "type": "radio", - "answers": [ - "if(a = 5)", - "if(a == 5)", - "if(a.equals(5))", - "if(5 = a)" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "They are interchangeable with relational operators", - "They are used to combine two conditions to result in a single boolean value", - "They are data types", - "There are an infinite number of them to choose from" - ], - "question": "Which is true of logical operators?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Which of the following is the logical operator for AND", - "type": "radio", - "answers": [ - ">>", - "||", - "&&", - "==" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - ">>", - "||", - "&&", - "==" - ], - "question": "Which of the following is the logical operator for OR", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "answers": [ - "==", - "!=", - "!", - "&&" - ], - "question": "Which logical operator is used to negate a boolean expression?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question7", - "question": "What’s the value of (2>3 && 4<=4)?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question8", - "question": "What’s the value of (9 != 0 || 5>5)?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question9", - "question": "Considering short circuit logic, how many conditions will actually be evaluated in the expression (1>2 && 4<5)?", - "type": "radio", - "answers": [ - "1", - "2", - "4", - "5" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter6a", - "questions": [ - { - "id": "question1", - "answers": [ - "Fields", - "Methods", - "Rectangles" - ], - "question": "Which one of the following is not a main component of an object?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question10", - "answers": [ - "Abstraction", - "Inheritance", - "Polymorphism", - "Encapsulation" - ], - "question": "Hiding the data of a class by making its fields private and allowing access through public methods is known as ______", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Constructors are required to have a return type.", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "If a class has a name of Trophy, which of the following is a valid constructor name", - "type": "radio", - "answers": [ - "Constructor", - "MyConstructor", - "Trophy", - "constructor" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "Which of the following is a default constructor?", - "type": "radio", - "answers": [ - "Product()", - "Product(double price)", - "Product(String sku)", - "Product" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "What is the purpose of a constructor?", - "type": "radio", - "answers": [ - "To create a new object", - "To initialize an object when it is created", - "To create a new class", - "To delete an object that is no longer in use" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "0", - "1", - "3", - "There is no limit" - ], - "question": "What is the maximum number of constructors allowed within a class?", - "correctAnswerIndex": 3 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "They cannot be accessed outside of the class", - "They cannot be used within the class", - "They are not allowed to be private", - "They can only be used once" - ], - "question": "Which of the following is true about members of a class that have private access modifiers?", - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "question": "Methods that do not have an explicit access modifier can be accessed by ______.", - "type": "radio", - "answers": [ - "Other methods within the same class only", - "Classes within the same package only", - "Classes outside of the same package only", - "There are no restrictions" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "type": "radio", - "answers": [ - "private", - "protected", - "public", - "open" - ], - "question": "For methods to be accessed from code outside of its package, it must have which access identifier?", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter6b", - "questions": [ - { - "id": "question1", - "answers": [ - "object", - "new", - "instatiate", - "start" - ], - "question": "Which reserved word is used to instantiate an object?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Which operator allows you to access an object's accessible methods?", - "type": "radio", - "answers": [ - ".", - ">", - ";", - "[]" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Which of the following is called when instanting a new object?", - "type": "radio", - "answers": [ - "First method in the class", - "Last method in the class", - "A constructor of the class", - "Field of the class" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "How does an object instantiation map to the proper constructor?", - "type": "radio", - "answers": [ - "By using the constructor with the same parameter list", - "By only making one constructor within the class", - "It's always the default constructor", - "By the different constructor names" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Only one instance of a class can exist at a given time.", - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "question": "The data type of an object is a ______", - "type": "radio", - "answers": [ - "Class", - "Method", - "Constructor", - "String" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter6c", - "questions": [ - { - "id": "question1", - "question": "Methods can only return primitive data types", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Classes that exist outside of the package in which they are being used must be imported.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Is this a valid return statement for a method that specifies its return type as Object: `return new Object();`?", - "type": "radio", - "answers": [ - "Yes", - "No" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "All methods must be static", - "Static methods are ones that can be called without instantiating its class. They do not have knowledge of state within the class", - "Static methods are always public", - "Static methods are aware of the state of other members of the class" - ], - "question": "Which is true about static methods?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "For a static method to be able to call a non-static method, it must do so by _______?", - "type": "radio", - "answers": [ - "Using an object of the type in which the non-static method belongs", - "Simply calling the method's name. Nothing special is needed", - "Static methods cannot call non-static methods" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "Static global fields can be accessed by non-static methods of the same class.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "In Java, default constructors exist in classes with no constructors, even if not explicitly defined.", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter6d", - "questions": [ - { - "id": "question1", - "question": "Every method within a class must have a unique name.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Overloading is ___________", - "type": "radio", - "answers": [ - "When multiple methods within a class have the same name, but different parameter lists", - "When multiple methods within the same class have different names, but the same parameter list", - "When multiple methods within different, unrelated classes have the same name", - "When there are too many methods within one class" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "How many overloaded methods are allowed within a class?", - "type": "radio", - "answers": [ - "0", - "1", - "2", - "unlimited" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter7a", - "questions": [ - { - "id": "question1", - "question": "What is an array?", - "type": "radio", - "answers": [ - "A data type", - "A variable which can hold multiple values", - "A class type", - "A constructor which takes multiple parameters" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question10", - "type": "radio", - "answers": [ - "Set the size of the array to 2", - "Read the element with the value of 2", - "Read the element with the index of 2", - "Remove the last 2 values of the array" - ], - "question": "Given this statement: `myArray[] = {2, 4, 6, 8};`, what would `myArray[2]` do?", - "correctAnswerIndex": 2 - }, - { - "id": "question11", - "answers": [ - "A variable whose value does not change throughout the execution of the program", - "A variable which represents a letter of the alphabet", - "A variable which constantly changes" - ], - "question": "What is a constant variable?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question12", - "question": "Which keyword ensures a variable is indeed a constant?", - "type": "radio", - "answers": [ - "new", - "constant", - "final", - "static" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question13", - "question": "By convention, how is a constant variable's name defined?", - "type": "radio", - "answers": [ - "All lowercase", - "All uppercase", - "Camel case" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question14", - "type": "radio", - "answers": [ - "if statement", - "switch statment", - "loop" - ], - "question": "To access all elements of an array, which structure is best?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "True", - "False" - ], - "question": "Values within an array can have a variety of data types.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "int myArray[];", - "int[] myArray;", - "[]int myArray" - ], - "question": "Which is NOT a valid declaration of an array?", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "The length of the array", - "The data type of the array", - "A memory location of one of the array's values", - "A force of nature" - ], - "question": "What is an element of an array?", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - "The address of a value within the array", - "The length of the array", - "The first element of an array", - "A unique value within the array" - ], - "question": "What is an index in terms of arrays?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "What does the number 3 represent in this statement: `myArray = new int[3];` ?", - "type": "radio", - "answers": [ - "The number of arrays in use", - "The maximum number of elements the array can hold", - "The number of existing values that have been stored inside of the array", - "The fourth value of this array" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "question": "The indices of an array begin at the number 1.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question8", - "question": "Given this statement: `myArray[2] = 4;`, how many elements can myArray store?", - "type": "radio", - "answers": [ - "2", - "4", - "6", - "cannot be determined from this statement" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question9", - "question": "Given this statement: `myArray[2] = 4;`, what is the value of the third element of the array?", - "type": "radio", - "answers": [ - "2", - "4", - "6", - "cannot be determined from this statement" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter7b", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "sequential", - "until", - "binary", - "split" - ], - "question": "Which search algorithm searches every element of an array until a value is found?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "sequential", - "linear", - "binary", - "split" - ], - "question": "Which search algorithm searches an array by dividing it in half in each iteration?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "Before performing a binary search, the array must be sorted.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "Assigns the value of fruits to fruit", - "Loops through an array called fruits, and on each iteraction, assigns the current element to the variable called fruit", - "Assigns the sentinel to an initial value of whatever is stored inside of the variable called fruits", - "Gives a syntax error" - ], - "question": "What does this declaration of an enhanced for loop do: `for(String fruit : fruits)`?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "What type of comment describes information about a method and its parameters and return type?", - "type": "radio", - "answers": [ - "Single line comment", - "Multi-line comment", - "Javadoc", - "Handwritten manual" - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter7c", - "questions": [ - { - "id": "question1", - "question": "Which of the following returns the number of elements allocated for array \"myArray\"?", - "type": "radio", - "answers": [ - "myArray.size", - "myArray.length", - "myArray.elements", - "myArray.values" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Arrays can only hold integers", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "The number of elements in the array", - "The number of rows of the array", - "The number of columns of the array", - "The dimensions of the array" - ], - "question": "In this multidimensional array: myArray[10][5], what does the number 10 represent?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter9a", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "inherits", - "subclass", - "superclass", - "extends" - ], - "question": "Which is the reserved word used to inherit from a class?", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "A", - "B", - "Neither", - "This is not enough information to determine" - ], - "question": "In the declaration `class A extends B`, which class is the superclass?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "A subclass can only contain what it inherited.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "What is the purpose of inheritance between classes?", - "type": "radio", - "answers": [ - "To reuse code", - "To hide code", - "To manipulate code", - "To get rich" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "An inheritance relationship is created in the _______.", - "type": "radio", - "answers": [ - "Subclass", - "Superclass", - "Both the subclass and the superclass", - "Neither the subclass nor the superclass" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter9b", - "questions": [ - { - "id": "question1", - "question": "Given that Car inherits from Vehicle, and no constructors have been explicitly defined in either class, which of these will be called first upon the instantiation of Car?", - "type": "radio", - "answers": [ - "Car()", - "Vehicle()", - "Neither because no constructors were defined" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "A subclass's default constructor can only access the default constructor of its superclass.", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Given that Vegetable inherits from Food, and super(\"Brocolli\") is called from one of Vegetable's constructors, which of the following will be executed upon this call?", - "type": "radio", - "answers": [ - "Vegetable()", - "Vegetable(String name)", - "Food()", - "Food(String name)" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "An explicit call to a superclass's constructor must be the very first line of the calling constructor.", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "The subclass's default constructor will automatically call the superclass's implicit default constructor.", - "The subclass has to define constructors that match the signatures of those which are in its superclass", - "The subclass has to explicitly call one of the existing non-default constructors of its superclass from one of its constructors.", - "The first constructor defined in the superclass will automatically be called from the subclass's default constructor" - ], - "question": "If a superclass has constructors but none of them are a default constructor, which of the following is true?", - "type": "radio", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter9c", - "questions": [ - { - "id": "question1", - "answers": [ - "To change the behavior of an inherited method", - "To fix a bug in the behavior of a method within a superclass", - "To ensure that an inherited method is executed", - "To enable inheritance from a superclass" - ], - "question": "What is the purpose of overriding a method?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "To override an inherited method, which of the following must be done?", - "type": "radio", - "answers": [ - "The subclass must redefine the method with the same signature", - "The subclass must redefine the method with the same body", - "The superclass must redefine the method with the same signature", - "The superclass must redefine the method with the same body" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Using the @Override annotation is required to override an inherited method.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "What is the purpose of the @Override annotation?", - "type": "radio", - "answers": [ - "To indicate your intention of overriding a method. It will flag an error if you goof up", - "It can be placed in the superclass on the original method to allow you to override it without redefining the method in the subclass", - "To indicate that all of the methods of the superclass have been overridden in the subclass", - "To establish inheritance between two classes" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "How does overloading differ with and without inheritance?", - "type": "radio", - "answers": [ - "Without inheritance, methods are overloaded within the same class. With inheritance, a subclass can overload a method that it inherited from the superclass", - "Overloading is only allowed when inheritance is involved", - "Overloading is only allowed when inheritance is NOT involved", - "Overloading does not change with or without inheritance" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter9d", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Constructors", - "Private fields and methods", - "Public and protected fields and methods", - "All of the above" - ], - "question": "Which of the following does a subclass inherit from its superclass?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "public", - "private", - "protected", - "final" - ], - "question": "If a class does not want any of its subclasses to override an inherited member, it can declare that member as ______.", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "When overriding a method, the subclass is allowed to change the access modifier to be stricter, thus giving weaker access.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "All classes in Java, whether provided by the language or created by you, inherit from the Object class.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "answers": [ - "True", - "False" - ], - "question": "Classes that inherit from the same superclass are siblings and have a special relationship.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "answers": [ - "True", - "False" - ], - "question": "Classes can explicitly list multiple classes to inherit from within their header.", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter10", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "hiding data and exposing behavior", - "objects having the ability to take on multiple forms", - "inheritance between classes", - "classes belonging to multiple packages" - ], - "question": "Which of the following describes polymorphism in object-oriented programming?", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Given that class Car inherits from class Vehicle, is this a valid statement: `Vehicle car = new Car();`?", - "type": "radio", - "answers": [ - "Yes", - "No" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Yes", - "No" - ], - "question": "Given that class Car inherits from class Vehicle, is this a valid statement: `Car car = new Vehicle();`?", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Given that class Car inherits from class Vehicle, and both classes contain a method called drive(), which of the methods would be executed in this second statement: `Vehicle car = new Car(); car.drive();`?", - "type": "radio", - "answers": [ - "drive() from class Vehicle", - "drive() from class Car", - "neither", - "both" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "What is the purpose of casting an object to another type?", - "type": "radio", - "answers": [ - "To access class members from the other type", - "To create a new instance of the object", - "To star in a movie" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "Given this object: `Vehicle car = new Car();`, what would `car instanceof Car` resolve to?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter11a", - "questions": [ - { - "id": "question1", - "question": "Abstract classes can be instantiated", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Abstract methods do not have a body.", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Abstract classes are designed to be run as-is", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "The reserved word `abstract` is a(n) ______", - "type": "radio", - "answers": [ - "Access modifier", - "Non-access modifier", - "Return type", - "Data type" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "Every other method in the class must also be abstract", - "The class itself must be abstract", - "Any method that calls this method must also be abstract", - "Any method that overrides this method must also be abstract" - ], - "question": "Given a class contains an abstract method, which of the following is true?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "question": "Abstract classes can only contain abstract methods.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "answers": [ - "The subclass must implement the inherited abstract methods or declare itself as abstract as well.", - "The subclass only inherits the non-abstract methods.", - "The subclass only inherits the abstract methods.", - "A class cannot inherit from an abstract class." - ], - "question": "Which of the following is true about a subclass that inherits from an abstract class.", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter11b", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "public class I", - "public interface I", - "public class interface I", - "public interface class I" - ], - "question": "Which of the following is a valid declaration of interface I?", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Interfaces are required to declare its methods as abstract.", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which is a valid declaration of a field within an interface?", - "type": "radio", - "answers": [ - "public int size;", - "abstract public int size;", - "protected int size;", - "int size = 0;" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "class A implements B", - "class A extends B", - "class A inherits B", - "class A interfaces B" - ], - "question": "Given that class B is an interface, which of the following is a valid header for class A?", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "Interfaces can be instantiated.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "final", - "private", - "default", - "abstract" - ], - "question": "Within an interface, methods that contain a body must be declared as __________", - "correctAnswerIndex": 2 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "By providing the list of names of the interfaces, separated by commas, within the class header", - "By creating constructors for each of the interfaces", - "By extending one interface and implementing another" - ], - "question": "How does a class specify that it will implement multiple interfaces?", - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "If a class indicates that it will implement multiple interfaces, then it must provide implementation for all abstract methods of those interfaces.", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter12a", - "questions": [ - { - "id": "question1", - "question": "Which of the following data structure does not inherit from the Collection interface?", - "type": "radio", - "answers": [ - "Set", - "List", - "Queue", - "Map" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question10", - "question": "Values within a Map are required to be unique.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question11", - "question": "What happens when we attempt to add a duplicate key to a Map using `put()`?", - "type": "radio", - "answers": [ - "An error occurs", - "The duplicate element is ignored", - "The duplicate element overrides the original element" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Which of the following data structure holds ordered data which does not have to be unique?", - "type": "radio", - "answers": [ - "Set", - "List", - "Object", - "Map" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "Set", - "List", - "Queue", - "Map" - ], - "question": "Which of the following data structures typically processes its entries using the First In - First Out algorithm?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Set", - "List", - "Queue", - "Map" - ], - "question": "Which of the following data structures holds key/value pairs?", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "answers": [ - "Set", - "List", - "Queue", - "Map" - ], - "question": "Which of the following data structure's elements can be accessed directly by their position?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "answers": [ - "True", - "False" - ], - "question": "Collections are only able to hold Strings", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "answers": [ - "Head", - "Lead", - "Primary", - "Top" - ], - "question": "The element that will be deleted from a Queue when `remove()` is called, is known as the _______?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "question": "The last element added to a Queue is known as a _______?", - "type": "radio", - "answers": [ - "Head", - "Tail", - "Back", - "Top" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "question": "Which method returns the first element of a Queue?", - "type": "radio", - "answers": [ - "get", - "top", - "first", - "peek" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter12b", - "questions": [ - { - "id": "question1", - "question": "Which of the following data structures does NOT have an `iterator()` method?", - "type": "radio", - "answers": [ - "Set", - "List", - "Queue", - "Map" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "next()", - "hasNext()", - "more()", - "iterate()" - ], - "question": "Which method of Iterator lets you know if there are more elements to iterate over?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "next()", - "hasNext()", - "entry()", - "getNext()" - ], - "question": "Which method of Iterator gives you the next entry in the map?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "In order to use the enhanced for loop to iterate over collections, what must be declared?", - "type": "radio", - "answers": [ - "The size of the collection", - "The name of the keys", - "The data type of the elements", - "A secret handshake" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - ".", - "+", - "&&", - "<>" - ], - "question": "Which operator is used to declare the data type of the elements within a collection/map?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "question": "Maps are able to hold entries with primitive data types as their key and value.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "question": "The forEach() method takes which of the following?", - "type": "radio", - "answers": [ - "lambda expression", - "iterator", - "i counter", - "empty parameter list" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter13a", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "if/else", - "switch", - "for loop", - "try/catch" - ], - "question": "What type of structure is used to handle exceptions?", - "correctAnswerIndex": 3 - }, - { - "id": "question12", - "question": "A finally block is executed only when the catch block is executed.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Statements that could possibly throw an exception go inside of which block?", - "type": "radio", - "answers": [ - "try", - "catch", - "anywhere in the method", - "at the top of the class" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "try", - "catch", - "anywhere in the method", - "at the top of the class" - ], - "question": "The code to actually handle the exception goes inside of which block?", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "A catch block follows a try block.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "To handle an exception, you must specify which exceptions you are handling.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "When is the code inside of a catch block executed?", - "type": "radio", - "answers": [ - "Always", - "Never", - "Only if an exception of the type or subtype specified is thrown", - "Only if an exception of the exact type specified is thrown" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question7", - "question": "What is a stack trace?", - "type": "radio", - "answers": [ - "The name of the exception", - "The superclass of the exception", - "Information about the exception and the path that the code took", - "The syrup left over from pancakes" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question8", - "question": "There can only be one catch block associated with a single try block.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "type": "radio", - "answers": [ - ",", - ":", - "|", - "/" - ], - "question": "Which symbol is used to list multiple exceptions within one catch block?", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter13b", - "questions": [ - { - "id": "question1", - "question": "Which of the following is NOT a valid option for a method which calls another method that throws an exception.", - "type": "radio", - "answers": [ - "Catch the exception", - "Rethrow the exception", - "Ignore the exception" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "How do you rethrow an exception?", - "type": "radio", - "answers": [ - "By adding the word rethrows inside of the catch block", - "By adding throws to the method header followed by the exception type", - "By adding throws inside of the try block" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "By throwing a new instance of that exception", - "By implementing a try/catch block", - "By declaring an Exception object as a global field" - ], - "question": "How do you throw an exception from your method?", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "You can define your own exception classes.", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter14", - "questions": [ - { - "id": "question1", - "question": "Java can be used for test automation.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "What type of test automation can Java be used for?", - "type": "radio", - "answers": [ - "Web", - "Mobile", - "API", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "Inheritance can be used in test automation projects.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Collections can be used in test automation projects.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Decision structures can be used in test automation projects.", - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "Loops can be used in test automation projects.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "What is the purpose of loops?", - "type": "radio", - "answers": [ - "To repeat a block of code more than once", - "To provide multiple paths of execution based on conditions", - "To make your code dizzy", - "To draw circles with your code" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question10", - "question": "Which of the following is NOT one of the statements required in a for loop’s definition?", - "type": "radio", - "answers": [ - "Initialization on sentinel", - "Loop Condition", - "Incrementer / Decrementer", - "Loop Name" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "While", - "Do While", - "If-else", - "For" - ], - "question": "Which of the following is NOT a loop structure?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "Which of the following are condition-controlled loops?", - "type": "radio", - "answers": [ - "While and Do While", - "For and While", - "For and Do While", - "Any nested loop" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "While", - "Do While", - "If-else", - "For" - ], - "question": "Which of the following is a count-controlled loop?", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "question": "Which loop should be used if you know the number of iterations it needs to execute?", - "type": "radio", - "answers": [ - "While", - "Do While", - "For", - "Ring Around the Rosie" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "While", - "Do While", - "For", - "Singleton" - ], - "question": "Which loop is best to use if the contents definitely need to be executed at least once?", - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "answers": [ - "While", - "Do While", - "For", - "Break" - ], - "question": "Which loop is best to use if the loop may or may not need to run at all?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "question": "Proper use of a ________ helps avoid an infinite loop?", - "type": "radio", - "answers": [ - "Sentinel", - "Semicolon", - "Curly brace", - "Bracket" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question9", - "type": "radio", - "answers": [ - "i++", - "i--", - "i+", - "i*" - ], - "question": "Which of the following is an example of a statement that would increment a sentinel by 1?", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "The first line of a method is called a _______", - "type": "radio", - "answers": [ - "header", - "opening", - "definition", - "body" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question10", - "question": "How many values can a method return?", - "type": "radio", - "answers": [ - "1", - "2", - "3", - "Unlimited" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question11", - "answers": [ - "True", - "False" - ], - "question": "If a called method returns a value, the calling method is required to receive what’s returned and store it into a variable.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question12", - "question": "A calling method’s argument list must be in the exact same order as the receiving method’s parameter list.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question13", - "answers": [ - "True", - "False" - ], - "question": "Arguments and their corresponding parameters must have the exact same name.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question14", - "question": "Variables declared at the class level are also known as _____ variables.", - "type": "radio", - "answers": [ - "method", - "global", - "local", - "conditional" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question15", - "question": "Variables declared at the method level are also known as _____ variables.", - "type": "radio", - "answers": [ - "method", - "global", - "local", - "conditional" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Which of the following is NOT a required part of a method declaration?", - "type": "radio", - "answers": [ - "name", - "return type", - "access modifier", - "parentheses" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "name", - "parameter list", - "non-access modifier" - ], - "question": "Which of these is NOT a part of a method’s signature?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "By its name", - "By its data type", - "By its return type", - "By its access modifier" - ], - "question": "How do you call a method?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "What determines the order in which methods are executed within a class?", - "type": "radio", - "answers": [ - "The order in which they are defined within the class", - "The order in which they are called", - "Alphabetical order", - "It's random" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "exit", - "break", - "return", - "close" - ], - "question": "Which is the reserved word to end a method and send back a value to the caller?", - "correctAnswerIndex": 2 - }, - { - "id": "question7", - "answers": [ - "String", - "int", - "boolean", - "none" - ], - "question": "What type of data will a method with the `void` return type return?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question8", - "question": "What is the scope of a method's parameter?", - "type": "radio", - "answers": [ - "Can be used anywhere in the class", - "Can be used anywhere within the method", - "Can be used only within the method's header", - "Cannot be used within other blocks within the method, such as loops and decisions" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "type": "radio", - "answers": [ - "public", - "static", - "String", - "main" - ], - "question": "Which of these would be a valid return type?", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter8", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "There is no difference.", - "Dynamically typed langauges determine the data type of variables at runtime. Statically typed languages determine the data type of variables at compile time.", - "Statically typed langauges determine the data type of variables at runtime. Dynamically typed languages determine the data type of variables at compile time." - ], - "question": "What is the difference between statically typed and dynamically typed programming languages?", - "correctAnswerIndex": 1 - }, - { - "id": "question10", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Strings are immutable", - "correctAnswerIndex": 0 - }, - { - "id": "question11", - "question": "Which class will allow you to modify a String, such as delete from it, insert to it, etc?", - "type": "radio", - "answers": [ - "String", - "Wrapper", - "Object", - "StringBuilder" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "4", - "5", - "1", - "8" - ], - "question": "How many primitive data types are available in Java?", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "int", - "char", - "boolean", - "String" - ], - "question": "Which of the following is NOT a primitive data type?", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "To allow programmers to initialize a variable without having to explicitly declare its data type", - "To make Java dynamically-typed", - "To replace primitive data types", - "To begin a loop" - ], - "question": "What is the purpose of the `var` keyword?", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "How does Java know the actual data type of a variable declared with `var`?", - "type": "radio", - "answers": [ - "It figures it out at runtime", - "It infers the data type by the value that is assigned to the variable", - "It doesn't know the data type", - "A little genie tells it" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "type": "radio", - "answers": [ - "A class that contains another class", - "A class that belongs to multiple packages", - "An object representation of a primitive data type", - "A class that holds candy" - ], - "question": "What is a wrapper class?", - "correctAnswerIndex": 2 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "A String is equivalent to an array of characters.", - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "T", - "A", - "U", - "TAU" - ], - "question": "Given `String name = \"TAU\";`, what does `name.charAt(1);` return?", - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "question": "Given \"avacado\".split(\"a\"); , how many elements will the resulting array hold?", - "type": "radio", - "answers": [ - "1", - "2", - "3", - "4" - ], - "correctAnswerIndex": 3 - } - ] - } - ] - }, - { - "id": "course27", - "group": "foundational_testing", - "releaseDate": "06/21/2019", - "duration": 158, - "chaptersCount": 13, - "learningPaths": [ - "learningPathUIJS" - ], - "status": "live", - "credits": 1300, - "courseId": "course27", - "category": "Foundational Test Automation Courses", - "tags": [ - "ui", - "javascript", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "Automating in the Browser Using JavaScript", - "titleSlug": "automating-in-the-browser-using-javascript", - "teacher": { - "photoURL": "alan_richardson.png", - "profilePath": "alan_richardson", - "twitter": "eviltester", - "name": "Alan Richardson", - "linkedIn": "" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn to automate web applications from within the browser itself", - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "Is it possible to automate web applications from the browser itself?", - "type": "radio", - "answers": [ - "No, you must install a GUI Automation Tool", - "No, we should only ever use the API", - "No, Test Automation is bad", - "Yes, we can write JavaScript in the browser to automate web applications" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "question": "What is a Browser Based Test Automation Bot?", - "type": "radio", - "answers": [ - "A robot that we have to buy that costs millions of dollars", - "A hypnotized human that will repeat tasks as required", - "A chrome plugin that automates the web application", - "A model based execution script that can run in the browser" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "Which of the following do we need to learn to fully automate applications from within the browser?", - "type": "radio", - "answers": [ - "HTML", - "CSS", - "JavaScript", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "something you use so you don't lose your place when reading a book", - "code that runs from a bookmark in your browser", - "a market for buying Chrome plugins", - "a small device for writing the expiry date on tinned food" - ], - "question": "What is a bookmarklet?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "question": "Which of the following do we have to learn to automate an application?", - "type": "radio", - "answers": [ - "write some Javascript", - "read CSS", - "use the browser dev tools", - "all of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "in the cookies", - "on a server", - "in the local storage", - "in the cloud" - ], - "question": "Where does the TodoMVC application store its data?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "What is a single page application?", - "type": "radio", - "answers": [ - "an application with no links or buttons to click", - "an application that does not use Javascript and only uses simple HTML", - "an application that does not need to reload the page from the server", - "an application that uses an API to connect to the cloud" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "What does the sources tab in the dev tools allow us to view?", - "type": "radio", - "answers": [ - "the design documents and requirements for the application", - "the source code of the application including HTML, JavaScript and CSS", - "the binary code of the application running on the server", - "the names and details the server that runs the application" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "The \"View Source\" in the browser shows what?", - "type": "radio", - "answers": [ - "the code provided by the server when the application loads", - "the code of the rendered page after the user has used the application", - "the CSS style sheets for the application", - "a version history of the HTML for the application" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "What does DOM stand for?", - "type": "radio", - "answers": [ - "Delivery Objective Mechanism", - "Document Object Model", - "Documents Observation Map", - "Document Ordering Machine" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question10", - "question": "getElementById returns a web element based on which attribute?", - "type": "radio", - "answers": [ - "name", - "class", - "type", - "id" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question11", - "question": "Which of the following is true about the Elements view in the browser:", - "type": "radio", - "answers": [ - "we can view the HTML source code of the rendered page", - "we can amend the HTML source code of the rendered page", - "we can add new attributes to Web Element in the DOM", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question12", - "question": "CSS Selectors allow us to select:", - "type": "radio", - "answers": [ - "by name", - "by id", - "by class name", - "all of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question13", - "question": "The CSS selector \".toggle-all\" finds items which:", - "type": "radio", - "answers": [ - "have an id attribute \"toggle-all\"", - "have a class attribute of \"toggle-all\"", - "have a name attribute \"toggle-all\"", - "have a parent with a class attribute \"toggle-all\"" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question14", - "type": "radio", - "answers": [ - "the browser beeps", - "the browser shows an error message", - "the browser highlights in yellow what it thinks you wanted to find", - "nothing is highlighted in yellow on the screen" - ], - "question": "When we use Elements view and search using a CSS select but there is no match, what happens?", - "correctAnswerIndex": 3 - }, - { - "id": "question15", - "question": "The CSS selector \"#todo-items\" finds items which:", - "type": "radio", - "answers": [ - "have an id attribute \"todo-items\"", - "have a class attribute of \"todo-items\"", - "have a name attribute \"todo-items\"", - "have a parent with a class attribute \"todo-items\"" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question16", - "answers": [ - "a parent has multiple items and we want to find the oldest", - "a query selector matches multiple items and we want one at a specific position", - "a web element has not children and we want to add some", - "a list has multiple items and we want to find every nth item" - ], - "question": "We can use \":nth-child\" when:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "To view the DOM for a Web Element on the page we have to use which command from the context menu?", - "type": "radio", - "answers": [ - "Look Up", - "Inspect", - "Copy", - "Print..." - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What does MDN stand for?", - "type": "radio", - "answers": [ - "Mozilla Developer Network", - "Magazine Delivery Nation", - "Magic Dancing Ninja", - "Microsoft Dev Network" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "What is a good way to start learning CSS locators?", - "type": "radio", - "answers": [ - "buy a book on Ruby on Rails", - "create a Todo application in PHP", - "use view sources to read the application CSS files" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - "String", - "Selector", - "XPath", - "All of the above" - ], - "question": "In the DOM view, which of these can we use to 'find' elements?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "question": "The CSS Selector that the browser can generate using \"Copy selector\" is:", - "type": "radio", - "answers": [ - "only usable with Selenium WebDriver", - "usable for finding web elements but inefficient", - "the best locator it is possible to write", - "suitable for creating a bookmarklet from" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "answers": [ - "useful for finding elements in the DOM view", - "usable for returning web elements but inefficient", - "only executable using Node.js on a web server", - "usually broken and never works" - ], - "question": "The JavaScript that the browser can generate using \"Copy JS Path\" is:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question8", - "answers": [ - "querySelector", - "querySelectorAll", - "getElementsByName", - "getElementsByClassName" - ], - "question": "Which of the following functions returns a single web element?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question9", - "answers": [ - "JavaScript", - "PHP", - "Ruby", - "Java" - ], - "question": "The dev tools console allows us to run code in which programming language?", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "we can not simulate a user interacting with the application from JavaScript", - "we can simulate events using JavaScript to make things happen in the browser", - "we use the application's API to interact with it from JavaScript", - "we need to call the applications own JavaScript code directly to automate it" - ], - "question": "Which of the following statements is true?", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "call the 'click' function directly on the Web Element", - "create an event and add it to the event queue", - "use the mouse driver and call it from C++", - "set a 'click' attribute on the Web Element" - ], - "question": "To trigger a click event in the browser we:", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "The Event Listeners tab in the developer tools show us:", - "type": "radio", - "answers": [ - "The events that have code associated with them for a specific Web Element", - "All the events that can be triggered for a Web Element", - "All the events in the application which have been programmed", - "The CSS selectors we can use to trigger functionality" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "Which of the following are true about triggering a 'change' event?", - "type": "radio", - "answers": [ - "we cannot call 'change' as a function", - "we have to use dispatchEvent to trigger a change event", - "a change event should be set to 'bubble' to trigger all associated events on the page", - "all of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "answers": [ - "use Selenium WebDriver to automate them", - "investigate the sequence of actions in the Elements view and simulate the effects in code", - "create all event sequences as a single event", - "call the event functions directly within 1 millisecond" - ], - "question": "When investigating complex event sequences we have to:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question7", - "answers": [ - "buy a book on JavaScript", - "we have to memorise W3C standards", - "use code completion in the console", - "search the web and research code samples" - ], - "question": "How do we learn the correct code to trigger specific events?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "manually amend them in the console, checking the results to make sure they work", - "use Selenium WebDriver and don't worry about it", - "use a commercial tool to cut them down", - "don't use CSS selectors, use getElementById and have ids on all controls" - ], - "question": "To make CSS selector queries shorter and more efficient:", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "answers": [ - "write text to the browser page", - "write text to the JavaScript console", - "write text to a file" - ], - "question": "What does `console.log` do?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "When we have a variable called `counter`, what does `counter++` mean?", - "type": "radio", - "answers": [ - "create a new variable called `counter+`", - "add 1 to the value stored in the `counter` variable", - "subtract 1 from the value stored in the `counter` variable" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "listitems[2]", - "listitems[5]", - "listitems[4]", - "listitems(5)" - ], - "question": "If we have an array called `listitems` what is the syntax for finding the 5th item in the array?", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "If we have an array called `listitems`, how do we find the length of the array in JavaScript?", - "type": "radio", - "answers": [ - "listitems.size()", - "listitems.size", - "listitems.length", - "listitems.length()", - "listitems" - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "else clause", - "condition to evaluate", - "code to execute" - ], - "question": "Given an if statement like the following, `if(1===1){console.log(\"bob\")}`, the text in brackets 1===1 is the", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "An if statement with a condition like (\"1\"==1) would", - "type": "radio", - "answers": [ - "evaluate to true because == converts types", - "evaluate to false because a String value does not equal an integer value" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "evaluate to true because === converts types", - "evaluate to false because a String value does not equal an integer value" - ], - "question": "An if statement with a condition like (\"2\"===2) would", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "calculate 5 percent of 3", - "calculate the result of dividing 5 by 3", - "calculate the result of dividing 5 by 3 as integers and return the remainder value" - ], - "question": "The modulus command 5%3 means:", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "question": "Chrome's inbuilt JavaScript editor is called:", - "type": "radio", - "answers": [ - "Snippets", - "Audits", - "Whippets", - "JavaScripts" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "it has syntax colouring", - "it can pretty print the code", - "it can add breakpoints to support debugging", - "all of the above" - ], - "question": "What is true about the snippets editor:", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "we can access the internal variables from the console", - "we can not access the variables from the console because snippets runs in a separate virtual machine" - ], - "question": "When we have code stopped by a breakpoint in the debugger:", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "The code completion in snippets view is:", - "type": "radio", - "answers": [ - "as good as the code completion from the Console", - "not as good as the code completion from the Console" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter8", - "questions": [ - { - "id": "question1", - "question": "A function in JavaScript:", - "type": "radio", - "answers": [ - "makes it easy to organise code", - "creates a readable abstraction layer for automating", - "can take parameters", - "all of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "things.forEvery(clickItem)", - "things.forEach(clickItem(this))", - "things.forEach(clickItem)", - "clickItem(things).forEach()" - ], - "question": "If I have a collection of things in a variable I can iterate over all items in the collection and call a function clickItem by writing:", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "\"start \" & \"middle\" & \" end\"", - "\"start \" + \"middle\" + \" end\"", - "\"start \" . \"middle\" . \" end\"" - ], - "question": "I can join strings using what syntax?", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "A function that takes a parameter has which of following syntax?", - "type": "radio", - "answers": [ - "function withParam(){console.log(theParam)}", - "function withParam(theParam){console.log(theParam)}", - "function withParam(:theParam){console.log(theParam)}", - "var theParam=\"hello\";function withParam(){console.log(theParam)}" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "create an isolated 'namespace' to avoid interfering with the application under test", - "organise our functions into even more readable abstraction layers", - "create 'private' functions in the object that no-one else can use", - "all of the above" - ], - "question": "Creating objects allows us to:", - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "question": "Converting a function to a public function on an object is:", - "type": "radio", - "answers": [ - "very complicated and requires a lot of JavaScript knowledge", - "pretty simple once we realise it is copy paste with a few amendments" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter9", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "localStorage.empty()", - "localStorage.clear()", - "console.clear(localStorage)" - ], - "question": "In order to clear the localstorage from the console we use the command:", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Using a for loop to create test data is:", - "type": "radio", - "answers": [ - "never possible because it runs too fast", - "possible for some applications but not the todoMVC application", - "not possible because it is single threaded" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "runs a function every X milliseconds", - "runs a function after X milliseconds has passed" - ], - "question": "The `setTimeout` function:", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "The following command waits 1000 milliseconds before running the `createTodo` code: setTimeout(autoTodo.createTodo(\"make jello\"),1000)", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "The following command waits 1000 milliseconds before running the `createTodo` code: setTimeout(autoTodo.createTodo, 1000, \"make jello\")", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter10", - "questions": [ - { - "id": "question1", - "answers": [ - "refreshing the browser page", - "running the code *.clearInterval()" - ], - "question": "If we create a `setInterval` and do not assign it to a variable we can stop it by:", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "stopInterval(sayHello)", - "clearInterval(sayHello)", - "clearInterval(\"sayHello\")", - "sayHello.clearInterval()" - ], - "question": "If we create a setInterval and assign it to a variable we can stop it using the command: var sayHello = setInterval(function(){console.log(\"hello\")},1000);", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "answers": [ - "true because setInterval runs once after X milliseconds", - "false because setInterval runs every X milliseconds" - ], - "question": "When we use `setInterval` we need to wrap it in a for loop:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "A `setInterval` will run:", - "type": "radio", - "answers": [ - "forever, until page is refreshed or it is cleared", - "a maximum of 100 times" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter11", - "questions": [ - { - "id": "question1", - "answers": [ - "JavaScript code that runs from a bookmark", - "a Chrome extension", - "a node.js application for managing book collections" - ], - "question": "What is a bookmarklet?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Which of the following is the pattern for a bookmarklet?", - "type": "radio", - "answers": [ - "(function(){alert(\"hello\")})()", - "javascript:(function(){alert(\"hello\")})()", - "function(){alert(\"hello\")}()", - "javascript:({alert(\"hello\")})()" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which of the following is true for bookmarklets?", - "type": "radio", - "answers": [ - "we can run code that amends the DOM", - "bookmarklets can be released to the chrome store as extensions", - "bookmarklet code can only write to the console or create alerts" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "The JavaScript function for capturing input from the user is?", - "type": "radio", - "answers": [ - "prompt", - "alert", - "input" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter12", - "questions": [ - { - "id": "question1", - "question": "With JavaScript applications which of the following is true?", - "type": "radio", - "answers": [ - "we can only automate applications by simulating GUI events", - "if an application makes objects public then we can use those to automate the application" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question10", - "question": "Which of the following creates an empty array in JavaScript?", - "type": "radio", - "answers": [ - "var theFunctions = [];", - "var theFunctions = {}", - "var theFunctions = ()" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question11", - "question": "The `randoBot` in the video is an example of:", - "type": "radio", - "answers": [ - "Model Based Automation", - "Exploratory AI", - "Data Driven Testing", - "BDD" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question12", - "question": "Which of the following is true for the randoBot?", - "type": "radio", - "answers": [ - "it will stop after 10 minutes", - "it will run until clearInterval is used or the page is refreshed", - "it will cause a lot of load to be generated on the web server" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "it is not possible to automate the application", - "we can never gain access to its internal objects", - "we can use debug mode to gain access to the internal objects" - ], - "question": "When a JavaScript application makes its objects private:", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "true no-one can access the objects", - "false nothing on client side is secure" - ], - "question": "Making JavaScript application objects guarantees security on the client side:", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Which of the following is true about JavaScript applications in the browser?", - "type": "radio", - "answers": [ - "All JavaScript code is loaded into the browser so the user can read it", - "We can't see all the JavaScript code that is used on the client side because some is dynamically loaded from the server" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "Which of the following is true?", - "type": "radio", - "answers": [ - "we can use `setInterval` to have code that runs in the background and automates the application", - "we can randomly choose functions to execute", - "we can have multiple `setInterval` bots running at the same time", - "all of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question6", - "question": "The `Math.floor` function:", - "type": "radio", - "answers": [ - "returns the largest integer less than or equal to a given number", - "creates a random number", - "returns a floating point number" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question7", - "type": "radio", - "answers": [ - "returns an integer between 0 and 10", - "returns a number between 0 and 1", - "returns a boolean true or false value" - ], - "question": "The `Math.random` function:", - "correctAnswerIndex": 1 - }, - { - "id": "question8", - "question": "To add an item to an array in JavaScript we use which function?", - "type": "radio", - "answers": [ - "push", - "add", - "append" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question9", - "type": "radio", - "answers": [ - "current date and time represented in milliseconds", - "a String with the current date and time in DD/MM/YYY HH:mm format", - "current date and time represented in nanoseconds" - ], - "question": "The `Date.now()` function returns:", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter13", - "questions": [ - { - "id": "question1", - "question": "JavaScript skills will help us only if we are perfomance testing?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "you have to be an expert JavaScript programmer", - "you can do a lot with very simple JavaScript", - "you need to learn C++" - ], - "question": "To automate in the browser:", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "everything it is possible to learn about JavaScript", - "how to hack into web servers and trigger thermo-nuclear war", - "enough to get started" - ], - "question": "After following this course you have learned:", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "JavaScript", - "HTML", - "CSS", - "All of the above" - ], - "question": "Useful topics to learn to help automate in the browser are:", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "we can not use any of the skills we learned on this course", - "we can use the JavaScriptExecutor to inject JavaScript code and use simple JavaScript in our web GUI Automating" - ], - "question": "When working with automated GUI testing tools like Selenium WebDriver:", - "correctAnswerIndex": 1 - } - ] - } - ] - }, - { - "id": "course28", - "status": "live", - "credits": 900, - "courseId": "course28", - "category": "Foundational Test Automation Courses", - "tags": [ - "python", - "python bdd", - "bdd", - "ui", - "mobile", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "Behavior Driven Python with pytest-bdd", - "titleSlug": "behavior-driven-python-with-pytest-bdd", - "teacher": { - "name": "Andrew Knight", - "linkedIn": "", - "photoURL": "andrew_knight.jpg", - "profilePath": "andrew_knight", - "twitter": "AutomationPanda" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn how to write behavior-driven tests in Python", - "group": "foundational_testing", - "releaseDate": "07/10/2019", - "duration": 96, - "chaptersCount": 9, - "learningPaths": [ - "learningPathUIPython", - "learningPathMobilePython" - ], - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "The way a team develops software", - "The way a team interacts with each other", - "The way a feature operates, as defined by a scenario of inputs, actions, and outcomes", - "The way a feature breaks when it is tested" - ], - "question": "In software development, what is a behavior?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "answers": [ - "Better collaboration between team members", - "Better test automation development with reusable steps", - "Shifting left with quality efforts", - "All the above" - ], - "question": "What are advantages of doing BDD?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "Behavior-Driven Development should overhaul existing software development processes.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "Which of the following is not a Python BDD test framework?", - "type": "radio", - "answers": [ - "cucumber", - "radish", - "lettuce", - "behave" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "Gherkin steps are just comments - real tests are coded directly in Python modules.", - "Gherkin steps are written in plain-language and then glued to Python functions.", - "Gherkin steps must be predefined by the pytest-bdd package.", - "AI reads the Gherkin steps and runs them like a human would." - ], - "question": "How do Python BDD test frameworks run Gherkin scenarios?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Tests can be written with very clear, concise code", - "Fixtures are more flexible than traditional setup/teardown methods", - "Plugins can extend the framework", - "All the above" - ], - "question": "What are distinctive features of the pytest framework?", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "pytest-bdd has a smaller footprint than other frameworks", - "pytest-bdd can leverage pytest to the fullest, including fixtures and other plugins", - "pytest-bdd is a newer framework and has better support", - "pytest-bdd’s version of Gherkin is slightly more powerful" - ], - "question": "What major advantage does pytest-bdd have over other Python BDD frameworks?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "pytest and pytest-bdd are free and open source.", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "PyCharm Community Edition has support for pytest-bdd.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "Where can you learn more about pytest on your own?", - "type": "radio", - "answers": [ - "AutomationPanda.com", - "pytest.org", - "“Python Testing with pytest” by Brian Okken", - "All the above" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "Using Gherkin, test cases are written in what format?", - "type": "radio", - "answers": [ - "Given → Then → When", - "Given → When → Then", - "Arrange → Act → Assert", - "Scenario → Step → Sub-step" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Gherkin steps are written in plain language so everyone can understand them", - "Gherkin steps can be used by multiple scenarios", - "Testers can focus on forming good test cases before worrying about test code", - "All the above" - ], - "question": "What is the advantage of writing test cases using Gherkin?", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "@features", - "@scenario", - "@scenarios", - "@tests" - ], - "question": "Which decorator is used to declare feature file paths in step definition modules?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "How should data be shared between step definition functions?", - "type": "radio", - "answers": [ - "Declare variables in the step definition module outside of step functions", - "Store data in a file at the end of one step, and read it at the start of the next step", - "Declare pytest fixtures or given functions as step function arguments", - "Turn step functions into methods of one class with instance variables" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "PyCharm Professional Edition can automatically generate step definition stubs for pytest-bdd.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question6", - "question": "Even if you write test code in PyCharm Professional Edition, you will still need to run tests from the command line.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Parametrized steps are easier to implement in step definition modules", - "Parametrized steps can be more easily reused by other scenarios", - "Parametrized steps are more readable", - "All the above" - ], - "question": "What is the main advantage in parametrizing Gherkin steps?", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "How are step functions with parameters different from step functions without parameters?", - "type": "radio", - "answers": [ - "They have an argument for each parameter", - "They require parsers in the step text annotations", - "All of the above", - "None of the above" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "Parameters in Gherkin steps must always be surrounded with double quotes.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "Scenarios with parametrized steps run the same way as scenarios with regular steps.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "Which of the following Gherkin steps would match this step text annotation: @when(parsers.parse('I eat “{eat:d}” cucumbers')) ", - "type": "radio", - "answers": [ - "I eat “eat:d” cucumbers", - "I eat 2 cucumbers", - "I eat cucumbers", - "I eat “5” cucumbers" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "What is the main benefit of using Scenario Outlines?", - "type": "radio", - "answers": [ - "They improve the organization of Given, When, and Then steps.", - "They enable a scenario to run for multiple input combinations without duplicating steps.", - "They let programmers write full test cases directly in Python.", - "They provide more documentation for test scenarios." - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "An Examples table can have any number of rows or columns", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "One step definition function can have multiple step decorators.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Scenario Outlines cannot be run together with regular Scenarios.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "How are step decorators for Scenario Outlines different from step decorators for ordinary steps?", - "type": "radio", - "answers": [ - "They require the step text parser to use regular expressions.", - "They put angle brackets around the variable in the step text.", - "They put angle brackets around the variable and also require examples converters.", - "Trick question - they are no different." - ], - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "question": "How many times will a Scenario Outline that has 5 rows and 3 columns in its Examples table (plus the title row) be executed?", - "type": "radio", - "answers": [ - "1", - "3", - "5", - "15" - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "question": "What is the name of the most popular Python package for REST API requests? ", - "type": "radio", - "answers": [ - "pyrest", - "requests", - "pyrequests", - "python-requests" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Which of the following step types can have step definition functions used as pytest fixtures?", - "type": "radio", - "answers": [ - "Given", - "When", - "Then", - "All the above" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "True", - "False" - ], - "question": "BDD-style testing truly shines for unit tests.", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "For what types of service call tests might it be better to use traditional pytest functions instead of feature files?", - "type": "radio", - "answers": [ - "No such tests", - "End-to-end tests that make multiple service calls in sequence", - "Data-driven tests for individual requests", - "Exploratory tests" - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "question": "WebDriver is the de facto standard for automating Web browser interactions.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Firefox", - "Chrome", - "Internet Explorer", - "All the above, and more" - ], - "question": "Which Web browsers can Selenium WebDriver use?", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "The browser process will be killed when the test execution process ends.", - "The browser process might become a zombie and waste or lock resources.", - "A user might not be able to reopen the browser after the test.", - "WebDriver will log nasty messages to remind you to clean up." - ], - "question": "What could happen if a WebDriver instance is not quit successfully after a test?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "What makes step functions for Web steps different from other step functions?", - "type": "radio", - "answers": [ - "They make calls to a WebDriver instance and probably use a WebDriver fixture.", - "They need special parsers in their step decorators.", - "They require a “@web” decorator.", - "Web steps are allowed to make multiple assertions." - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "What does a Background section in a feature file do?", - "type": "radio", - "answers": [ - "It runs a set of steps one time before any scenarios in the feature are run.", - "It provides extra documentation on how the system under test must be set up.", - "It runs a set of steps before each scenario in the feature (like a setup).", - "It runs a set of steps before and after each scenario in the feature (like a setup and teardown)." - ], - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter8", - "questions": [ - { - "id": "question1", - "question": "Where in a feature file may tags be placed?", - "type": "radio", - "answers": [ - "On a Feature section", - "On a Scenario section", - "On a Scenario Outline section", - "All the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "True", - "False" - ], - "question": "A tag on a feature applies to all scenarios in the feature.", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "A scenario can have only one tag.", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "What tag expression would filter all tests that have either “@search” or “@upload” tags?", - "type": "radio", - "answers": [ - "search and upload", - "search or upload", - "@search or @upload", - "search, upload" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "not wip", - "not @wip", - "!@wip", - "~@wip" - ], - "question": "What tag expression would filter all tests that are not “@wip”?", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter9", - "questions": [ - { - "id": "question1", - "question": "What is the main purpose of conftest.py in a pytest-bdd project?", - "type": "radio", - "answers": [ - "To configure the systems under test.", - "To write new pytest plugins.", - "To share common steps, fixtures, and BDD hooks between test modules.", - "To read configuration files containing test inputs." - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "What do pytest-bdd hooks do?", - "type": "radio", - "answers": [ - "They insert additional logic around points of execution for feature files.", - "They insert breakpoints for debugging tests.", - "They “hook” test results for reporting.", - "They add additional logging statements automatically." - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "pytest_bdd_before_step", - "pytest_bdd_before_scenario", - "pytest_bdd_before_feature", - "pytest_bdd_step_error" - ], - "question": "Which of the following is not a valid pytest-bdd hook?", - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "Any step function can be moved to conftest.py.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course29", - "status": "live", - "credits": 600, - "courseId": "course29", - "category": "Foundational Test Automation Courses", - "tags": [ - "beginner", - "javascript", - "mocha", - "assertions", - "ui", - "api", - "mobile" - ], - "groupName": "Foundational Testing", - "title": "Mocha JavaScript Test Framework", - "titleSlug": "mocha-javascript-tests", - "teacher": { - "profilePath": "giridhar_rajkumar", - "twitter": "vgrk2017", - "name": "Giridhar Rajkumar", - "linkedIn": "", - "photoURL": "giridhar_rajkumar.png" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn how to use Mocha to execute your JavaScript tests", - "group": "foundational_testing", - "releaseDate": "06/28/2019", - "duration": 34, - "chaptersCount": 6, - "learningPaths": [ - "learningPathApiJS", - "learningPathUIJS", - "learningPathMobileJS" - ], - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "testing framework", - "IDE", - "Plugin", - "programming language" - ], - "question": "Mocha is a _______", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Mocha runs on _______", - "type": "radio", - "answers": [ - "NodeJS", - "Java Compiler", - "Python", - "C#" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Java", - "C#", - "Python", - "JavaScript" - ], - "question": "Which of the below languages mocha support?", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "question": "What is the command to install mocha?", - "type": "radio", - "answers": [ - "npm install mocha", - "-install mocha", - "mocha i -version", - "i mocha npm" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "npmjs.com", - "npm.java.com", - "npmcs.com", - "npm.python.com" - ], - "question": "Where can you find node packages?", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "answers": [ - "1", - "2", - "3", - "4" - ], - "question": "How many pre-bundled function calls are available in Mocha?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "The describe() function is used to group the tests", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "The it() function is used to describe the individual test case", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "How many arguments/parameters does the describe() and it() functions take?", - "type": "radio", - "answers": [ - "10", - "2", - "3", - "4" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "True", - "False" - ], - "question": "You can only write ONE it() inside describe()", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Hooks are built-in functions of Mocha.", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "after()", - "afterEach()", - "before()", - "beforeEach()" - ], - "question": "Which of the following hooks run after each test in the code block?", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which is the proper way to write a before hook?", - "type": "radio", - "answers": [ - "before(‘This is a before hook’);", - "before();", - "before(‘This is a before hook’, function(){});", - "beforeAll();" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "How many types of Mocha Hooks are available?", - "type": "radio", - "answers": [ - "1", - "2", - "3", - "4" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "answers": [ - "True", - "False" - ], - "question": "Hooks must be present inside the describe() block.", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "once()", - "only()", - "single()", - "skip()" - ], - "question": "Exclusive tests can be achieved by using ______", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "once()", - "only()", - "single()", - "skip()" - ], - "question": "Inclusive tests can be achieved by using ______", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "pending", - "inclusive", - "exclusive", - "none of the above" - ], - "question": "Skipped tests are marked as _______", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Pending tests will be included in the test results and marked as pending.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "The retry function is used to _____", - "type": "radio", - "answers": [ - "rerun failed tests a certain number of times", - "rerun all tests", - "rerun a specific test suite", - "rerun one it function" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "answers": [ - "Unit tests", - "End to end tests", - "Integration tests", - "System tests" - ], - "question": "Retry is not recommended for _____", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "How many timeout levels are there in Mocha?", - "type": "radio", - "answers": [ - "1", - "2", - "3", - "4" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "Test-level timeouts are used within test cases", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "NYAN", - "Dot", - "Spec", - "JSON" - ], - "question": "Which is the default reporter in Mocha?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "JSON Reporter will show the test execution progress", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "In Dot Matrix, how are failed tests denoted?", - "type": "radio", - "answers": [ - "?", - ",", - ".", - "!" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "mocha test/ --reporter dot", - "reporter test dot", - "test reporter dot", - "--reporter dot" - ], - "question": "Which is the command to execute the Dot Reporter?", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course3", - "chaptersCount": 5, - "learningPaths": [ - "learningPathUIJava", - "learningPathUIJS", - "learningPathUICS", - "learningPathUIRuby", - "learningPathUIPython", - "learningPathMobileJava", - "learningPathMobileJS" - ], - "status": "live", - "credits": 500, - "courseId": "course3", - "category": "Foundational Test Automation Courses", - "tags": [ - "performance", - "ui", - "mobile", - "beginner", - "jmeter", - "loadrunner", - "gatling" - ], - "groupName": "Foundational Testing", - "title": "Tools and Techniques for Performance and Load Testing", - "titleSlug": "performance-and-load-testing", - "teacher": { - "photoURL": "amber_race.jpg", - "profilePath": "amber_race", - "twitter": "ambertests", - "name": "Amber Race", - "linkedIn": "" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn performance and load testing for websites, mobile, and back-end services", - "group": "foundational_testing", - "releaseDate": "05/06/2019", - "duration": 57, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "Which statement is NOT true?", - "type": "radio", - "answers": [ - "If a site is slow, people are more likely to leave", - "The faster a site is, the greater the chance of making a sale", - "People are intimidated by speed and prefer to watch the spinny circle", - "Any website is potentially vulnerable to performance-related outages" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "How many requests a service can handle in a given period of time", - "How quickly a web page can load", - "The size and quantity of images on a website", - "How long does it take a customer to log in" - ], - "question": "What do load tests focus on?", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Which factors can impact client performance?", - "type": "radio", - "answers": [ - "Server performance", - "The number and complexity of scripts", - "Both", - "Neither" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Host configuration", - "The number of client requests", - "Data caching", - "All of the above" - ], - "question": "Which factors can impact server performance?", - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "Poor server performance affects the total number of clients it can handle", - "There is nothing the client can do to decrease load on the server", - "Good caching policy is important for both client and server", - "Network quality is a major factor in client performance" - ], - "question": "Which statement is NOT true?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "answers": [ - "The first time a new page is visible to the user", - "The point at which a user can start interacting with a page", - "The point when the entire document is loaded in the browser", - "It’s when all entire page is complete" - ], - "question": "What does “First Contentful Paint” mean?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "By compressing images for faster loading", - "By storing scripts in a database", - "By hosting content in various locations to better serve people in different places", - "By encrypting content for improved security" - ], - "question": "What is one way a CDN (Content Delivery Network) can help with performance?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "Which performance property can you profile with Chrome Developer Tools?", - "type": "radio", - "answers": [ - "Frames per second", - "Request response time", - "Time spent running scripts", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "By blocking further content loading", - "By making additional network requests", - "Both", - "Neither" - ], - "question": "How can scripts affect the performance of a web page?", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "question": "Tests on WebPageTest can be run on...", - "type": "radio", - "answers": [ - "Your local machine", - "Real devices in various locations", - " Both", - "Neither" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "Chrome Dev Tools can emulate a 3G network on your laptop", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "How do redirects cause issues for web page performance?", - "type": "radio", - "answers": [ - "By corrupting assets", - "By clearing cache", - "By increasing the total number of network calls", - "By causing a scripting loop" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "Samsung Galaxy S7", - "iPhone SE", - "iPad Mini 2", - "All of the above" - ], - "question": "WebPageTest can run tests on which device?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Local Notifications", - "USB Debugging", - "Low power mode", - "Data roaming" - ], - "question": "What has to be enabled on your Android device before profiling with Android Studio?", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "Battery usage", - "Request response speed", - "Data usage", - "Memory usage" - ], - "question": "What profiling information is generally NOT available on a mobile device?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Download size", - "Expertise within your team", - "Existing licensing arrangements", - "UI or lack thereof" - ], - "question": "What is NOT a major factor to consider in choosing a load testing tool?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "HTTP", - "WebSockets", - "MongoDB", - "All of the above" - ], - "question": "What kinds of connections are supported by JMeter?", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "Python", - "Groovy", - "Perl", - "Scala" - ], - "question": "What scripting language is supported by JMeter?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Java", - "Python", - "Scala", - "Javascript" - ], - "question": "What programming language is the basis of the Gatling tool?", - "correctAnswerIndex": 2 - }, - { - "id": "question5", - "answers": [ - "True", - "False" - ], - "question": "Load testing can only be done in the cloud", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "answers": [ - "Picking a tool", - "Running test automation", - "Creating test data", - "Understanding the system under test" - ], - "question": "What is the first step in creating a load testing strategy?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "answers": [ - "Monitoring your service in production", - "Analyzing the source code", - "Reading test plans", - "Using client applications" - ], - "question": "If possible, what is the best way to learn how your system is actually being used for the purpose of load testing?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Which of these factors applies to testing applications deployed in the cloud?", - "type": "radio", - "answers": [ - "The type of VM used", - "The physical location of the cloud", - "Auto-scaling parameters", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "The CPU of the database host", - "Cold boot time if the compute function isn’t used frequently", - "The total number of caching instances", - "Which language is used to write the service" - ], - "question": "What is a special consideration for performance testing serverless applications?", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "answers": [ - "When outlier results are hidden in a larger aggregate result", - "When tests don’t cover certain devices", - "When you don’t include all requests in your tests", - "When are home sick but you forget to tell your boss" - ], - "question": "What is coordinated omission?", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course30", - "chaptersCount": 5, - "learningPaths": [ - "learningPathApiJS", - "learningPathUIJS", - "learningPathMobileJS" - ], - "status": "live", - "credits": 500, - "courseId": "course30", - "category": "Foundational Test Automation Courses", - "tags": [ - "beginner", - "javascript", - "chai", - "assertions", - "ui", - "api", - "mobile" - ], - "groupName": "Foundational Testing", - "title": "Introduction to Chai Assertions", - "titleSlug": "chai-test-assertions", - "teacher": { - "name": "Aparna Gopalakrishnan", - "linkedIn": "", - "photoURL": "aparna_gopalakrishnan.png", - "profilePath": "aparna_gopalakrishnan", - "twitter": "aparna2019" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn how to use Chai assertions for your JavaScript tests", - "group": "foundational_testing", - "releaseDate": "06/28/2019", - "duration": 32, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "An assertion library", - "An automation framework", - "None of the above" - ], - "question": "What is Chai?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Assertions are used to make sure the actual results and expected results are same?", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "Assertions are used only in functional test automation.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "question": "What are Chai’s assertion interfaces?", - "type": "radio", - "answers": [ - "Assert", - "Expect", - "Should", - "All of the above" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question5", - "question": "Chai has both TDD and BDD assertion styles.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "To install chai to a project, no prerequisites are required", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "True", - "False" - ], - "question": "NodeJS must be installed on the machine before installing ChaiJs", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "answers": [ - "npm install chai", - "chai install", - "install chai", - "none of the above" - ], - "question": "What is the command to install Chai?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "answers": [ - "True", - "False" - ], - "question": "Npm install chai -save-dev will add chai to package.json file", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "answers": [ - "True", - "False" - ], - "question": "Assert is a TDD assertion style", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question10", - "question": "Should supports Internet Explorer browser", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question11", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Should works by extending object.prototype", - "correctAnswerIndex": 0 - }, - { - "id": "question12", - "question": "If the object is null or undefine, should can be used as normal with no alterations", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question13", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Given `error` is null, what is the result of this expression: should.not.exist(error)", - "correctAnswerIndex": 0 - }, - { - "id": "question14", - "question": "Which is chai.config.truncateThreshold’s default value", - "type": "radio", - "answers": [ - "0", - "1", - "40", - "No default value" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question15", - "answers": [ - "True", - "False" - ], - "question": "chai.config.showDiff is true by default", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question16", - "question": "chai.config.includeStack is true by default", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "True", - "False" - ], - "question": "Expect is the only BDD Style Chai has", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Which are BDD style assertion styles?", - "type": "radio", - "answers": [ - "Assert and Expect", - "Assert and Should", - "Expect and Should", - "None of the above" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "const chai = require(‘chai’);", - "const chai = chai.require();", - "const chai = import chai;", - "const chai = chai();" - ], - "question": "Which is the expression to get chai to a JavaScript file?", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "const expect = chai.expect();", - "const expect = chai.expect;", - "none of the above" - ], - "question": "Which is the expression to get expect to a JavaScript file if Chai is already defined?", - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "question": "What is chai’s assertion style to compare the contents of objects?", - "type": "radio", - "answers": [ - "Equals", - "Equal", - "deep.equal", - "none of the above" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question7", - "question": "Given `let n = 10`, how can you check `n` is a number using should assertion style?", - "type": "radio", - "answers": [ - "n.should.be.a(‘number’);", - "should(n).be.a.number;", - "should(n).be.a(‘number’)", - "none of the above" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question8", - "question": "There is no difference between Expect and Should assertion styles.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "answers": [ - "True", - "False" - ], - "question": "The main difference between Expect and Should is that Expect is a TDD style assertion library whereas Should is a BDD style assertion library", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "How to install chai to an existing project?", - "type": "radio", - "answers": [ - "By the command npm install Chai", - "Install chai as an executable", - "Chai cannot be added to an existing project", - "None of the above" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Chai can be used in only WebdriverIO Mocha project", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What does this expression do: assert.equal(fruit, ‘Apple’); ?", - "type": "radio", - "answers": [ - "This validates fruit is equal to ‘Apple’", - "This validates Apple is equal to fruit", - "None of above is true" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "assert.equal(fruit, ‘Apple’, “fruit is not equal to Apple”);", - "assert.equal(fruit, “fruit is not apple”, ‘Apple’);", - "Message cannot be added to an assert expression", - "None of the above" - ], - "question": "Which of the following adds a message to assertion error in the expression: assert.equal(fruit, ‘Apple’);", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "Assertions cannot be centralized.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "It is not a good practice to centralize assertions", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "Centralization of Assertion eliminates duplicate definitions", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Only Chai’s Assert styles can be centralized.", - "type": "radio", - "answers": [ - "True", - "False" - ], - "correctAnswerIndex": 1 - } - ] - } - ] - }, - { - "id": "course31", - "status": "live", - "credits": 800, - "courseId": "course31", - "category": "Automated Visual Testing Courses", - "tags": [ - "ui", - "visual", - "beginner", - "applitools", - "c#", - "csharp" - ], - "groupName": "Visual Testing", - "title": "Automated Visual Testing in C#", - "titleSlug": "automated-visual-testing-in-csharp", - "teacher": { - "photoURL": "nikolayAdvolodkin.png", - "profilePath": "nikolay_advolodkin", - "twitter": "Nikolay_A00", - "name": "Nikolay Advolodkin", - "linkedIn": "" - }, - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn how to automate your visual testing in C# with Applitools", - "group": "visual_testing", - "releaseDate": "06/17/2019", - "duration": 79, - "chaptersCount": 8, - "learningPaths": [ - "learningPathUICS" - ], - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Applitools tutorial", - "Selenium IDE", - "Selenium WebDriver", - "Selenium Grid" - ], - "question": "What is one of the dependencies that you need to install for this course?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "What is one of the dependencies that you need to install for this course?", - "type": "radio", - "answers": [ - "Cypress.io", - "Selenium IDE", - "Selenium Grid", - "Applitools SDK" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "question": "Where can you get the API Key for your Applitools account?", - "type": "radio", - "answers": [ - "The Applitools web UI", - "In your email that you used to sign up for the account", - "In the Applitools URL", - "We don’t need an API key" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "It helps to find visual discrepancies for an entire web page with a single validation", - "It helps to convert from visual to textual", - "It helps to validate that functionality is working as expected", - "It checks for the performance of the web page" - ], - "question": "What is one of the advantages of visual validation?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Why is visual validation a powerful technique?", - "type": "radio", - "answers": [ - "Because it helps to validate everything", - "Because it helps to test across many different browser and OS combinations", - "Because it was created by Daenerys Targaryen", - "It’s not powerful" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Check that features work as expected", - "Check that web pages render as expected", - "Check that a page is of the correct type", - "Validate that your page objects are really spy objects" - ], - "question": "Visual testing can do the following", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "How is a baseline in Applitools established?", - "type": "radio", - "answers": [ - "By providing a unique combination of test name and OS", - "By providing a unique combination of test name, os, browser, resolution", - "Unique combination of browser, OS, test name, viewport size, app name" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "The first time that you run a test with Applitools", - "type": "radio", - "answers": [ - "A baseline is set in Applitools", - "Applitools compares your web page to Google", - "Applitools determines if your web page is fast enough", - "Applitools determines if your page is functioning correctly" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "How many baselines exist for a single visual validation check?", - "type": "radio", - "answers": [ - "1", - "2", - "3", - "4" - ], - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "question": "Which of these is a valid Applitools Open() method", - "type": "radio", - "answers": [ - "Open(IWebDriver driver, string appName, string testName, Size viewportSize);", - "Open();", - "Open(Size viewportSize);", - "Open(bool shouldScroll);" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Opens up a browser", - "Opens up a Applitools.com", - "Starts a session in Applitools with the specified parameters" - ], - "question": "The Applitools Open() does the following", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "question": "The method that you should call to make sure that Applitools saves your comparison", - "type": "radio", - "answers": [ - "Save()", - "Close()", - "Run()", - "Stop()" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "Applitools API key", - "Applitools visual validation key", - "Applitools security key", - "Applitools UI key" - ], - "question": "To work with Applitools in your code, you need to set the", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "When a visual assertion fails, what is the initial status of that test?", - "type": "radio", - "answers": [ - "failed", - "new", - "unresolved", - "incorrect" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "When a visual assertion doesn’t exist, what is the initial status of that test?", - "type": "radio", - "answers": [ - "failed", - "new", - "unresolved", - "incorrect" - ], - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "question": "When a visual assertion fails, what is the initial status of that test?", - "type": "radio", - "answers": [ - "failed", - "new", - "unresolved", - "incorrect" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Q", - "W", - "E", - "S" - ], - "question": "Which key allows you to stack the Baseline and Checkpoint on top of each other?", - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Q", - "W", - "E", - "D" - ], - "question": "Which key allows you to check the differences of Baseline and Checkpoint?", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "answers": [ - "Q", - "T", - "E", - "D" - ], - "question": "Which key allows you to toggle the differences between Baseline and Checkpoint?", - "type": "radio", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter7", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "Layout", - "Strict", - "Pixel", - "Content" - ], - "question": "What is not a Match Level setting in Applitools?", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "What is the match level that does a pixel to pixel comparison?", - "type": "radio", - "answers": [ - "Layout", - "Strict", - "Pixel", - "Exact" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question3", - "answers": [ - "Layout", - "Strict", - "Content", - "Exact" - ], - "question": "What is the match level that will determine if a visual change is detectable by the human eye?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Functional changes", - "Visual changes", - "Performance changes", - "Technology changes" - ], - "question": "What is a change that will be detected by the strict match level?", - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "type": "radio", - "answers": [ - "Layout", - "Strict", - "Content", - "Exact" - ], - "question": "The default match level for using Applitools is", - "correctAnswerIndex": 1 - }, - { - "id": "question6", - "question": "The Content match level will ignore the following changes", - "type": "radio", - "answers": [ - "Text", - "Language", - "Color", - "Bugs" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question7", - "question": "Which of the following will set the match level to Content", - "type": "radio", - "answers": [ - "Eyes.MatchLevel = MatchLevel.Strict", - "Eyes.MatchLevel = ContentMatchLevel", - "Eyes.MatchLevel = MatchLevel.Content", - "Eyes.MatchLevel = Match.Content" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question8", - "type": "radio", - "answers": [ - "CheckWindow(string tag)", - "CheckWindow(Object image)", - "CheckWindow(int deviation)", - "CheckWindow(Eyes applitoolsEyes)" - ], - "question": "The CheckWindow() method has the following overload", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter8", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "A collection of videos", - "A collection of visual validations grouped together", - "A collection of functional tests", - "A group of failed situations" - ], - "question": "A batch in Applitools is", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "The Batch Summary View is", - "type": "radio", - "answers": [ - "A place to see what happened to our friend named Batch", - "A dashboard that conveys the overall status with the batch being analyzed", - "A dashboard that shows every single element", - "A dashboard that shows all of the visual validations" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Batch summary view", - "Batch details view", - "Batch steps view", - "Batch processing view" - ], - "question": "Which of these is NOT a view available in Applitools", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "To automatically find problems in all of the screenshots", - "To help perform batch operations on a bunch of screenshots like approving and declining", - "To automatically watch for any changes in your screenshots", - "To know which screenshots are the right ones" - ], - "question": "Auto maintenance feature is helpful for which situation", - "correctAnswerIndex": 1 - } - ] - } - ] - }, - { - "id": "course32", - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn the possibilities and benefits of test automation in DevOps", - "group": "foundational_testing", - "releaseDate": "08/16/2019", - "duration": 60, - "chaptersCount": 6, - "learningPaths": [ - "learningPathUIJava", - "learningPathUIJS", - "learningPathUICS", - "learningPathUIRuby", - "learningPathUIPython", - "learningPathMobileSwift", - "learningPathMobileJava", - "learningPathMobilePython", - "learningPathMobilePython", - "learningPathApiJava", - "learningPathApiJS", - "learningPathCodeless" - ], - "status": "live", - "credits": 600, - "courseId": "course32", - "category": "Foundational Test Automation Courses", - "tags": [ - "devops", - "ui", - "api", - "mobile", - "codeless", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "Test Automation in DevOps", - "titleSlug": "test-automation-in-devops", - "teacher": { - "photoURL": "lisa_crispin.jpg", - "profilePath": "lisa_crispin", - "twitter": "lisacrispin", - "name": "Lisa Crispin", - "linkedIn": "" - }, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "answers": [ - "The DevOps specialists", - "Everyone on the delivery team", - "Testing and QA specialists", - "Developers" - ], - "question": "Who is responsible for quality on a DevOps team?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "A team of specialists who have total responsibility for the continuous integration and deployment pipeline infrastructure, including test automation", - "A collaboration between programmers and operations specialists to build the infrastructure to support test automation and deployment", - "A cross-functional team whose members have broad skills as well as a diversity of specialist skills including testing, coding, operations that is responsibility for automation and deployment infrastructure", - "One specialist on each delivery team who takes total responsibility for the continuous integration and pipeline infrastructure" - ], - "question": "Which statement best describes DevOps?", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "When does a deployment pipeline start?", - "type": "radio", - "answers": [ - "When a team member commits a change to the team’s shared code repository", - "When an operations specialist executes the command to start it", - "After the first automated test suite passes", - "It is continually running" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Continuous delivery doesn’t need automated tests, but continuous deployment does", - "There is no difference", - "Automated test suites are run manually in continuous delivery", - "In continuous deployment, each committed change that results in a verified release candidate is deployed automatically to production" - ], - "question": "What is the difference between continuous delivery and continuous deployment?", - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "answers": [ - "Once you have all the stages automated", - "Right now, and often", - "As soon as you have continuous integration", - "When you start doing continuous deliver" - ], - "question": "When should you visualize your pipeline?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "Choose the most correct statement about feedback from a deployment pipeline", - "type": "radio", - "answers": [ - "It is only valuable if you get it within five minutes", - "Only the feedback from the last two stages is valuable", - "Early pipeline stages provide fast feedback, later ones provide more confidence in the release candidate", - "Only automated test suites provide feedback" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "question": "What determines when a pipeline stage starts?", - "type": "radio", - "answers": [ - "Each stage may be “pushed” by the previous stage, or may “pull” by listening for completion of the previous stage, or may depend on more than one parallel stages to be triggered", - "The previous stage always pushes the next stage", - "Each stage always listens to the previous stage and when it finishes successfully it starts", - "All previous stages complete successfully" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question4", - "question": "Who in your team should participate in visualizing the pipeline?", - "type": "radio", - "answers": [ - "This is for operations staff only", - "Developers and Operations – that’s why it’s called DevOps", - "Only the testers, they are the experts", - "Everyone on the delivery team, including developers, operations, testers, product owners, database experts and more" - ], - "correctAnswerIndex": 3 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "Which of these is NOT a reason we need a whole team approach to test automation?", - "type": "radio", - "answers": [ - "Production code needs to be testable", - "Tests should always be automated by a separate automation team", - "Having developers engaged in writing and maintaining automated tests helps produce more reliable tests", - "When the whole team makes sure test failures are investigated immediately, the pipeline will run successfully more often" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "question": "What’s a potential benefit from discussing your test automation using the Test Suite Canvas?", - "type": "radio", - "answers": [ - "The team may identify gaps in skills or infrastructure that are needed for a particular test suite", - "The team will know whom to blame if tests fail", - "The team will know what tools to use for test automation", - "The team will find ways to avoid automating tests" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "How should a team use visual models to discuss automation strategy?", - "type": "radio", - "answers": [ - "To decide what number of tests to have at unit, API and UI level", - "To decide whether test suites an run in parallel in their pipeline", - "To find out what other department in the company can do the test automation for them", - "To have conversations about how to get the whole team engaged in automation, at what level to automate different types of tests, what tools might be appropriate for their needs, talk about how to make code more testable" - ], - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Identify a critical feature of the app that always must work, automate a test for it, and get the test into the deployment pipeline", - "Hire an offshore test automation service", - "Automate tests for a feature that customers don’t really care about", - "Wait, didn’t we say automation isn’t really required for continuous delivery?" - ], - "question": "Which of these is one way a team can get traction on test automation?", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter4", - "questions": [ - { - "id": "question1", - "answers": [ - "Infrastructure can’t be code, it’s a trick question", - "The Operations department has complete control over it", - "Repeatable, scripted, version-controlled steps that can be tested produce reliable test environments", - "Infrastructure is built more slowly so it is less error-prone" - ], - "question": "Which of these is a benefit of “infrastructure as code”?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "Why would a team choose to use containers rather than virtual machines?", - "type": "radio", - "answers": [ - "Containers integrate easily with DevOps apps, take up less space, and are simpler to manage", - "It’s what all the cool kids do, you want to learn this to put on your resumé", - "Containers are more isolated and therefore more secure than VMs", - "VMs are a better choice because they run their own operating system" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "It’s easy to create clean, reliable test environments", - "Your team doesn’t have to manage the hardware", - "It’s more practical to run many tests concurrently in parallel", - "It’s always less expensive than running them on a VM" - ], - "question": "What is NOT an advantage of executing tests in the cloud?", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "Testing deployment scripts", - "Start discussions about how automated tests might be run faster with infrastructure improvements", - "Move all automated test execution to virtual machines", - "Identify risks with test environments" - ], - "question": "Which of these is NOT a way testers can contribute value to their DevOps infrastructure?", - "correctAnswerIndex": 2 - } - ] - }, - { - "chapterId": "chapter5", - "questions": [ - { - "id": "question1", - "answers": [ - "Causing random crazy outages at unexpected times to see what happens to our app", - "Letting customers find the bugs for us", - "Using monitoring and observability to identify unexpected system behavior, diagnose it and fix it quickly", - "Hiring an offshore testing service to attack your production app" - ], - "question": "What is “testing in production”?", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question2", - "question": "What is observability?", - "type": "radio", - "answers": [ - "It’s the same as monitoring, we can set up alerts to notify us of problems in production", - "The ability to ask questions about your application and environment without knowing ahead of time what you would want to know", - "Planned experiments done in production to reveal system weaknesses", - "Watching someone use your application in a usability lab" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "type": "radio", - "answers": [ - "Team A has a mostly manual deployment pipeline and it takes them two days to get a fix out to production", - "Team B has monitoring tools but does not have logging or tracing of production", - "Team C has good monitoring, logging and metrics infrastructure, but has not learned how to do feature toggles", - "Team D is able to quickly revert production deploys, can quickly get fixes to production, has mastered feature toggles, and has structured logging of all events in the app" - ], - "question": "Which of these teams is most likely to be capable of testing in production?", - "correctAnswerIndex": 3 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "This is really the domain of Operations and requires a lot of specialized knowledge, so testers can’t participate", - "By asking questions, using their critical thinking skills, learning to use the monitoring, metrics, logging and analysis tools where they can spot unexpected patterns", - "Carry the on-call pager", - "Focus on testing before deploy and don’t waste time trying to test in production" - ], - "question": "How can testers add value for testing in production?", - "correctAnswerIndex": 1 - } - ] - }, - { - "chapterId": "chapter6", - "questions": [ - { - "id": "question1", - "answers": [ - "Testing only after coding is finished", - "Having a separate test team", - "Offshore your testing", - "Continuous testing" - ], - "question": "According to the State of DevOps 2018 survey report, what besides test automation has a significant impact on continuous delivery?", - "type": "radio", - "correctAnswerIndex": 3 - }, - { - "id": "question2", - "type": "radio", - "answers": [ - "Between low and medium performers", - "Between medium and high performers", - "Between high and elite performers", - "The gaps are all about the same" - ], - "question": "Where is the biggest gap in team performance, per the State of DevOps 2018 survey results?", - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "What are some effective ways to shorten feedback loops for regression failures and whether customers find a feature useful?", - "type": "radio", - "answers": [ - "Skip running the regression tests so the feature gets out to production faster", - "Spend more time on manual regression tests", - "Look for ways to shorten pipeline execution time, and ways to build better shared understanding of stories before you start work", - "Try out different monitoring tools" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "question": "What are some good techniques a team can use for continuous improvement?", - "type": "radio", - "answers": [ - "Identify all the problems holding the team back and solve them immediately", - "Identify the biggest problem in the team’s way and design small, measurable experiments to make the problem smaller", - "Let the team know that anyone who lets bugs get into production will be demoted", - "Set more aggressive deadlines" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question5", - "question": "What should a team do once it has some automated test suites in its CD pipeline?", - "type": "radio", - "answers": [ - "Use the Test Suite Canvas to keep improving the test suites, identify gaps, remove unneeded tests, make sure failures are investigated in a timely manner", - "Hire an offshore team to maintain the test suites", - "Job done, don’t worry about test automation unless a test fails", - "Hire a consultant to tell the team whether or not the automated test suites are effective" - ], - "correctAnswerIndex": 0 - } - ] - } - ] - }, - { - "id": "course33", - "level": "beginner", - "sortOrder": 8, - "abstract": "Learn how to automate tests using WebdriverIO and JavaScript", - "group": "foundational_testing", - "releaseDate": "08/02/2019", - "duration": 218, - "chaptersCount": 6, - "learningPaths": [ - "learningPathUIJS" - ], - "status": "live", - "credits": 600, - "courseId": "course33", - "category": "Foundational Test Automation Courses", - "tags": [ - "webdriverio", - "selenium webdriver", - "javascript", - "ui", - "beginner" - ], - "groupName": "Foundational Testing", - "title": "UI Automation with WebdriverIO", - "titleSlug": "webdriverio-tutorial", - "teacher": { - "photoURL": "julia_pottinger.png", - "profilePath": "julia_pottinger", - "twitter": "ailuj876", - "name": "Julia Pottinger", - "linkedIn": "" - }, - "chapters": [ - { - "chapterId": "chapter1", - "questions": [ - { - "id": "question1", - "question": "What is Node.JS?", - "type": "radio", - "answers": [ - "Node.js is a web server", - "Node.js is a JavaScript-based framework/platform built on Google Chrome's JavaScript V8 Engine", - "Node.js is a java based framework", - "None of the above" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "wdio.conf.js", - "test files", - "package.json", - "none of the above" - ], - "question": "Which file has the list of dependencies", - "type": "radio", - "correctAnswerIndex": 2 - }, - { - "id": "question3", - "answers": [ - "wdio.conf.js", - "test files", - "package.json", - "none of the above" - ], - "question": "Which file contains browser and base URL?", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter2", - "questions": [ - { - "id": "question1", - "type": "radio", - "answers": [ - "isExisting", - "isDisplayed", - "isFocused", - "isEnabled" - ], - "question": "What command would you use to verify that an element exists in the DOM?", - "correctAnswerIndex": 0 - }, - { - "id": "question2", - "question": "Can an element exist but still return false after using the isDisplayed command?", - "type": "radio", - "answers": [ - "Yes", - "No" - ], - "correctAnswerIndex": 0 - }, - { - "id": "question3", - "question": "What does browser.url do?", - "type": "radio", - "answers": [ - "Open the terminal", - "Open up a browser", - "Loads the specified url in the browser", - "None of the above" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question4", - "answers": [ - "$", - "$$" - ], - "question": "Which of the following returns a single element", - "type": "radio", - "correctAnswerIndex": 0 - } - ] - }, - { - "chapterId": "chapter3", - "questions": [ - { - "id": "question1", - "question": "What is the webdriverio v5 command for entering keyboard input?", - "type": "radio", - "answers": [ - "click", - "keys", - "sendKeys", - "sendText" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question2", - "answers": [ - "hover", - "moveTo", - "scrollIntoView", - "keys" - ], - "question": "What is the command that can be used to hover over an element?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question3", - "question": "What is the command to get the text from an input field or text area?", - "type": "radio", - "answers": [ - "getText", - "getValue", - "getAttribute", - "getProperty" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question4", - "type": "radio", - "answers": [ - "scrollIntoView", - "moveTo", - "scroll", - "click" - ], - "question": "What is the command to bring an element into view?", - "correctAnswerIndex": 0 - }, - { - "id": "question5", - "question": "What is the command to switch to a new tab/window?", - "type": "radio", - "answers": [ - "switchToFrame", - "moveTo", - "switchWindow", - "setWindow" - ], - "correctAnswerIndex": 2 - }, - { - "id": "question6", - "answers": [ - "switchToFrame", - "moveTo", - "switchWindow", - "setWindow" - ], - "question": "What is the command used to switch to a new iframe?", - "type": "radio", - "correctAnswerIndex": 0 - }, - { - "id": "question7", - "question": "Which command would you use to select a checkbox?", - "type": "radio", - "answers": [ - "selectCheckbox", - "click", - "moveTo", - "isExisting" - ], - "correctAnswerIndex": 1 - }, - { - "id": "question8", - "answers": [ - "getValue", - "getText", - "isDisplayed", - "isFocused" - ], - "question": "Which command would you use to get the text of an element?", - "type": "radio", - "correctAnswerIndex": 1 - }, - { - "id": "question9", - "question": "The clearValue command is used to clear a