diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/courses.json b/courses.json new file mode 100644 index 0000000..59a7035 --- /dev/null +++ b/courses.json @@ -0,0 +1,13563 @@ +[ + { + "id": "course0", + "courseId": "course0", + "category": "Foundational Test Automation Courses", + "groupName": "Demo", + "title": "TAU - Open House", + "titleSlug": "demo-course", + "teacher": { + "twitter": "techgirl1908", + "name": "Angie Jones", + "photoURL": "angie.jpg", + "profilePath": "angie_jones" + }, + "level": "beginner", + "type": "demo", + "abstract": "Learn about TestAutomationU itself", + "sortOrder": 0, + "group": "demo_testing", + "releaseDate": "11/15/2018", + "chaptersCount": 5, + "status": "live", + "credits": 500, + "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", + "type": "radio", + "answers": [ + "Free", + "$100", + "$1000", + "$10,000" + ], + "question": "How much is the tuition for Test Automation U", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "Online", + "At a conference near me", + "At a local library", + "At an actual college" + ], + "question": "Where do you take courses?", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "answers": [ + "January 1, 2019", + "June 15, 2019", + "December 25, 2018", + "November 29, 2018" + ], + "question": "When is the first course scheduled to be released?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "question": "What is the name of the first course that is scheduled to be released?", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "Anyone interested in test automation", + "Testers with programming knowledge", + "Expert automation engineers", + "Developers" + ], + "question": "Who is the Test Automation U targeted towards?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter3", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "10", + "1", + "3", + "5" + ], + "question": "How many instructors does Test Automation U currently have?", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "Jason Arbon", + "Angie Jones", + "Jonathan Lipps", + "Amber Race" + ], + "question": "Which instructor literally wrote the book on how Google tests software?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "Dave Haeffner", + "Raja Rao", + "Elisabeth Hocke", + "Joe Colantonio" + ], + "question": "Which instructor provides an active newsletter with Selenium tips and tricks?", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter4", + "questions": [ + { + "id": "question1", + "answers": [ + "Unicorn", + "Dragon", + "Kraken", + "Pegasus" + ], + "question": "What is your current rank?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "15000+", + "12500", + "10000", + "500" + ], + "question": "How many credits does it take to earn the highest rank?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "question": "Are you excited about Test Automation U?", + "type": "radio", + "answers": [ + "Yes!🤓", + "Not sure" + ], + "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", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Setting a Foundation for Successful Test Automation", + "titleSlug": "setting-a-foundation-for-successful-test-automation", + "teacher": { + "profilePath": "angie_jones", + "twitter": "techgirl1908", + "name": "Angie Jones", + "photoURL": "angie.jpg" + }, + "level": "beginner", + "abstract": "Learn about tooling, future-proofing, testability and strategies for successful test automation", + "sortOrder": 1, + "group": "foundational_testing", + "releaseDate": "01/01/2019", + "chaptersCount": 7, + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "question": "Which of these tasks are associated with a test automation project?", + "type": "radio", + "answers": [ + "Authoring automated tests", + "Monitoring test results", + "Maintaining automated tests", + "All the above" + ], + "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", + "answers": [ + "True", + "False" + ], + "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", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "answers": [ + "Communicate the goal, strategy, and opportunities for collaboration", + "Assign tasks to individuals", + "Force team members to contribute", + "All of the above" + ], + "question": "What’s the best approach for getting team buy-in for test automation?", + "type": "radio", + "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", + "answers": [ + "Developer", + "Tester", + "Business analyst", + "All of the above" + ], + "question": "Which of these team members can play a part in the success of test automation?", + "type": "radio", + "correctAnswerIndex": 3 + } + ] + }, + { + "chapterId": "chapter3", + "questions": [ + { + "id": "question1", + "question": "Which of the following does NOT improve test automatability?", + "type": "radio", + "answers": [ + "Code seams", + "UI element identifiers", + "Application shortcuts", + "Shopping carts" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "Services", + "UI", + "Unit", + "JavaScript" + ], + "question": "Which of the following is NOT a level of the Test Automation Pyramid?", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "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" + ], + "question": "Which level should you automate your test at to have it execute as quickly as possible? ", + "type": "radio", + "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", + "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" + ], + "question": "Which is NOT an example of utilizing a code seam?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter4", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "Who will be using them", + "Available support and resources", + "Compatibility with required programming languages, devices, and browsers ", + "All of the above" + ], + "question": "Which of these is a key consideration for choosing a tool for test automation?", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "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?", + "type": "radio", + "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", + "answers": [ + "Utilizing design patterns", + "Clean coding practices", + "Enabling parallel execution of tests", + "Keeping the source code on your machine" + ], + "question": "Which of the following is NOT a consideration needed for future-proofing automated tests?", + "type": "radio", + "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", + "answers": [ + "Environment-specific data", + "Programming languages", + "Test automation tools", + "APIs" + ], + "question": "When scaling for different environments, the management of ______ should be considered.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "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" + ], + "question": "What’s the best approach when choosing which browsers to execute on?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "Dealing with responsive layouts", + "Mobile apps developed by your organization", + "Appropriate automation tools", + "All of the above" + ], + "question": "What considerations should be made for mobile test automation?", + "type": "radio", + "correctAnswerIndex": 3 + } + ] + }, + { + "chapterId": "chapter7", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "Don’t set any expectations", + "Identify and communicate expectations early", + "Secretly set personal expectations", + "None of the above" + ], + "question": "What’s the best way to avoid unrealistic expectations from your test automation initiative?", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "Fast feedback", + "Faster development time", + "Shortened regression testing cycles", + "100% test coverage" + ], + "question": "Which of the following is NOT a reasonable return on your investment in test automation?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "Most benefits of test automation are seen after the first test is automated.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "question": "The benefits of test automation cannot be measured.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "answers": [ + "Side project", + "Software development project", + "Waste of time", + "Way to replace testers" + ], + "question": "Test automation is a ________", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + } + ] + }, + { + "id": "course11", + "level": "advanced", + "abstract": "Learn how you can use AI to automatically find elements and build a hard to break testing suite", + "sortOrder": 7, + "group": "real_world_testing", + "releaseDate": "03/04/2019", + "chaptersCount": 3, + "status": "live", + "credits": 300, + "courseId": "course11", + "groupName": "Real World Testing", + "category": "Test Automation for Real World Problems", + "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": { + "photoURL": "jason_arbon.jpg", + "profilePath": "jason_arbon", + "twitter": "jarbon", + "name": "Jason Arbon" + }, + "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", + "answers": [ + "True", + "False" + ], + "question": "Appium is pluggable for other AI Selectors?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "Karas", + "Appium", + "Kubernetes", + "TensorFlow" + ], + "question": "What is the name of Google’s open-source Machine Learning framework?", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "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" + ], + "question": "MOBILENET is trained on what type of images?", + "type": "radio", + "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", + "question": "How can you add a new type of classification for a custom object?", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "question": "If you only have one image of the new element you’d like to classify, which of the following is true?", + "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" + ], + "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", + "question": "If you actually perform this process, you can re-title yourself:", + "type": "radio", + "answers": [ + "Machine Learning Engineer", + "Ninja", + "Hot Yoga Instructor", + "Artificial Intelligence" + ], + "correctAnswerIndex": 0 + } + ] + } + ] + }, + { + "id": "course12", + "level": "beginner", + "abstract": "Learn about API testing and best practices related to that", + "sortOrder": 2, + "group": "foundational_testing", + "releaseDate": "01/18/2019", + "chaptersCount": 4, + "status": "live", + "credits": 400, + "courseId": "course12", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Exploring Service APIs through Test Automation", + "titleSlug": "exploring-service-apis-through-test-automation", + "teacher": { + "photoURL": "amber_race.jpg", + "profilePath": "amber_race", + "twitter": "ambertests", + "name": "Amber Race" + }, + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "Application Protection Interface", + "Application Programming Interface", + "Application Parameter Interface", + "Application Payload Interface" + ], + "question": "What does API stand for?", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "Websites", + "Consumers", + "Developers", + "Bots" + ], + "question": "Who are the target “end users” for an API?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "Request headers", + "Response body", + "Response cookies", + "All of the above" + ], + "question": "What API information is exposed in Web Developer Tools?", + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "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" + ], + "question": "How does a proxy tool work?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "answers": [ + "With Collections", + "In the History tab", + "Save as JSON", + "Export to File" + ], + "question": "How can you organize requests in Postman?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "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?", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + "In the headers", + "In the request body", + "As a cookie", + "In the URL" + ], + "question": "Where are query parameters stored in a GET request?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "answers": [ + "Supporting hotel booking sites", + "Demonstrating good API design", + "Practicing API test techniques", + "Looking up booking information" + ], + "question": "What is the Restful Booker API best used for?", + "type": "radio", + "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", + "answers": [ + "null", + "“abc”", + "9223372036854775807", + "All of the above" + ], + "question": "What could potentially be entered as numeric parameter in a JSON request body?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "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" + ], + "question": "What does a Cross-site scripting attack do?", + "type": "radio", + "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", + "answers": [ + "Collection Runner", + "History", + "Test script", + "Local Environment" + ], + "question": "What can you use in Postman to iterate a request 1000 times?", + "type": "radio", + "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", + "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" + ], + "question": "Why is it useful to create a new API resource before running tests?", + "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", + "type": "radio", + "answers": [ + "Jerry", + "Newman", + "Elaine", + "Kramer" + ], + "question": "What tool can you use to run Postman collections in Jenkins?", + "correctAnswerIndex": 1 + } + ] + } + ] + }, + { + "id": "course14", + "level": "Advanced", + "abstract": "Learn about Docker and how to use it to easily scale your automation testing efforts", + "sortOrder": 4, + "group": "real_world_testing", + "releaseDate": "02/01/2019", + "chaptersCount": 5, + "status": "live", + "credits": 500, + "courseId": "course14", + "groupName": "Real World Testing", + "category": "Test Automation for Real World Problems", + "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", + "answers": [ + "XML files", + "The \"blue prints\" to create containers", + "Used to hold services" + ], + "question": "Images are", + "type": "radio", + "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", + "type": "radio", + "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", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "answers": [ + "True", + "False" + ], + "question": "You must have a Docker account to use Docker", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "The Docker whale icon appears in your taskbar after starting the Docker app", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "question": "Virtualization in the BIOS is mandatory for Windows", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Only the Command Prompt can be used for Docker commands", + "type": "radio", + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "docker pull", + "docker get", + "docker download", + "docker-pull" + ], + "question": "What is the Docker command to download images?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "docker list", + "docker img", + "docker ps -a", + "docker images" + ], + "question": "What is the Docker command to list your images?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "compose.yml", + "docker-compose.xml", + "dockerfile", + "docker-compose.yml" + ], + "question": "Which file is used for docker-compose up?", + "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", + "answers": [ + "docker-compose restart", + "docker-compose up -d", + "docker-compose update", + "docker-compose --restart" + ], + "question": "What is the docker-compose command to restart your Grid?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Tests should be dependent on each other", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "ChromeDriver", + "FirefoxDriver", + "RemoteWebDriver", + "GridWebDriver" + ], + "question": "Which WebDriver class do we use for the Grid?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "http://localhost:4444/wd/hub", + "http://localhost:8888/wd/hub", + "http://localhost:4444/grid/console", + "http://localhost:8888/grid/console" + ], + "question": "What was the URI we passed to the WebDriver to connect to the Grid?", + "type": "radio", + "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", + "answers": [ + "Docker Cluster", + "Docker Swarm", + "Docker Stack", + "Docker Group" + ], + "question": "A collection of Docker Engines joined into a cluster is called a", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "You can only use Virtual Machines in a Docker Swarm", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "question": "Manager Nodes can execute tasks like Worker Nodes", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "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" + ], + "question": "Which is true about Docker Swarm?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Docker must be installed on each machine you want to join to the swarm", + "correctAnswerIndex": 0 + }, + { + "id": "question8", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + } + ] + }, + { + "id": "course15", + "chaptersCount": 5, + "status": "live", + "credits": 500, + "courseId": "course15", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": " Intro to Selenium WebDriver with .NET Core", + "titleSlug": "intro-to-selenium-webdriver-with-net-core", + "teacher": { + "profilePath": "nikolay_advolodkin", + "name": "Nikolay Advolodkin", + "photoURL": "nikolayAdvolodkin.png" + }, + "level": "beginner", + "abstract": "Learn to write your very first automated script using Selenium WebDriver with .NET Core", + "sortOrder": 6, + "group": "foundational_testing", + "releaseDate": "03/04/2019", + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "https://visualstudio.microsoft.com/vs/mac/", + "https://mac.com", + "https://imac.com", + "https://google.com" + ], + "question": "Where can you download Visual Studio for Mac?", + "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", + "type": "radio", + "answers": [ + ".NET Core", + ".NET Framework", + ".C Framework", + ".Core .NET Framework" + ], + "question": "Which framework do we use to write C# code in this course?", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "answers": [ + "A reporting tool from Microsoft", + "A way for us to live our life", + "A cross platform UI automation framework", + "A unit testing framework" + ], + "question": "What is MsTest?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "answers": [ + "[TestClass]", + "[TestingClass]", + "[TestFixture]", + "[Class]" + ], + "question": "What is the attribute that tells us that we have a class that has tests in it?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "bool", + "string", + "void", + "int" + ], + "question": "What should be the return type for test methods?", + "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", + "type": "radio", + "answers": [ + "ID", + "Symbol", + "Localization name", + "Page it’s on" + ], + "question": "What is one way to locate an element in the DOM?", + "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", + "question": "Who created Selenium?", + "type": "radio", + "answers": [ + "Selenium HQ", + "Simon Stewart", + "Angie Jones", + "Jason Huggins" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "question": "Which version of Selenium will be the first to support W3C standard?", + "type": "radio", + "answers": [ + "4", + "8", + "12", + "1" + ], + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter4", + "questions": [ + { + "id": "question1", + "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" + ], + "question": "What is a NuGet package?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "question": "Which NuGet package do we need to install to use Selenium WebDriver API?", + "type": "radio", + "answers": [ + "Selenium.WebDriver", + "Nuget.Open", + "Open.Nuget", + "Selenium.Nuget.Java.WebDriver" + ], + "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", + "answers": [ + "Selenium", + "ChromeWait", + "WebDriverWait", + "SeleniumWait" + ], + "question": "Which class can be used to conditionally wait for the state of an element before proceeding?", + "type": "radio", + "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", + "answers": [ + "Tap()", + "Enter()", + "Flick()", + "Click()" + ], + "question": "Which method is used to click on a button?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "LocateElements", + "FindElements()", + "By", + "SeleniumElements" + ], + "question": "Which Selenium class is used to locate elements?", + "correctAnswerIndex": 2 + } + ] + } + ] + }, + { + "id": "course16", + "abstract": "Learn to automate your API tests using REST Assured", + "sortOrder": 7, + "group": "foundational_testing", + "releaseDate": "03/08/2019", + "chaptersCount": 6, + "status": "live", + "credits": 600, + "courseId": "course16", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "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" + }, + "level": "beginner", + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "type": "radio", + "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?", + "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", + "question": "How can you add REST Assured as a dependency to your test project?", + "type": "radio", + "answers": [ + "Using GitHub", + "Using only Gradle", + "Using only Maven", + "Using Gradle or Maven" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "1", + "2", + "3", + "4" + ], + "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.", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "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?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "answers": [ + "GPath", + "XPath", + "JsonPath" + ], + "question": "Which of these can NOT be used to extract response body elements from a JSON response in a REST Assured test?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "The Arrange-Act-Assert pattern", + "The Gherkin syntax (Given/When/Then)", + "The Page Object pattern", + "The Object Repository pattern" + ], + "question": "Which of these is a syntax or pattern that you can use to write REST Assured tests?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + "then().assertThat().contentType().equalTo().JSON();", + "then().assertThat().contentType(ContentType.JSON);", + "then().assertThat().contentType(“application/json”);" + ], + "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", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "given().log().all()", + "given().log().body()", + "then().log().all()", + "then().log().body()" + ], + "question": "Which of the following fragments will log all details of an API response?", + "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", + "question": "What kind of REST API parameters does REST Assured support?", + "type": "radio", + "answers": [ + "Only query parameters", + "Only path parameters", + "Both query and path parameters", + "REST Assured does not support parameters" + ], + "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", + "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" + ], + "question": "Which statement is NOT true about the @DataProvider mechanism?" + }, + { + "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", + "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" + ], + "question": "What can you NOT do with a RequestSpecification in REST Assured?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "type": "radio", + "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?", + "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", + "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" + ], + "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", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "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" + ], + "question": "How does REST Assured determine how to process an API response if you don’t tell it how to do so explicitly? ", + "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", + "type": "radio", + "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?", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "answers": [ + "999", + "-1", + "MaxIndex", + "∞" + ], + "question": " Which special index points to the last element in a list of elements selected by an XmlPath query?" + } + ] + }, + { + "chapterId": "chapter6", + "questions": [ + { + "id": "question1", + "question": "What is a POJO?", + "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" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "question": "Which of these statements is NOT true?", + "type": "radio", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "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" + ], + "question": "Do the names of the elements in a JSON request or response have to match the names of the POJO properties exactly?" + }, + { + "id": "question4", + "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?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + } + ] + }, + { + "id": "course17", + "titleSlug": "introduction-to-testng", + "teacher": { + "photoURL": "rex_jones_II.png", + "profilePath": "rex_jones_II", + "name": "Rex Jones II" + }, + "level": "beginner", + "abstract": "Learn to execute and verify your automated tests with TestNG", + "sortOrder": 8, + "group": " foundational_testing", + "releaseDate": "03/20/2019", + "chaptersCount": 9, + "status": "live", + "credits": 900, + "courseId": "course17", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Introduction to TestNG", + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "answers": [ + "Test New Generation", + "Test Next General", + "Test Next Generation", + "Test New General" + ], + "question": "What does TestNG stands for?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "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?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "Integrated Design Environment", + "Integrated Design Edition", + "Integrated Development Environment", + "Integrated Development Edition" + ], + "question": "What does IDE stand for?", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "answers": [ + "Microsoft Visual Studio", + "NetBeans", + "Eclipse", + "IntelliJ IDEA" + ], + "question": "Which IDE is NOT compatible with TestNG?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "TestNG can be integrated with build tools such as Ant and Maven.", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "question": "Using an IDE is the only way to set up TestNG.", + "answers": [ + "True", + "False" + ] + } + ] + }, + { + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "Finally", + "AfterSuite", + "Previously", + "BeforeMethod" + ], + "question": "Which of the following is an example of a post-condition annotation?", + "type": "radio", + "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", + "question": "Which annotation has the highest rank?", + "type": "radio", + "answers": [ + "BeforeSuite", + "BeforeMethod", + "BeforeTest", + "BeforeClass" + ], + "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", + "question": "When are methods that are annotated as AfterSuite executed?", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question9", + "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" + ], + "question": "What is the difference between AfterTest and AfterMethod annotations?", + "type": "radio", + "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", + "question": "A tag can contain one or more _____ tags", + "type": "radio", + "answers": [ + "", + "", + "", + "" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "", + "", + "", + "" + ], + "question": "A tag can contain one or more _____ tags" + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "", + "", + "", + "" + ], + "question": "Which tag appears first in a TestNG xml file?", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "", + "", + "", + "" + ], + "question": "Which tag can contain one or more tags?", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "answers": [ + "DataProvider annotations", + "Configuration annotations", + "Test methods", + "BeforeTest methods" + ], + "question": "The purpose of the priority attribute is to determine the execution order of _______.", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "answers": [ + "Ascending numerical order", + "Descending numerical order", + "Ascending alphabetical order", + "Descending alphabetical order" + ], + "question": "In which order does TestNG execute test methods that contain a priority attribute?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "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" + ], + "question": "In which order does TestNG execute test methods that do not contain a priority attribute? ", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Only methods can be annotated as Test.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "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" + ], + "question": "Which of the following must be true for methods to be considered tests within a class annotated as Test?", + "type": "radio", + "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", + "answers": [ + "hard asserts", + "soft asserts", + "neither", + "both" + ], + "question": "The assertAll method is used with_____?", + "type": "radio", + "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", + "answers": [ + "assertEquals", + "verifyEquals", + "checkEquals", + "isEqual" + ], + "question": "Which assertion method should be used to check for equality?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "checkForNull", + "assertNotNull", + "verifyNullFalse", + "isNotNull" + ], + "question": "Which assertion method verifies that an object is not null?", + "type": "radio", + "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", + "question": "What is AssertJUnit?", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question7", + "question": "When is the assertion message presented to the user?", + "type": "radio", + "answers": [ + "If the assertion fails", + "If the assertion passes", + "If the assertion is skipped", + "If the assertion is executed" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question8", + "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" + ], + "question": "What is a hard assert?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Members of a group cannot belong to any other groups.", + "correctAnswerIndex": 1 + }, + { + "id": "question11", + "answers": [ + "Test methods", + "Other groups", + "Classes", + "Suites" + ], + "question": "Which of the following is able to depend on groups?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question12", + "type": "radio", + "answers": [ + "XML file", + "Command line", + "Ant", + "All of the above" + ], + "question": "Which of the following allow the execution of groups at runtime?", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "answers": [ + "Failed", + "Passed", + "Skipped", + "Ignored" + ], + "question": "If a test fails, what is the default status of other tests that depend on the failed test?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "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" + ], + "question": "What is a cascade of failures?", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "question": "dependsOnMethods is a(n)", + "type": "radio", + "answers": [ + "Test annotation", + "Configuration annotation", + "Attribute", + "Method" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "By method names", + "By method annotations", + "By method priority", + "By method link" + ], + "question": "How do you specify which methods a test should depend on?", + "correctAnswerIndex": 0 + }, + { + "id": "question6", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "A test can only depend on one method?", + "correctAnswerIndex": 1 + }, + { + "id": "question7", + "answers": [ + "", + "", + "", + "" + ], + "question": "Which xml tag can you use to prevent a test from executing?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question8", + "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?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question9", + "type": "radio", + "answers": [ + "Test methods", + "Variables", + "Test results", + "Classes" + ], + "question": "What does the group attribute add to a list?", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter8", + "questions": [ + { + "id": "question1", + "question": "Which is NOT a purpose of data-driven testing?", + "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" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question10", + "answers": [ + "True", + "False" + ], + "question": "A data provider annotation is required to have a name.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "question": "Which annotation is used to supply test data to a test method?", + "type": "radio", + "answers": [ + "BeforeTest", + "BeforeMethod", + "DataProvider ", + "TestData" + ], + "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", + "type": "radio", + "answers": [ + "String", + "Integer", + "Boolean", + "Any data type" + ], + "question": "Test data must be in the form of which data type?", + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question8", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "The data provider and test method must exist within the same class.", + "correctAnswerIndex": 1 + }, + { + "id": "question9", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "A data provider can only be used by one test method.", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter9", + "questions": [ + { + "id": "question1", + "question": "What is the purpose of the tag within the XML file?", + "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" + ], + "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", + "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" + ], + "question": "When should you use a parameter at the suite level", + "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", + "courseId": "course18", + "groupName": "Real World Testing", + "category": "Test Automation for Real World Problems", + "title": "The Whole Team Approach to Continuous Testing", + "titleSlug": "the-whole-team-approach-to-continuous-testing", + "teacher": { + "profilePath": "lisi_hocke", + "twitter": "lisihocke", + "name": "Elisabeth Hocke", + "linkedIn": "", + "photoURL": "elisabeth.jpeg" + }, + "level": "beginner", + "abstract": "Learn to achieve continuous testing even without an automation expert", + "sortOrder": 8, + "group": "real_world_testing", + "releaseDate": "03/29/2019", + "chaptersCount": 7, + "status": "live", + "credits": 700, + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "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!" + ], + "question": "What is the core of continuous testing?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "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" + ], + "question": "When it comes to the software delivery workflow, where does the feedback we get from automation fit in best?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "Fast feedback", + "Continuous learning", + "Increased confidence in releases", + "Faster time to market", + "All of the above" + ], + "question": "What are the benefits of continuous testing?", + "type": "radio", + "correctAnswerIndex": 4 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "It’s all about learning fast, so we want to get rid of feedback loops.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "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" + ], + "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", + "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", + "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" + ], + "question": "What can happen if you have only one person in the team who’s taking care of testing?", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "question": "What describes the core of agile testing best?", + "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" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "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" + ], + "question": "How can you coach the team to improve their testing?", + "type": "radio", + "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", + "type": "radio", + "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.", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "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" + ], + "question": "What should you focus on when you start learning about automation?", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "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?", + "type": "radio", + "correctAnswerIndex": 4 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "To improve your automation skills you need to practice hands-on, getting your hands dirty.", + "type": "radio", + "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", + "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" + ], + "question": "What does working solo mean?", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "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?", + "type": "radio", + "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", + "question": "What can you do to spread automation knowledge in your company?", + "type": "radio", + "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" + ], + "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", + "question": "Which ways of pairing have been mentioned in this course?", + "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" + ], + "correctAnswerIndex": 4 + }, + { + "id": "question3", + "question": "What is strong-style pairing?", + "type": "radio", + "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" + ], + "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", + "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" + ], + "question": "With whom can you pair on automation?", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter6", + "questions": [ + { + "id": "question1", + "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" + ], + "question": "What is the mob approach?", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "question": "Mob programming cannot be productive, yet is effective.", + "type": "radio", + "answers": [ + "True", + "Fasle" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "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?", + "type": "radio", + "correctAnswerIndex": 5 + }, + { + "id": "question4", + "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?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter7", + "questions": [ + { + "id": "question1", + "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?", + "type": "radio", + "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", + "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" + ], + "question": "How often can you run experiments?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Before you start an experiment, make sure to be clear about the perceived problem.", + "type": "radio", + "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", + "courseId": "course19", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Web Element Locator Strategies", + "titleSlug": "web-element-locator-strategies", + "teacher": { + "photoURL": "andrew_knight.jpg", + "profilePath": "andrew_knight", + "twitter": "AutomationPanda", + "name": "Andrew Knight", + "linkedIn": "" + }, + "level": "beginner", + "abstract": "Learn how to locate elements within the DOM for test automation", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "04/08/2019", + "chaptersCount": 8, + "status": "live", + "credits": 800, + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "question": "What does HTML do in a web page?", + "type": "radio", + "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." + ], + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "question": "HTML elements can have child elements nested within their content.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "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", + "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" + ], + "question": "What analogies could be made for the three major components of a web page?", + "correctAnswerIndex": 3 + }, + { + "id": "question6", + "question": "Why do nearly all modern Web applications use JavaScript for their front-end?", + "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." + ], + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "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?", + "type": "radio", + "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", + "answers": [ + "Get an element’s text content.", + "Get an attribute value for an element.", + "Set an attribute value for an element.", + "Click an element." + ], + "question": "What is one thing JavaScript calls to the DOM can do that Selenium WebDriver calls cannot?", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter3", + "questions": [ + { + "id": "question1", + "type": "radio", + "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?", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "\"Name\" locators only work for tag elements.", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "\"Class name\" locators can return multiple elements.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "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." + ], + "question": "You need to write a locator for an element, and you discover that it has an ID. What should you do?", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "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)? ", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question6", + "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?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "By.id(“topic-header”)", + "By.name(“topic-header”)", + "By.className(“topic-header”)", + "A CSS selector or XPath is needed" + ], + "question": "Review the HTML document above. What locator would return all section header

elements?", + "correctAnswerIndex": 2 + }, + { + "id": "question9", + "answers": [ + "By.className(“section”)", + "By.name(“p”)", + "By.name(“section[2] p”)", + "None of the above." + ], + "question": "Review the HTML document above. What locator would return the

paragraph element in the rebuttal section?", + "type": "radio", + "correctAnswerIndex": 3 + } + ] + }, + { + "chapterId": "chapter4", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "A type of Web element selector.", + "Part of the CSS syntax.", + "Pattern-matching expressions.", + "All of the above." + ], + "question": "What are CSS selectors?", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "CSS selectors can uniquely identify any given element on a Web page.", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + ".parent", + "div parent", + "div.parent", + "div[parent]" + ], + "question": "Which of the following CSS selectors would select only “div” elements with the class name “parent”?", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "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”?", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Any element on a Web page can be uniquely located using XPath.", + "type": "radio", + "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", + "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”?", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter6", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "XPaths are always slower than CSS selectors.", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "//*[contains(text(), ‘elephant’)]", + "//p[contains(‘elephant’)]", + "//p[contains(., ‘elephant)]", + "//p[@elephant]" + ], + "question": "Which of the following XPaths would locate a

paragraph that contains the word “elephant”?", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "answers": [ + "Locating elements by text contents", + "Locating any element by index", + "Locating elements using conditional positions and axes", + "All the above" + ], + "question": "What are abilities XPath has that CSS selectors do not have?", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "You can always trust Chrome DevTools for generating good locators.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "question": "What is the difference between link text and partial link text?", + "type": "radio", + "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." + ], + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "ID: firstHeading", + "CSS Selector: h1.firstHeading", + "XPath: //h1[contains(text(), ‘panda’)]", + "Tag: h1" + ], + "question": "Based on the order of preference, which of the following would be the best locator for the following element:

