1. Project Structure:
Create the following directory structure:
web_testing_project
|-- Gemfile
|-- Rakefile
|-- test
| |-- test_helper.rb
| |-- specs
| |-- spec_helper.rb
| |-- checkboxes_test.rb
| |-- disappearing_elements_test.rb
| |-- hovers_link_test.rb
|-- .gitignore
2. Gemfile:
# Gemfile
source 'https://rubygems.org'
gem 'selenium-webdriver'
gem 'minitest'
gem 'rake'
Run bundle install
in the terminal to install the required gems.
3. spec_helper.rb:
# spec_helper.rb
require 'selenium-webdriver'
require 'minitest/autorun'
require 'test/test_helper.rb'
class BaseTest < Minitest::Test
def setup
@driver = Selenium::WebDriver.for :chrome
@driver.navigate.to 'https://the-internet.herokuapp.com/'
end
def teardown
@driver.quit
end
end
4. checkboxes_test.rb:
# lib/tests/checkboxes_test.rb
require_relative '../spec_helper'
class CheckboxesTest < BaseTest
def test_toggle_checkboxes
checkboxes_link = @driver.find_element(link_text: 'Checkboxes')
checkboxes_link.click
checkboxes = @driver.find_elements(css: 'input[type="checkbox"]')
initial_states = checkboxes.map(&:selected?)
checkboxes.each(&:click)
final_states = checkboxes.map(&:selected?)
refute_equal initial_states, final_states, 'Checkbox states did not toggle'
end
end
5. disappearing_elements_test.rb:
# lib/tests/disappearing_elements_test.rb
require_relative '../spec_helper'
class DisappearingElementsTest < BaseTest
def test_disappearing_elements
disappearing_elements_link = @driver.find_element(link_text: 'Disappearing Elements')
disappearing_elements_link.click
initial_elements_count = @driver.find_elements(css: '.example li').count
loop do
@driver.navigate.refresh
break if @driver.find_elements(css: '.example li').count != initial_elements_count
end
final_elements_count = @driver.find_elements(css: '.example li').count
refute_equal initial_elements_count, final_elements_count, 'Element count did not change'
end
end
6. hovers_link_test.rb:
# lib/tests/hovers_link_test.rb
require_relative '../spec_helper'
class HoversLinkTest < BaseTest
def test_hover_text_not_empty
hovers_link = @driver.find_element(link_text: 'Hovers')
hovers_link.click
figures = @driver.find_elements(css: '.figure')
random_figure = figures.sample
@driver.action.move_to(random_figure).perform
hover_text = random_figure.find_element(css: '.figcaption').text
refute_empty hover_text, 'Hover text is empty'
end
end
7. test_helper.rb
# test/test_helper.rb
require 'minitest/autorun'
require 'minitest/reporters'
html_reporter = Minitest::Reporters::HtmlReporter.new
Minitest::Reporters.use! [html_reporter]
8. Rakefile:
# Rakefile
require 'rake/testtask'
task default: [:test]
Rake::TestTask.new do |webtesttask|
webtesttask.libs << 'test'
webtesttask.pattern = 'test/specs/**/*_test.rb'
webtesttask.verbose = true
webtesttask.warning = true
end
8. Run the Tests:
Execute rake
in the terminal to run all tests.
This project includes tests for the specified scenarios and utilizes Rake for automation. The tests are structured to cover the requested functionality on the provided homepage.
Note: First you have to run this code from the project root directory
bundle install