Giant panda

", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Coded test automation solutions are always better than codeless ones.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "Coded test automation tools require software development skills to use.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Both codeless and coded test automation tools use Web element locators.", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Selenium WebDriver can be used only in Java.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "answers": [ + "Selenium IDE", + "Selenium WebDriver", + "SmartBear TestComplete", + "TestCraft" + ], + "question": "Which of the following is NOT a codeless test automation tool?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "question": "What are good reasons for using the Page Object Model instead of raw WebDriver calls?", + "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." + ], + "correctAnswerIndex": 3 + }, + { + "id": "question7", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + } + ] + }, + { + "id": "course2", + "chaptersCount": 10, + "status": "live", + "credits": 1000, + "courseId": "course2", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "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", + "abstract": "Learn about Selenium IDE and get started with automation without code!", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "04/26/2019", + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "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" + ], + "question": "Codeless test automation is worth paying attention to because:", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "question": "Worthwhile codeless test automation tools have:", + "type": "radio", + "answers": [ + "Smart element locators", + "Conditional waiting", + "Control structures", + "Easy assertions", + "The ability to do modification without redo", + "All of the above" + ], + "correctAnswerIndex": 5 + }, + { + "id": "question3", + "question": "Worthwhile codeless test automation tools also have:", + "type": "radio", + "answers": [ + "Reusable steps", + "Cross-browser support", + "Reporting", + "The ability to insert code", + "The ability to be used with Continuous Integration", + "All of the above" + ], + "correctAnswerIndex": 5 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "a commercial tool", + "a free tool", + "an open-source tool", + "a free and open-source tool" + ], + "question": "Selenium IDE is:", + "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", + "question": "A Selenium IDE project has:", + "type": "radio", + "answers": [ + "Only tests", + "Only suites", + "Only test plans", + "Tests and suites", + "Tests, suites, and test plans" + ], + "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", + "answers": [ + "Clicking at the end of a test", + "Right-clicking on a test step and selecting 'Insert new command'", + "Using a hot-key" + ], + "question": "Which one of the following will NOT allow you to manually add a command to an existing test.", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "answers": [ + "Contain special characters", + "Be longer than 100 characters", + "Have spaces", + "Be the same as another test" + ], + "question": "Test names can not:", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "answers": [ + "Other suites", + "Just one test", + "One or more tests", + "Individual test steps" + ], + "question": "Suites can contain:", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "A test can be part of zero or more test suites:", + "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", + "answers": [ + "id", + "name", + "number", + "none of the above" + ], + "question": "The run command takes the ______ of a test you'd like to execute", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "store", + "click", + "execute", + "run" + ], + "question": "You can make reused test cases dynamic with variables created by the ______ command:", + "type": "radio", + "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", + "question": "There are ______ types of control flow commands in Selenium IDE:", + "type": "radio", + "answers": [ + "1", + "2", + "3", + "4", + "5" + ], + "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", + "question": "You can have your test stop during playback by:", + "type": "radio", + "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" + ], + "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", + "question": "Selenium IDE emits _____ for plugins to use:", + "type": "radio", + "answers": [ + "Events", + "Emojis", + "Wingdings", + "All of the above", + "None of the above" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "A user customization", + "A third-party integration", + "How to troubleshoot an issue in your test", + "All of the above" + ], + "question": "The Applitools Eyes plugin is an example of:", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "In parallel", + "Cross-browser", + "Locally", + "Headlessly", + "On a Selenium Grid", + "All of the above" + ], + "question": "With the command-line runner you can execute your Selenium IDE tests:", + "correctAnswerIndex": 5 + }, + { + "id": "question2", + "answers": [ + "server", + "capabilities", + "filter", + "config-file" + ], + "question": "You can run just a subset of your tests with the _____ option:", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "answers": [ + "platform", + "browserName", + "version", + "filter" + ], + "question": "You can change which browser your tests run on with the _____ capability:", + "type": "radio", + "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", + "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" + ], + "question": "A Continuous Integration (CI) server enables you to:", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "How you connect your tests to CI depends on how your team currently uses CI for its development workflow.", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "There are only a few CI solutions available:", + "type": "radio", + "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", + "question": "Selenium IDE can be used to:", + "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" + ], + "correctAnswerIndex": 4 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "The only way to contribute to open-source is by contributing code:", + "type": "radio", + "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", + "courseId": "course20", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Introduction to iOS Test Automation with XCUITest", + "titleSlug": "introduction-to-ios-test-automation-with-xcuitest", + "teacher": { + "linkedIn": "", + "photoURL": "shashikant_jagtap.png", + "profilePath": "shashikant_jagtap", + "twitter": "Shashikant86", + "name": "Shashikant Jagtap" + }, + "level": "beginner", + "abstract": "Learn to automate iOS testing with Apple's native framework, XCUITest", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "04/15/2019", + "chaptersCount": 8, + "status": "live", + "credits": 800, + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "answers": [ + "2015", + "2016", + "2017", + "2018" + ], + "question": "When did Apple announce the XCUITest framework?", + "type": "radio", + "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", + "question": "Can we write tests with XCUITest using any programming language?", + "type": "radio", + "answers": [ + "Yes", + "No" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "question": "What kind of framework is XCUITest?", + "type": "radio", + "answers": [ + "White-Box", + "Black-Box", + "Grey-Box", + "None of these" + ], + "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", + "question": "What is the recommended IDE/Editor used for writing XCUITest?", + "type": "radio", + "answers": [ + "IntelliJ IDEA", + "Eclipse", + "Xcode", + "Atom" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "question": "Where you can write XCUITest?", + "type": "radio", + "answers": [ + "Main Target of the app", + "XCUITest needs separate target" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "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" + ], + "question": "Which of the following statements is false?", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "Recording", + "Writing XCUITest from scratch without recorder" + ], + "question": "Which is the better method to write better and stable tests with XCUITest?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "Make XCUITest framework look better", + "Avoid Code duplication" + ], + "question": "What’s purpose of adding a base class?", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "XCTest", + "XCTestCase", + "XCUIApplication", + "None of Above" + ], + "question": "The base class should be subclass of _____", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Once you define a base class, test classes can be added as subclasses of base class.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "answers": [ + "True", + "False" + ], + "question": "The base class adds complexity in the XCUITest framework", + "type": "radio", + "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", + "answers": [ + "BDD makes test faster", + "BDD makes tests human readable" + ], + "question": "What are the benefits of BDD for test automation?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "Swift Generics", + "Swift Struct", + "Swift extensions", + "Swift Class" + ], + "question": "What have we used to implement the Given-When-Then steps defined in the XCUITest scenario?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "question": "What’s a major benefit of using extension to step definitions?", + "type": "radio", + "answers": [ + "Extension can be used all over the XCUITest target", + "Swift extension is a fancy way of defining steps." + ], + "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", + "answers": [ + "Swift extension", + "Swift Structs", + "Swift Enums", + "None of Above" + ], + "question": "What have we used to store XCUIElements?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "Swift enums are lightweight", + "We can return dynamic XCUIElements from enums" + ], + "question": "What’s the benefit of using enums for locator strategy?", + "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", + "answers": [ + "True", + "False" + ], + "question": "Xcode groups makes the XCUITest more organised.", + "type": "radio", + "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", + "type": "radio", + "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”", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + "wait()", + "waitForExistance(timeout: TimeIntervals)", + "sleep()", + "None of Above" + ], + "question": "Which method waits for the existence of an XCUIElement?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "question": "How can you enable parallel testing in Xcode?", + "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" + ], + "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", + "answers": [ + "Carthage", + "Swift Package Manager", + "Homebrew", + "CocoaPods" + ], + "question": "Which iOS dependency management framework have we used for the downloading Applitools SDK?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "An API Key is optional to run tests on Applitools test manager?", + "type": "radio", + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "Xcode Scheme must be shared in order to seen by a CI server.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "Yes", + "No" + ], + "question": "Can you run Applitools visual validation tests on CI?", + "type": "radio", + "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", + "courseId": "course23", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "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", + "abstract": "Learn the fundamentals of unit testing by applying code-based techniques such as mocking, code coverage analysis, and more", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "05/13/2019", + "chaptersCount": 7, + "status": "live", + "credits": 700, + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "type": "radio", + "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?", + "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", + "answers": [ + "Structural or White Box Testing", + "Functional or Black Box Testing", + "Usability or User Experience Testing", + "None of the above" + ], + "question": "Testing from the Inside is another way to refer to:", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "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" + ], + "question": "In the testing pyramid:", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "question": "Which of the following is true for inspections:", + "type": "radio", + "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" + ], + "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", + "type": "radio", + "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?", + "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", + "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." + ], + "question": "Which of the following statements describes a way to achieve good test coverage?", + "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", + "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." + ], + "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?", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "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." + ], + "question": "Which of the following is an acceptable way to write tests for complex private logic?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question5", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question6", + "type": "radio", + "answers": [ + "Dependencies have not been implemented yet.", + "Dependencies have non-deterministic behavior.", + "Dependencies initiate long-running processes.", + "All of the above." + ], + "question": "Which of the following statements describes a scenario that requires mocking out dependencies?", + "correctAnswerIndex": 3 + }, + { + "id": "question7", + "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." + ], + "question": "Which of the following is a potential pitfall of mocking?", + "type": "radio", + "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", + "question": "Which of the following is NOT an example of a test driver?", + "type": "radio", + "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." + ], + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "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." + ], + "question": "Which of the following statements is TRUE about unit testing in design by contract?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "question": "When is it OK to test more than a single behavior in a single unit test?", + "type": "radio", + "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." + ], + "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", + "question": "Which of the following types of code coverage does IntelliJ NOT report by default?", + "type": "radio", + "answers": [ + "Branch Coverage", + "Line Coverage", + "Method Coverage" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question8", + "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." + ], + "question": "Which of the following statements is TRUE about unit testing in defensive designs?", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "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”" + ], + "question": "How can we implement a one-time setup method using TestNG?", + "correctAnswerIndex": 0 + }, + { + "id": "question10", + "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?", + "type": "radio", + "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", + "answers": [ + "Annotate the target method with @BeforeEachTest", + "Annotate the target method with @RunOncePerTest", + "Annotate the target method with @BeforeMethod", + "Name the target method “beforeEachTest”" + ], + "question": "How can we implement an each-time setup method using TestNG?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "Heavy operations that are only executed once", + "Database queries", + "Data that may be changed by the test" + ], + "question": "What should be included in an each-time setup method?", + "correctAnswerIndex": 2 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "Tests give more verbose results", + "Reduce redundancy and duplication in our tests", + "Reduces number of requirements covered", + "Increases code coverage" + ], + "question": "What is one advantage of using Data Providers to parameterize tests?", + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question8", + "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" + ], + "question": "Scenarios where using Mocks are appropriate are:", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question9", + "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?", + "type": "radio", + "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", + "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" + ], + "question": "An important factor that impacts testing JavaScript code is whether or not the:", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "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:", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "question": "Which of the following tools is used to measure code coverage for JavaScript?", + "type": "radio", + "answers": [ + "Istanbul", + "Chai", + "Jest", + "Mocha" + ], + "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", + "question": "Testing from the inside encourages testers to find new ways to add value by:", + "type": "radio", + "answers": [ + "Only doing exploratory testing", + "Engaging in pair programming with developers", + "Advocating for developers to perform code reviews", + "Documenting test cases" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "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?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "type": "radio", + "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:", + "correctAnswerIndex": 3 + } + ] + } + ] + }, + { + "id": "course24", + "level": "beginner", + "abstract": "Learn to automate tests using Selenium WebDriver and Ruby", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "05/22/2019", + "chaptersCount": 6, + "status": "live", + "credits": 600, + "courseId": "course24", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Selenium WebDriver with Ruby", + "titleSlug": "selenium-webdriver-with-ruby", + "teacher": { + "profilePath": "meaghan_lewis", + "twitter": "meaghan_lewis", + "name": "Meaghan Lewis", + "linkedIn": "", + "photoURL": "meaghan_lewis.jpg" + }, + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "answers": [ + "True", + "False" + ], + "question": "Ruby is a required tool to write and run tests in this course?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "Package managers", + "Installers", + "Managers", + "All of the above" + ], + "question": "Ruby can be installed with the help of ______.", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "The command line", + "Ruby", + "The bundler", + "WebDriver" + ], + "question": "Gems are installed through the help of what?", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "ChromeDriver", + "ChromiumDriver", + "ChromeBrowserDriver", + "BrowserDriver" + ], + "question": "What is the browser driver called for the Chrome browser?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "answers": [ + "Open", + "Navigate", + "Drive", + "Close" + ], + "question": "What is a commonly used method from the driver class?", + "type": "radio", + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "The find_element method will find the first element matching the given arguments.", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter3", + "questions": [ + { + "id": "question1", + "answers": [ + "require", + "install", + "use", + "gem" + ], + "question": "What needs to be specified in a test to use the “selenium-webdriver” API?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Implicit waits will wait for a specific element or condition?", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "drivers", + "elements", + "windows", + "classes" + ], + "question": "The switch_to method allows the driver to switch contexts between ______", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "move", + "drag_and_drop", + "move_to", + "drag" + ], + "question": "The _______ method allows you to move one element onto another", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "The datepicker allows a date to be selected from a calendar?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "Id", + "CSS", + "XPath", + "All of the above" + ], + "question": "Radio buttons can be selected using ______", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "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", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + "Return", + "Click", + "Enter", + "Mouse down" + ], + "question": "After selecting a date from the datepicker, it must be closed by sending the keys ____", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "To automate a dropdown menu, all you need to do is to click on an option from the menu.", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "answers": [ + "True", + "False" + ], + "question": "WebDriver methods can be chained together?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "A select menu can have a value can be sent directly to it for automation?", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "Spec", + "RSpec", + "WebDriver" + ], + "question": "_____ is a behavior driven test framework for Ruby", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "Conditions", + "Alerts", + "Expectations", + "Comparisons" + ], + "question": "_____ are used as common ways to express outcomes in tests.", + "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", + "question": "How do you create tests that are reusable and maintainable over time?", + "type": "radio", + "answers": [ + "Write more code", + "Write clean code", + "Write less code", + "Write code with repetition" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "Access the variable in the entire test class", + "Access the variable within a method", + "Access the variable across classes" + ], + "question": "A global variable in Ruby will allow you to?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "Variables", + "Gems", + "Methods" + ], + "question": "Extract test steps into _____ and call them in the test to make it cleaner and easier to read.", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Expectations should be defined in tests, and not extracted into methods.", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + } + ] + }, + { + "id": "course25", + "courseId": "course25", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "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", + "abstract": "Learn UI automation with Capybara in Ruby", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "07/19/2019", + "chaptersCount": 7, + "status": "live", + "credits": 700, + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "answers": [ + "ruby --version", + "ruby -v", + "All of the Above" + ], + "question": "What should we type in the Mac Terminal to find out what version of Ruby we have?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "type": "radio", + "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? ", + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "type": "radio", + "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?", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "question": "What Test Framework are we using in this course?", + "type": "radio", + "answers": [ + "Cucumber", + "Gauge", + "RSpec" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "type": "radio", + "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? ", + "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", + "answers": [ + "Capybara.default_driver", + "Capybara.app_host", + "Capybara.default_max_wait_time" + ], + "question": "Which Capybara property sets how long to wait for a slow loading component? ", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question6", + "type": "radio", + "answers": [ + "Capybara.default_driver", + "Capybara.app_host", + "Capybara.default_max_wait_time" + ], + "question": "Which Capybara property sets the browser the tests will be using?", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter3", + "questions": [ + { + "id": "question1", + "question": "What Finder searches the page for a textbox?", + "type": "radio", + "answers": [ + "find_button", + "find_field", + "find_link" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "Capybara’s default settings are to find all hidden elements on the page", + "type": "radio", + "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", + "answers": [ + "have_link(“Password”)", + "have_link(“Password”, exact: true)" + ], + "question": "If there are two links, Password and Password Confirmation, how can you make sure to match only the first link?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "question": "With Capybara method click_button, how can Capybara locate the button?", + "type": "radio", + "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" + ], + "correctAnswerIndex": 6 + } + ] + }, + { + "chapterId": "chapter4", + "questions": [ + { + "id": "question1", + "question": "What Capybara method enters text into a textbox?", + "type": "radio", + "answers": [ + "choose", + "fill_in", + "select", + "uncheck" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "answers": [ + "scenario", + "background", + "expect(page).to" + ], + "question": "Which block deals with common setup that happen before the test starts?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "select", + "choose", + "check", + "uncheck" + ], + "question": "Which Capybara method picks one of the values in a dropdown list?", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "select", + "choose", + "check", + "uncheck" + ], + "question": "Which Capybara method picks a radio button?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "select", + "choose", + "check", + "uncheck" + ], + "question": "Which Capybara method picks a checkbox?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "Label text", + "Name", + "ID", + "All of the above" + ], + "question": "What does Capybara use to locate a checkbox?", + "type": "radio", + "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", + "question": "What Capybara method would you use to emulate selecting on the “Cancel” button?", + "type": "radio", + "answers": [ + "accept_alert", + "accept_prompt", + "dismiss_confirm" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "accept_alert", + "accept_prompt", + "dismiss_confirm" + ], + "question": "What Capybara method would you use to enter a response into an alert box?", + "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", + "question": "With the Capybara property, page.driver.browser.manage.logs.get(), which property would capture JavaScript errors in Chrome?", + "type": "radio", + "answers": [ + ":browser", + ":driver" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "question": "A headless browser will run a test without opening up a browser:", + "type": "radio", + "answers": [ + "True", + "False" + ], + "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", + "type": "radio", + "answers": [ + "eyes.open", + "eyes.close", + "eyes.check_window" + ], + "question": "Which Applitools Eyes method is used to take screenshots?", + "correctAnswerIndex": 2 + }, + { + "id": "question5", + "answers": [ + "eyes.open", + "eyes.close", + "eyes.check_window" + ], + "question": "How do you initialize Applitools Eyes in your code?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + } + ] + }, + { + "id": "course26", + "chaptersCount": 30, + "status": "live", + "credits": 3000, + "courseId": "course26", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Java Programming", + "titleSlug": "java-programming-course", + "teacher": { + "twitter": "techgirl1908", + "name": "Angie Jones", + "linkedIn": "", + "photoURL": "angie.jpg", + "profilePath": "angie_jones" + }, + "level": "beginner", + "abstract": "Learn core Java programming", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "05/31/2019", + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "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 _____?", + "type": "radio", + "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", + "answers": [ + "A complex problem", + "A guide that provides the high level steps to complete a task", + "A programming language", + "A coffee flavor" + ], + "question": "What is an algorithm?", + "type": "radio", + "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", + "answers": [ + "class", + "package", + "method", + "variable" + ], + "question": "Which of the following serves as a folder to organize Java files?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question10", + "answers": [ + "%%", + "..", + "//", + "##" + ], + "question": "Which of the following denotes a comment in Java?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question11", + "type": "radio", + "answers": [ + "print.out(“HELLO”):", + "System.out.println(“HELLO”);", + "Scanner.in(“HELLO”).", + "Out(“HELLO”)," + ], + "question": "Which statement will print HELLO to the console?", + "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", + "answers": [ + "double", + "int", + "nextInt", + "nextDouble" + ], + "question": "Which of the following is a data type suitable for whole numbers?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question14", + "answers": [ + "double", + "int", + "nextInt", + "nextDouble" + ], + "question": "Which of the following is a data type suitable for decimal numbers?", + "type": "radio", + "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", + "answers": [ + "+", + "/", + "*", + "x" + ], + "question": "Which operator is used to multiply numbers in Java?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question17", + "type": "radio", + "answers": [ + "+", + ".", + ":", + "*" + ], + "question": "Which operator is used to append a variable’s data to a String?", + "correctAnswerIndex": 0 + }, + { + "id": "question18", + "type": "radio", + "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?", + "correctAnswerIndex": 2 + }, + { + "id": "question19", + "type": "radio", + "answers": [ + "compilation error", + "bug report", + "runtime error", + "warning alert" + ], + "question": "If you type something within your program that is invalid, you will get a _____?", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "class", + "package", + "method", + "variable" + ], + "question": "Which of the following represents a Java file?", + "correctAnswerIndex": 0 + }, + { + "id": "question20", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Java is case-sensitive.", + "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", + "answers": [ + "main", + "first", + "default", + "priority" + ], + "question": "What’s the name of the method that is invoked first when a Java class is executed?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "MYCLASS", + "myClass", + "MyClass", + "myclass" + ], + "question": "Which of the following class names follows Java convention?", + "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", + "answers": [ + "public", + "print", + "scanner", + "hours" + ], + "question": "Which of the following is a reserved word in Java?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question9", + "question": "Which of the following encloses a block of statements?", + "type": "radio", + "answers": [ + "Brackets - []", + "Curly braces - {}", + "Parentheses - ()", + "Semicolon - ;" + ], + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter3a", + "questions": [ + { + "id": "question1", + "answers": [ + "//", + "/* */", + "{}", + "[]" + ], + "question": "Which of the following is used to enclose code comments that span multiple lines?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Comments can only exist within a method.", + "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", + "type": "radio", + "answers": [ + "A counter", + "A variable declaration", + "A condition", + "A String" + ], + "question": "What goes inside of the parentheses of an if statement?", + "correctAnswerIndex": 2 + }, + { + "id": "question5", + "answers": [ + "String", + "int", + "float", + "boolean" + ], + "question": "A condition is what type of expression?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question6", + "type": "radio", + "answers": [ + "whole numbers", + "decimal numbers", + "Strings", + "true or false" + ], + "question": "The boolean data type holds ____", + "correctAnswerIndex": 3 + }, + { + "id": "question7", + "answers": [ + "True", + "False" + ], + "question": "Any time a variable is updated with a new value, it must be re-declared.", + "type": "radio", + "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", + "answers": [ + "0", + "1", + "2", + "3" + ], + "question": "How many paths exist in an if-else statement?", + "type": "radio", + "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", + "answers": [ + "All the time", + "Only if condition is true", + "Only if condition is false", + "Never" + ], + "question": "When will statements inside of an else block be executed?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "It is possible to execute the statements of both the if and the else blocks of an if-else statement.", + "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", + "question": "The double data type can hold decimal and whole numbers.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "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", + "question": "Nested ifs have the same effect as a single if-else statement.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "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", + "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" + ], + "question": "When will a nested if statement be evaluated?", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter3d", + "questions": [ + { + "id": "question1", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "With if-else-if statements, multiple conditions must be specified.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "All that are true", + "The first one that is true", + "All that are false", + "The last one that is false" + ], + "question": "Which branches of an if-else-if statement are executed?", + "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", + "answers": [ + "True", + "False" + ], + "question": "When declaring a variable, you are required to also initialize it with a value within the same declaration statement.", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter3e", + "questions": [ + { + "id": "question1", + "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 a switch statement?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question10", + "answers": [ + "if", + "if-else", + "if-else-if", + "nested ifs", + "switch" + ], + "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", + "correctAnswerIndex": 1 + }, + { + "id": "question11", + "question": "Which decision structure is used when there are more than two conditional paths and its condition only checks for equality?", + "type": "radio", + "answers": [ + "if", + "if-else", + "if-else-if", + "nested ifs", + "switch" + ], + "correctAnswerIndex": 4 + }, + { + "id": "question12", + "question": "Which decision structure can be used when you need to immediately check another condition if the first condition was met?", + "type": "radio", + "answers": [ + "if", + "if-else", + "if-else-if", + "nested ifs", + "switch" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "if", + "if-else", + "if-else-if", + "nested ifs" + ], + "question": "Which decision structure is interchangeable with the switch statement?", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "question": "Which type of expression does the condition of a switch statement evaluate?", + "type": "radio", + "answers": [ + "Any", + "None", + "Equality", + "Greater or less than" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "case", + "switch", + "if", + "break" + ], + "question": "Each path of a switch statement is denoted by the word _____", + "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", + "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" + ], + "question": "The purpose of the reserved word, break, is to ______", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question7", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question8", + "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?", + "type": "radio", + "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", + "answers": [ + "if(a = 5)", + "if(a == 5)", + "if(a.equals(5))", + "if(5 = a)" + ], + "question": "Which of these is an appropriate way to test if a equals 5?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "question": "Which is true of logical operators?", + "type": "radio", + "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" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + ">>", + "||", + "&&", + "==" + ], + "question": "Which of the following is the logical operator for AND", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question5", + "question": "Which of the following is the logical operator for OR", + "type": "radio", + "answers": [ + ">>", + "||", + "&&", + "==" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "answers": [ + "==", + "!=", + "!", + "&&" + ], + "question": "Which logical operator is used to negate a boolean expression?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question7", + "answers": [ + "True", + "False" + ], + "question": "What’s the value of (2>3 && 4<=4)?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question8", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "What’s the value of (9 != 0 || 5>5)?", + "correctAnswerIndex": 0 + }, + { + "id": "question9", + "answers": [ + "1", + "2", + "4", + "5" + ], + "question": "Considering short circuit logic, how many conditions will actually be evaluated in the expression (1>2 && 4<5)?", + "type": "radio", + "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", + "type": "radio", + "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 ______", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "question": "Constructors are required to have a return type.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "Constructor", + "MyConstructor", + "Trophy", + "constructor" + ], + "question": "If a class has a name of Trophy, which of the following is a valid constructor name", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "Product()", + "Product(double price)", + "Product(String sku)", + "Product" + ], + "question": "Which of the following is a default constructor?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "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" + ], + "question": "What is the purpose of a constructor?", + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "question": "What is the maximum number of constructors allowed within a class?", + "type": "radio", + "answers": [ + "0", + "1", + "3", + "There is no limit" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question7", + "question": "Which of the following is true about members of a class that have private access modifiers?", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question8", + "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" + ], + "question": "Methods that do not have an explicit access modifier can be accessed by ______.", + "correctAnswerIndex": 1 + }, + { + "id": "question9", + "answers": [ + "private", + "protected", + "public", + "open" + ], + "question": "For methods to be accessed from code outside of its package, it must have which access identifier?", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter6b", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "object", + "new", + "instatiate", + "start" + ], + "question": "Which reserved word is used to instantiate an object?", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + ".", + ">", + ";", + "[]" + ], + "question": "Which operator allows you to access an object's accessible methods?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "First method in the class", + "Last method in the class", + "A constructor of the class", + "Field of the class" + ], + "question": "Which of the following is called when instanting a new object?", + "type": "radio", + "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", + "question": "Only one instance of a class can exist at a given time.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "type": "radio", + "answers": [ + "Class", + "Method", + "Constructor", + "String" + ], + "question": "The data type of an object is a ______", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter6c", + "questions": [ + { + "id": "question1", + "answers": [ + "True", + "False" + ], + "question": "Methods can only return primitive data types", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "Yes", + "No" + ], + "question": "Is this a valid return statement for a method that specifies its return type as Object: `return new Object();`?", + "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", + "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" + ], + "question": "For a static method to be able to call a non-static method, it must do so by _______?", + "correctAnswerIndex": 0 + }, + { + "id": "question6", + "answers": [ + "True", + "False" + ], + "question": "Static global fields can be accessed by non-static methods of the same class.", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Every method within a class must have a unique name.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "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" + ], + "question": "Overloading is ___________", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "A data type", + "A variable which can hold multiple values", + "A class type", + "A constructor which takes multiple parameters" + ], + "question": "What is an array?", + "correctAnswerIndex": 1 + }, + { + "id": "question10", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question11", + "type": "radio", + "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?", + "correctAnswerIndex": 0 + }, + { + "id": "question12", + "type": "radio", + "answers": [ + "new", + "constant", + "final", + "static" + ], + "question": "Which keyword ensures a variable is indeed a constant?", + "correctAnswerIndex": 2 + }, + { + "id": "question13", + "answers": [ + "All lowercase", + "All uppercase", + "Camel case" + ], + "question": "By convention, how is a constant variable's name defined?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question14", + "answers": [ + "if statement", + "switch statment", + "loop" + ], + "question": "To access all elements of an array, which structure is best?", + "type": "radio", + "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", + "question": "What is an index in terms of arrays?", + "type": "radio", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question6", + "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" + ], + "question": "What does the number 3 represent in this statement: `myArray = new int[3];` ?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question7", + "question": "The indices of an array begin at the number 1.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question8", + "answers": [ + "2", + "4", + "6", + "cannot be determined from this statement" + ], + "question": "Given this statement: `myArray[2] = 4;`, how many elements can myArray store?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question9", + "type": "radio", + "answers": [ + "2", + "4", + "6", + "cannot be determined from this statement" + ], + "question": "Given this statement: `myArray[2] = 4;`, what is the value of the third element of the array?", + "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", + "answers": [ + "Single line comment", + "Multi-line comment", + "Javadoc", + "Handwritten manual" + ], + "question": "What type of comment describes information about a method and its parameters and return type?", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter7c", + "questions": [ + { + "id": "question1", + "answers": [ + "myArray.size", + "myArray.length", + "myArray.elements", + "myArray.values" + ], + "question": "Which of the following returns the number of elements allocated for array \"myArray\"?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "Arrays can only hold integers", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "question": "In this multidimensional array: myArray[10][5], what does the number 10 represent?", + "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" + ], + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter9a", + "questions": [ + { + "id": "question1", + "answers": [ + "inherits", + "subclass", + "superclass", + "extends" + ], + "question": "Which is the reserved word used to inherit from a class?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "A", + "B", + "Neither", + "This is not enough information to determine" + ], + "question": "In the declaration `class A extends B`, which class is the superclass?", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "A subclass can only contain what it inherited.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "To reuse code", + "To hide code", + "To manipulate code", + "To get rich" + ], + "question": "What is the purpose of inheritance between classes?", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "answers": [ + "Subclass", + "Superclass", + "Both the subclass and the superclass", + "Neither the subclass nor the superclass" + ], + "question": "An inheritance relationship is created in the _______.", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter9b", + "questions": [ + { + "id": "question1", + "answers": [ + "Car()", + "Vehicle()", + "Neither because no constructors were defined" + ], + "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", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "A subclass's default constructor can only access the default constructor of its superclass.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "Vegetable()", + "Vegetable(String name)", + "Food()", + "Food(String name)" + ], + "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", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "An explicit call to a superclass's constructor must be the very first line of the calling constructor.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "type": "radio", + "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?", + "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", + "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" + ], + "question": "To override an inherited method, which of the following must be done?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Using the @Override annotation is required to override an inherited method.", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "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" + ], + "question": "What is the purpose of the @Override annotation?", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "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" + ], + "question": "How does overloading differ with and without inheritance?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter9d", + "questions": [ + { + "id": "question1", + "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?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "question": "If a class does not want any of its subclasses to override an inherited member, it can declare that member as ______.", + "type": "radio", + "answers": [ + "public", + "private", + "protected", + "final" + ], + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "All classes in Java, whether provided by the language or created by you, inherit from the Object class.", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Classes that inherit from the same superclass are siblings and have a special relationship.", + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Classes can explicitly list multiple classes to inherit from within their header.", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter10", + "questions": [ + { + "id": "question1", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "type": "radio", + "answers": [ + "Yes", + "No" + ], + "question": "Given that class Car inherits from class Vehicle, is this a valid statement: `Vehicle car = new Car();`?", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "Yes", + "No" + ], + "question": "Given that class Car inherits from class Vehicle, is this a valid statement: `Car car = new Vehicle();`?", + "type": "radio", + "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", + "answers": [ + "To access class members from the other type", + "To create a new instance of the object", + "To star in a movie" + ], + "question": "What is the purpose of casting an object to another type?", + "type": "radio", + "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", + "question": "Abstract methods do not have a body.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Abstract classes are designed to be run as-is", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + "Access modifier", + "Non-access modifier", + "Return type", + "Data type" + ], + "question": "The reserved word `abstract` is a(n) ______", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Abstract classes can only contain abstract methods.", + "type": "radio", + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "Interfaces are required to declare its methods as abstract.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "public int size;", + "abstract public int size;", + "protected int size;", + "int size = 0;" + ], + "question": "Which is a valid declaration of a field within an interface?", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Interfaces can be instantiated.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "answers": [ + "final", + "private", + "default", + "abstract" + ], + "question": "Within an interface, methods that contain a body must be declared as __________", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question7", + "question": "How does a class specify that it will implement multiple interfaces?", + "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" + ], + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Values within a Map are required to be unique.", + "correctAnswerIndex": 1 + }, + { + "id": "question11", + "type": "radio", + "answers": [ + "An error occurs", + "The duplicate element is ignored", + "The duplicate element overrides the original element" + ], + "question": "What happens when we attempt to add a duplicate key to a Map using `put()`?", + "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", + "type": "radio", + "answers": [ + "Set", + "List", + "Queue", + "Map" + ], + "question": "Which of the following data structures typically processes its entries using the First In - First Out algorithm?", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "Set", + "List", + "Queue", + "Map" + ], + "question": "Which of the following data structures holds key/value pairs?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "Set", + "List", + "Queue", + "Map" + ], + "question": "Which of the following data structure's elements can be accessed directly by their position?", + "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", + "answers": [ + "get", + "top", + "first", + "peek" + ], + "question": "Which method returns the first element of a Queue?", + "type": "radio", + "correctAnswerIndex": 3 + } + ] + }, + { + "chapterId": "chapter12b", + "questions": [ + { + "id": "question1", + "answers": [ + "Set", + "List", + "Queue", + "Map" + ], + "question": "Which of the following data structures does NOT have an `iterator()` method?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "question": "Which method of Iterator lets you know if there are more elements to iterate over?", + "type": "radio", + "answers": [ + "next()", + "hasNext()", + "more()", + "iterate()" + ], + "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", + "question": "Which operator is used to declare the data type of the elements within a collection/map?", + "type": "radio", + "answers": [ + ".", + "+", + "&&", + "<>" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question6", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Maps are able to hold entries with primitive data types as their key and value.", + "correctAnswerIndex": 1 + }, + { + "id": "question7", + "answers": [ + "lambda expression", + "iterator", + "i counter", + "empty parameter list" + ], + "question": "The forEach() method takes which of the following?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter13a", + "questions": [ + { + "id": "question1", + "question": "What type of structure is used to handle exceptions?", + "type": "radio", + "answers": [ + "if/else", + "switch", + "for loop", + "try/catch" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question12", + "answers": [ + "True", + "False" + ], + "question": "A finally block is executed only when the catch block is executed.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "try", + "catch", + "anywhere in the method", + "at the top of the class" + ], + "question": "Statements that could possibly throw an exception go inside of which block?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "A catch block follows a try block.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "To handle an exception, you must specify which exceptions you are handling.", + "correctAnswerIndex": 0 + }, + { + "id": "question6", + "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" + ], + "question": "When is the code inside of a catch block executed?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question7", + "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" + ], + "question": "What is a stack trace?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question8", + "answers": [ + "True", + "False" + ], + "question": "There can only be one catch block associated with a single try block.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question9", + "answers": [ + ",", + ":", + "|", + "/" + ], + "question": "Which symbol is used to list multiple exceptions within one catch block?", + "type": "radio", + "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", + "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" + ], + "question": "How do you rethrow an exception?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "question": "How do you throw an exception from your method?", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "You can define your own exception classes.", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter14", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Java can be used for test automation.", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Inheritance can be used in test automation projects.", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Collections can be used in test automation projects.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "answers": [ + "True", + "False" + ], + "question": "Decision structures can be used in test automation projects.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question6", + "answers": [ + "True", + "False" + ], + "question": "Loops can be used in test automation projects.", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter4", + "questions": [ + { + "id": "question1", + "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" + ], + "question": "What is the purpose of loops?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question10", + "answers": [ + "Initialization on sentinel", + "Loop Condition", + "Incrementer / Decrementer", + "Loop Name" + ], + "question": "Which of the following is NOT one of the statements required in a for loop’s definition?", + "type": "radio", + "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", + "answers": [ + "While", + "Do While", + "For", + "Ring Around the Rosie" + ], + "question": "Which loop should be used if you know the number of iterations it needs to execute?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question6", + "question": "Which loop is best to use if the contents definitely need to be executed at least once?", + "type": "radio", + "answers": [ + "While", + "Do While", + "For", + "Singleton" + ], + "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", + "answers": [ + "header", + "opening", + "definition", + "body" + ], + "question": "The first line of a method is called a _______", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question10", + "answers": [ + "1", + "2", + "3", + "Unlimited" + ], + "question": "How many values can a method return?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "A calling method’s argument list must be in the exact same order as the receiving method’s parameter list.", + "correctAnswerIndex": 0 + }, + { + "id": "question13", + "question": "Arguments and their corresponding parameters must have the exact same name.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question14", + "answers": [ + "method", + "global", + "local", + "conditional" + ], + "question": "Variables declared at the class level are also known as _____ variables.", + "type": "radio", + "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", + "answers": [ + "name", + "return type", + "access modifier", + "parentheses" + ], + "question": "Which of the following is NOT a required part of a method declaration?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "question": "Which of these is NOT a part of a method’s signature?", + "type": "radio", + "answers": [ + "name", + "parameter list", + "non-access modifier" + ], + "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", + "answers": [ + "exit", + "break", + "return", + "close" + ], + "question": "Which is the reserved word to end a method and send back a value to the caller?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question7", + "question": "What type of data will a method with the `void` return type return?", + "type": "radio", + "answers": [ + "String", + "int", + "boolean", + "none" + ], + "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", + "answers": [ + "public", + "static", + "String", + "main" + ], + "question": "Which of these would be a valid return type?", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Strings are immutable", + "type": "radio", + "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", + "question": "How many primitive data types are available in Java?", + "type": "radio", + "answers": [ + "4", + "5", + "1", + "8" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "answers": [ + "int", + "char", + "boolean", + "String" + ], + "question": "Which of the following is NOT a primitive data type?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "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?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "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" + ], + "question": "How does Java know the actual data type of a variable declared with `var`?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "question": "What is a wrapper class?", + "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" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question7", + "answers": [ + "True", + "False" + ], + "question": "A String is equivalent to an array of characters.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question8", + "answers": [ + "T", + "A", + "U", + "TAU" + ], + "question": "Given `String name = \"TAU\";`, what does `name.charAt(1);` return?", + "type": "radio", + "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", + "level": "beginner", + "abstract": "Learn to automate web applications from within the browser itself", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "06/21/2019", + "chaptersCount": 13, + "status": "live", + "credits": 1300, + "courseId": "course27", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Automating in the Browser Using JavaScript", + "titleSlug": "automating-in-the-browser-using-javascript", + "teacher": { + "linkedIn": "", + "photoURL": "alan_richardson.png", + "profilePath": "alan_richardson", + "twitter": "eviltester", + "name": "Alan Richardson" + }, + "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", + "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" + ], + "question": "What is a Browser Based Test Automation Bot?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "answers": [ + "HTML", + "CSS", + "JavaScript", + "All of the above" + ], + "question": "Which of the following do we need to learn to fully automate applications from within the browser?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "question": "What is a bookmarklet?", + "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" + ], + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "answers": [ + "write some Javascript", + "read CSS", + "use the browser dev tools", + "all of the above" + ], + "question": "Which of the following do we have to learn to automate an application?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "question": "Where does the TodoMVC application store its data?", + "type": "radio", + "answers": [ + "in the cookies", + "on a server", + "in the local storage", + "in the cloud" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "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" + ], + "question": "What is a single page application?", + "type": "radio", + "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", + "answers": [ + "Delivery Objective Mechanism", + "Document Object Model", + "Documents Observation Map", + "Document Ordering Machine" + ], + "question": "What does DOM stand for?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question10", + "answers": [ + "name", + "class", + "type", + "id" + ], + "question": "getElementById returns a web element based on which attribute?", + "type": "radio", + "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", + "answers": [ + "by name", + "by id", + "by class name", + "all of the above" + ], + "question": "CSS Selectors allow us to select:", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question13", + "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\"" + ], + "question": "The CSS selector \".toggle-all\" finds items which:", + "correctAnswerIndex": 1 + }, + { + "id": "question14", + "question": "When we use Elements view and search using a CSS select but there is no match, what happens?", + "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" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question15", + "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\"" + ], + "question": "The CSS selector \"#todo-items\" finds items which:", + "type": "radio", + "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", + "answers": [ + "Mozilla Developer Network", + "Magazine Delivery Nation", + "Magic Dancing Ninja", + "Microsoft Dev Network" + ], + "question": "What does MDN stand for?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "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" + ], + "question": "What is a good way to start learning CSS locators?", + "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", + "question": "Which of the following statements is true?", + "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" + ], + "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", + "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" + ], + "question": "The Event Listeners tab in the developer tools show us:", + "type": "radio", + "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", + "question": "How do we learn the correct code to trigger specific events?", + "type": "radio", + "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" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question8", + "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:", + "type": "radio", + "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", + "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" + ], + "question": "When we have a variable called `counter`, what does `counter++` mean?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "question": "If we have an array called `listitems` what is the syntax for finding the 5th item in the array?", + "type": "radio", + "answers": [ + "listitems[2]", + "listitems[5]", + "listitems[4]", + "listitems(5)" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "listitems.size()", + "listitems.size", + "listitems.length", + "listitems.length()", + "listitems" + ], + "question": "If we have an array called `listitems`, how do we find the length of the array in JavaScript?", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter6", + "questions": [ + { + "id": "question1", + "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", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "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 (\"1\"==1) would", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "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", + "type": "radio", + "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", + "answers": [ + "Snippets", + "Audits", + "Whippets", + "JavaScripts" + ], + "question": "Chrome's inbuilt JavaScript editor is called:", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "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:", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "makes it easy to organise code", + "creates a readable abstraction layer for automating", + "can take parameters", + "all of the above" + ], + "question": "A function in JavaScript:", + "correctAnswerIndex": 3 + }, + { + "id": "question2", + "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:", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "answers": [ + "\"start \" & \"middle\" & \" end\"", + "\"start \" + \"middle\" + \" end\"", + "\"start \" . \"middle\" . \" end\"" + ], + "question": "I can join strings using what syntax?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "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)}" + ], + "question": "A function that takes a parameter has which of following syntax?", + "type": "radio", + "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", + "answers": [ + "very complicated and requires a lot of JavaScript knowledge", + "pretty simple once we realise it is copy paste with a few amendments" + ], + "question": "Converting a function to a public function on an object is:", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter9", + "questions": [ + { + "id": "question1", + "answers": [ + "localStorage.empty()", + "localStorage.clear()", + "console.clear(localStorage)" + ], + "question": "In order to clear the localstorage from the console we use the command:", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "never possible because it runs too fast", + "possible for some applications but not the todoMVC application", + "not possible because it is single threaded" + ], + "question": "Using a for loop to create test data is:", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "The following command waits 1000 milliseconds before running the `createTodo` code: setTimeout(autoTodo.createTodo(\"make jello\"),1000)", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "answers": [ + "True", + "False" + ], + "question": "The following command waits 1000 milliseconds before running the `createTodo` code: setTimeout(autoTodo.createTodo, 1000, \"make jello\")", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter10", + "questions": [ + { + "id": "question1", + "question": "If we create a `setInterval` and do not assign it to a variable we can stop it by:", + "type": "radio", + "answers": [ + "refreshing the browser page", + "running the code *.clearInterval()" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "type": "radio", + "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);", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "type": "radio", + "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:", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "type": "radio", + "answers": [ + "forever, until page is refreshed or it is cleared", + "a maximum of 100 times" + ], + "question": "A `setInterval` will run:", + "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", + "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" + ], + "question": "Which of the following is true for bookmarklets?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "prompt", + "alert", + "input" + ], + "question": "The JavaScript function for capturing input from the user is?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter12", + "questions": [ + { + "id": "question1", + "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" + ], + "question": "With JavaScript applications which of the following is true?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question10", + "type": "radio", + "answers": [ + "var theFunctions = [];", + "var theFunctions = {}", + "var theFunctions = ()" + ], + "question": "Which of the following creates an empty array in JavaScript?", + "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", + "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" + ], + "question": "Which of the following is true for the randoBot?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "question": "When a JavaScript application makes its objects private:", + "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" + ], + "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", + "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" + ], + "question": "Which of the following is true about JavaScript applications in the browser?", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "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" + ], + "question": "Which of the following is true?", + "correctAnswerIndex": 3 + }, + { + "id": "question6", + "answers": [ + "returns the largest integer less than or equal to a given number", + "creates a random number", + "returns a floating point number" + ], + "question": "The `Math.floor` function:", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question7", + "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:", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question8", + "type": "radio", + "answers": [ + "push", + "add", + "append" + ], + "question": "To add an item to an array in JavaScript we use which function?", + "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", + "answers": [ + "True", + "False" + ], + "question": "JavaScript skills will help us only if we are perfomance testing?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "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:", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "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:", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "JavaScript", + "HTML", + "CSS", + "All of the above" + ], + "question": "Useful topics to learn to help automate in the browser are:", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "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:", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + } + ] + }, + { + "id": "course28", + "chaptersCount": 9, + "status": "live", + "credits": 900, + "courseId": "course28", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Behavior Driven Python with pytest-bdd", + "titleSlug": "behavior-driven-python-with-pytest-bdd", + "teacher": { + "twitter": "AutomationPanda", + "name": "Andrew Knight", + "linkedIn": "", + "photoURL": "andrew_knight.jpg", + "profilePath": "andrew_knight" + }, + "level": "beginner", + "abstract": "Learn how to write behavior-driven tests in Python", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "07/10/2019", + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "question": "In software development, what is a behavior?", + "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" + ], + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Behavior-Driven Development should overhaul existing software development processes.", + "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", + "question": "How do Python BDD test frameworks run Gherkin scenarios?", + "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." + ], + "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", + "question": "What major advantage does pytest-bdd have over other Python BDD frameworks?", + "type": "radio", + "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" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "pytest and pytest-bdd are free and open source.", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "PyCharm Community Edition has support for pytest-bdd.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "AutomationPanda.com", + "pytest.org", + "“Python Testing with pytest” by Brian Okken", + "All the above" + ], + "question": "Where can you learn more about pytest on your own?", + "correctAnswerIndex": 3 + } + ] + }, + { + "chapterId": "chapter3", + "questions": [ + { + "id": "question1", + "answers": [ + "Given → Then → When", + "Given → When → Then", + "Arrange → Act → Assert", + "Scenario → Step → Sub-step" + ], + "question": "Using Gherkin, test cases are written in what format?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "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?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Even if you write test code in PyCharm Professional Edition, you will still need to run tests from the command line.", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter4", + "questions": [ + { + "id": "question1", + "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?", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Parameters in Gherkin steps must always be surrounded with double quotes.", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "I eat “eat:d” cucumbers", + "I eat 2 cucumbers", + "I eat cucumbers", + "I eat “5” cucumbers" + ], + "question": "Which of the following Gherkin steps would match this step text annotation: @when(parsers.parse('I eat “{eat:d}” cucumbers')) ", + "correctAnswerIndex": 3 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "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." + ], + "question": "What is the main benefit of using Scenario Outlines?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "An Examples table can have any number of rows or columns", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "One step definition function can have multiple step decorators.", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Scenario Outlines cannot be run together with regular Scenarios.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "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." + ], + "question": "How are step decorators for Scenario Outlines different from step decorators for ordinary steps?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question6", + "answers": [ + "1", + "3", + "5", + "15" + ], + "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", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter6", + "questions": [ + { + "id": "question1", + "type": "radio", + "answers": [ + "pyrest", + "requests", + "pyrequests", + "python-requests" + ], + "question": "What is the name of the most popular Python package for REST API requests? ", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "Given", + "When", + "Then", + "All the above" + ], + "question": "Which of the following step types can have step definition functions used as pytest fixtures?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "question": "BDD-style testing truly shines for unit tests.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "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" + ], + "question": "For what types of service call tests might it be better to use traditional pytest functions instead of feature files?", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter7", + "questions": [ + { + "id": "question1", + "answers": [ + "True", + "False" + ], + "question": "WebDriver is the de facto standard for automating Web browser interactions.", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "question": "Which Web browsers can Selenium WebDriver use?", + "type": "radio", + "answers": [ + "Firefox", + "Chrome", + "Internet Explorer", + "All the above, and more" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "type": "radio", + "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?", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "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." + ], + "question": "What makes step functions for Web steps different from other step functions?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "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)." + ], + "question": "What does a Background section in a feature file do?", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter8", + "questions": [ + { + "id": "question1", + "answers": [ + "On a Feature section", + "On a Scenario section", + "On a Scenario Outline section", + "All the above" + ], + "question": "Where in a feature file may tags be placed?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "search and upload", + "search or upload", + "@search or @upload", + "search, upload" + ], + "question": "What tag expression would filter all tests that have either “@search” or “@upload” tags?", + "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", + "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." + ], + "question": "What is the main purpose of conftest.py in a pytest-bdd project?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "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." + ], + "question": "What do pytest-bdd hooks do?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "question": "Which of the following is not a valid pytest-bdd hook?", + "type": "radio", + "answers": [ + "pytest_bdd_before_step", + "pytest_bdd_before_scenario", + "pytest_bdd_before_feature", + "pytest_bdd_step_error" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "question": "Any step function can be moved to conftest.py.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 0 + } + ] + } + ] + }, + { + "id": "course29", + "chaptersCount": 6, + "status": "live", + "credits": 600, + "courseId": "course29", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "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", + "abstract": "Learn how to use Mocha to execute your JavaScript tests", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "06/28/2019", + "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", + "answers": [ + "Java", + "C#", + "Python", + "JavaScript" + ], + "question": "Which of the below languages mocha support?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "answers": [ + "npm install mocha", + "-install mocha", + "mocha i -version", + "i mocha npm" + ], + "question": "What is the command to install mocha?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "question": "Where can you find node packages?", + "type": "radio", + "answers": [ + "npmjs.com", + "npm.java.com", + "npmcs.com", + "npm.python.com" + ], + "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", + "answers": [ + "True", + "False" + ], + "question": "The describe() function is used to group the tests", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "The it() function is used to describe the individual test case", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "10", + "2", + "3", + "4" + ], + "question": "How many arguments/parameters does the describe() and it() functions take?", + "type": "radio", + "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", + "question": "Hooks are built-in functions of Mocha.", + "type": "radio", + "answers": [ + "True", + "False" + ], + "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", + "answers": [ + "before(‘This is a before hook’);", + "before();", + "before(‘This is a before hook’, function(){});", + "beforeAll();" + ], + "question": "Which is the proper way to write a before hook?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "answers": [ + "1", + "2", + "3", + "4" + ], + "question": "How many types of Mocha Hooks are available?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question5", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Hooks must be present inside the describe() block.", + "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", + "answers": [ + "pending", + "inclusive", + "exclusive", + "none of the above" + ], + "question": "Skipped tests are marked as _______", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Pending tests will be included in the test results and marked as pending.", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "answers": [ + "rerun failed tests a certain number of times", + "rerun all tests", + "rerun a specific test suite", + "rerun one it function" + ], + "question": "The retry function is used to _____", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Test-level timeouts are used within test cases", + "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", + "question": "Which is the command to execute the Dot Reporter?", + "type": "radio", + "answers": [ + "mocha test/ --reporter dot", + "reporter test dot", + "test reporter dot", + "--reporter dot" + ], + "correctAnswerIndex": 0 + } + ] + } + ] + }, + { + "id": "course3", + "chaptersCount": 5, + "status": "live", + "credits": 500, + "courseId": "course3", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "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", + "abstract": "Learn performance and load testing for websites, mobile, and back-end services", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "05/06/2019", + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "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" + ], + "question": "Which statement is NOT true?", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "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?", + "type": "radio", + "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", + "answers": [ + "Host configuration", + "The number of client requests", + "Data caching", + "All of the above" + ], + "question": "Which factors can impact server performance?", + "type": "radio", + "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", + "answers": [ + "Frames per second", + "Request response time", + "Time spent running scripts", + "All of the above" + ], + "question": "Which performance property can you profile with Chrome Developer Tools?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "Chrome Dev Tools can emulate a 3G network on your laptop", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "By corrupting assets", + "By clearing cache", + "By increasing the total number of network calls", + "By causing a scripting loop" + ], + "question": "How do redirects cause issues for web page performance?", + "type": "radio", + "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", + "question": "What has to be enabled on your Android device before profiling with Android Studio?", + "type": "radio", + "answers": [ + "Local Notifications", + "USB Debugging", + "Low power mode", + "Data roaming" + ], + "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", + "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?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "question": "What kinds of connections are supported by JMeter?", + "type": "radio", + "answers": [ + "HTTP", + "WebSockets", + "MongoDB", + "All of the above" + ], + "correctAnswerIndex": 3 + }, + { + "id": "question3", + "answers": [ + "Python", + "Groovy", + "Perl", + "Scala" + ], + "question": "What scripting language is supported by JMeter?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "answers": [ + "Java", + "Python", + "Scala", + "Javascript" + ], + "question": "What programming language is the basis of the Gatling tool?", + "type": "radio", + "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", + "answers": [ + "The type of VM used", + "The physical location of the cloud", + "Auto-scaling parameters", + "All of the above" + ], + "question": "Which of these factors applies to testing applications deployed in the cloud?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question5", + "question": "What is coordinated omission?", + "type": "radio", + "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" + ], + "correctAnswerIndex": 0 + } + ] + } + ] + }, + { + "id": "course30", + "abstract": "Learn how to use Chai assertions for your JavaScript tests", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "06/28/2019", + "chaptersCount": 5, + "status": "live", + "credits": 500, + "courseId": "course30", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "Introduction to Chai Assertions", + "titleSlug": "chai-test-assertions", + "teacher": { + "linkedIn": "", + "photoURL": "aparna_gopalakrishnan.png", + "profilePath": "aparna_gopalakrishnan", + "twitter": "aparna2019", + "name": "Aparna Gopalakrishnan" + }, + "level": "beginner", + "chapters": [ + { + "chapterId": "chapter1", + "questions": [ + { + "id": "question1", + "question": "What is Chai?", + "type": "radio", + "answers": [ + "An assertion library", + "An automation framework", + "None of the above" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "Assertions are used to make sure the actual results and expected results are same?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "Assertions are used only in functional test automation.", + "type": "radio", + "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", + "answers": [ + "True", + "False" + ], + "question": "Chai has both TDD and BDD assertion styles.", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "NodeJS must be installed on the machine before installing ChaiJs", + "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", + "question": "Npm install chai -save-dev will add chai to package.json file", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter3", + "questions": [ + { + "id": "question1", + "question": "Assert is a TDD assertion style", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question10", + "answers": [ + "True", + "False" + ], + "question": "Should supports Internet Explorer browser", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question11", + "question": "Should works by extending object.prototype", + "type": "radio", + "answers": [ + "True", + "False" + ], + "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", + "answers": [ + "True", + "False" + ], + "question": "Given `error` is null, what is the result of this expression: should.not.exist(error)", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question14", + "type": "radio", + "answers": [ + "0", + "1", + "40", + "No default value" + ], + "question": "Which is chai.config.truncateThreshold’s default value", + "correctAnswerIndex": 2 + }, + { + "id": "question15", + "answers": [ + "True", + "False" + ], + "question": "chai.config.showDiff is true by default", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question16", + "answers": [ + "True", + "False" + ], + "question": "chai.config.includeStack is true by default", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "answers": [ + "True", + "False" + ], + "question": "Expect is the only BDD Style Chai has", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "type": "radio", + "answers": [ + "Assert and Expect", + "Assert and Should", + "Expect and Should", + "None of the above" + ], + "question": "Which are BDD style assertion styles?", + "correctAnswerIndex": 2 + }, + { + "id": "question4", + "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?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "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?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "answers": [ + "Equals", + "Equal", + "deep.equal", + "none of the above" + ], + "question": "What is chai’s assertion style to compare the contents of objects?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question7", + "type": "radio", + "answers": [ + "n.should.be.a(‘number’);", + "should(n).be.a.number;", + "should(n).be.a(‘number’)", + "none of the above" + ], + "question": "Given `let n = 10`, how can you check `n` is a number using should assertion style?", + "correctAnswerIndex": 0 + }, + { + "id": "question8", + "type": "radio", + "answers": [ + "True", + "False" + ], + "question": "There is no difference between Expect and Should assertion styles.", + "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", + "answers": [ + "This validates fruit is equal to ‘Apple’", + "This validates Apple is equal to fruit", + "None of above is true" + ], + "question": "What does this expression do: assert.equal(fruit, ‘Apple’); ?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "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’);", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "answers": [ + "True", + "False" + ], + "question": "Assertions cannot be centralized.", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "question": "It is not a good practice to centralize assertions", + "type": "radio", + "answers": [ + "True", + "False" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "True", + "False" + ], + "question": "Centralization of Assertion eliminates duplicate definitions", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question4", + "answers": [ + "True", + "False" + ], + "question": "Only Chai’s Assert styles can be centralized.", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + } + ] + }, + { + "id": "course31", + "abstract": "Learn how to automate your visual testing in C# with Applitools", + "sortOrder": 8, + "group": "visual_testing", + "releaseDate": "06/17/2019", + "chaptersCount": 8, + "status": "live", + "credits": 800, + "courseId": "course31", + "groupName": "Visual Testing", + "category": "Automated Visual Testing Courses", + "title": "Automated Visual Testing in C#", + "titleSlug": "automated-visual-testing-in-csharp", + "teacher": { + "profilePath": "nikolay_advolodkin", + "twitter": "Nikolay_A00", + "name": "Nikolay Advolodkin", + "linkedIn": "", + "photoURL": "nikolayAdvolodkin.png" + }, + "level": "beginner", + "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", + "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" + ], + "question": "Where can you get the API Key for your Applitools account?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "question": "What is one of the advantages of visual validation?", + "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" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "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" + ], + "question": "Why is visual validation a powerful technique?", + "type": "radio", + "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", + "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" + ], + "question": "How is a baseline in Applitools established?", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question2", + "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" + ], + "question": "The first time that you run a test with Applitools", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question3", + "answers": [ + "1", + "2", + "3", + "4" + ], + "question": "How many baselines exist for a single visual validation check?", + "type": "radio", + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter4", + "questions": [ + { + "id": "question1", + "answers": [ + "Open(IWebDriver driver, string appName, string testName, Size viewportSize);", + "Open();", + "Open(Size viewportSize);", + "Open(bool shouldScroll);" + ], + "question": "Which of these is a valid Applitools Open() method", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "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", + "type": "radio", + "correctAnswerIndex": 2 + } + ] + }, + { + "chapterId": "chapter5", + "questions": [ + { + "id": "question1", + "answers": [ + "Save()", + "Close()", + "Run()", + "Stop()" + ], + "question": "The method that you should call to make sure that Applitools saves your comparison", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question2", + "type": "radio", + "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", + "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", + "answers": [ + "failed", + "new", + "unresolved", + "incorrect" + ], + "question": "When a visual assertion doesn’t exist, what is the initial status of that test?", + "type": "radio", + "correctAnswerIndex": 1 + } + ] + }, + { + "chapterId": "chapter6", + "questions": [ + { + "id": "question1", + "answers": [ + "failed", + "new", + "unresolved", + "incorrect" + ], + "question": "When a visual assertion fails, what is the initial status of that test?", + "type": "radio", + "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", + "answers": [ + "Q", + "W", + "E", + "D" + ], + "question": "Which key allows you to check the differences of Baseline and Checkpoint?", + "type": "radio", + "correctAnswerIndex": 3 + }, + { + "id": "question4", + "question": "Which key allows you to toggle the differences between Baseline and Checkpoint?", + "type": "radio", + "answers": [ + "Q", + "T", + "E", + "D" + ], + "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", + "answers": [ + "Layout", + "Strict", + "Pixel", + "Exact" + ], + "question": "What is the match level that does a pixel to pixel comparison?", + "type": "radio", + "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", + "answers": [ + "Layout", + "Strict", + "Content", + "Exact" + ], + "question": "The default match level for using Applitools is", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question6", + "answers": [ + "Text", + "Language", + "Color", + "Bugs" + ], + "question": "The Content match level will ignore the following changes", + "type": "radio", + "correctAnswerIndex": 2 + }, + { + "id": "question7", + "type": "radio", + "answers": [ + "Eyes.MatchLevel = MatchLevel.Strict", + "Eyes.MatchLevel = ContentMatchLevel", + "Eyes.MatchLevel = MatchLevel.Content", + "Eyes.MatchLevel = Match.Content" + ], + "question": "Which of the following will set the match level to Content", + "correctAnswerIndex": 2 + }, + { + "id": "question8", + "answers": [ + "CheckWindow(string tag)", + "CheckWindow(Object image)", + "CheckWindow(int deviation)", + "CheckWindow(Eyes applitoolsEyes)" + ], + "question": "The CheckWindow() method has the following overload", + "type": "radio", + "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", + "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" + ], + "question": "The Batch Summary View is", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "Batch summary view", + "Batch details view", + "Batch steps view", + "Batch processing view" + ], + "question": "Which of these is NOT a view available in Applitools", + "type": "radio", + "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": "course33", + "teacher": { + "linkedIn": "", + "photoURL": "julia_pottinger.png", + "profilePath": "julia_pottinger", + "twitter": "ailuj876", + "name": "Julia Pottinger" + }, + "level": "beginner", + "abstract": "Learn how to automate tests using WebdriverIO and JavaScript", + "sortOrder": 8, + "group": "foundational_testing", + "releaseDate": "08/02/2019", + "chaptersCount": 6, + "status": "live", + "credits": 600, + "courseId": "course33", + "groupName": "Foundational Testing", + "category": "Foundational Test Automation Courses", + "title": "UI Automation with WebdriverIO", + "titleSlug": "webdriverio-tutorial", + "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", + "question": "Which file has the list of dependencies", + "type": "radio", + "answers": [ + "wdio.conf.js", + "test files", + "package.json", + "none of the above" + ], + "correctAnswerIndex": 2 + }, + { + "id": "question3", + "question": "Which file contains browser and base URL?", + "type": "radio", + "answers": [ + "wdio.conf.js", + "test files", + "package.json", + "none of the above" + ], + "correctAnswerIndex": 0 + } + ] + }, + { + "chapterId": "chapter2", + "questions": [ + { + "id": "question1", + "answers": [ + "isExisting", + "isDisplayed", + "isFocused", + "isEnabled" + ], + "question": "What command would you use to verify that an element exists in the DOM?", + "type": "radio", + "correctAnswerIndex": 0 + }, + { + "id": "question2", + "answers": [ + "Yes", + "No" + ], + "question": "Can an element exist but still return false after using the isDisplayed command?", + "type": "radio", + "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", + "type": "radio", + "answers": [ + "hover", + "moveTo", + "scrollIntoView", + "keys" + ], + "question": "What is the command that can be used to hover over an element?", + "correctAnswerIndex": 1 + }, + { + "id": "question3", + "answers": [ + "getText", + "getValue", + "getAttribute", + "getProperty" + ], + "question": "What is the command to get the text from an input field or text area?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question4", + "question": "What is the command to bring an element into view?", + "type": "radio", + "answers": [ + "scrollIntoView", + "moveTo", + "scroll", + "click" + ], + "correctAnswerIndex": 0 + }, + { + "id": "question5", + "answers": [ + "switchToFrame", + "moveTo", + "switchWindow", + "setWindow" + ], + "question": "What is the command to switch to a new tab/window?", + "type": "radio", + "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", + "answers": [ + "selectCheckbox", + "click", + "moveTo", + "isExisting" + ], + "question": "Which command would you use to select a checkbox?", + "type": "radio", + "correctAnswerIndex": 1 + }, + { + "id": "question8", + "question": "Which command would you use to get the text of an element?", + "type": "radio", + "answers": [ + "getValue", + "getText", + "isDisplayed", + "isFocused" + ], + "correctAnswerIndex": 1 + }, + { + "id": "question9", + "question": "The clearValue command is used to clear a