Skip to content
This repository has been archived by the owner on Jan 26, 2021. It is now read-only.

Fix: Unable to locate element error #1065 #1126

Closed
wants to merge 21 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 78 additions & 13 deletions vms/administrator/tests/test_formFields.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,36 @@ def tearDownClass(cls):
cls.driver.quit()
super(FormFields, cls).tearDownClass()

def explicit_wait(self, xpath_value, time=10):
'''
Function for explicit wait of the selenium webdriver.
:param xpath_value: xpath value of element
:param time: time to wait until it loads,default 10.
'''
settings = self.settings
try:
WebDriverWait(self.driver, time).until(
EC.visibility_of(settings.element_by_xpath(
xpath_value)))
except Exception as e:
print(e.__class__)
print(e)

def check_event_form_values(self, event):
"""
Utility function to perform assertion for details of
events against the event list received as param.
:param event: Iterable consisting values for events.
"""
settings = self.settings
self.explicit_wait(xpath_value=settings.elements.CREATE_EVENT_NAME)
self.assertEqual(settings.get_event_name_value(), event['name'])
self.explicit_wait(xpath_value=settings.elements.CREATE_EVENT_START_DATE)
self.assertEqual(
settings.get_event_start_date_value(),
event['start_date']
)
self.explicit_wait(xpath_value=settings.elements.CREATE_EVENT_END_DATE)
self.assertEqual(settings.get_event_end_date_value(), event['end_date'])

def check_job_form_values(self, job):
Expand All @@ -87,12 +105,17 @@ def check_job_form_values(self, job):
:param job: Iterable consisting values for job.
"""
settings = self.settings
self.driver.implicitly_wait(8)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Put implicit wait time as a variable(instead of hardcoded time value).

Copy link
Author

@sanjibansg sanjibansg Sep 28, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shall I make a single global time variable to do the work for all the implicit waits? @satya7289

Copy link
Contributor

@satya7289 satya7289 Sep 29, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, Also squash multiples commit to a single commit by following the commit message guildlines.

self.explicit_wait(xpath_value=settings.elements.CREATE_JOB_NAME)
self.assertEqual(settings.get_job_name_value(), job['name'])
self.explicit_wait(xpath_value=settings.elements.CREATE_JOB_DESCRIPTION)
self.assertEqual(
settings.get_job_description_value(),
job['description']
)
self.explicit_wait(xpath_value=settings.elements.CREATE_JOB_START_DATE)
self.assertEqual(settings.get_job_start_date_value(), job['start_date'])
self.explicit_wait(xpath_value=settings.elements.CREATE_JOB_END_DATE)
self.assertEqual(settings.get_job_end_date_value(), job['end_date'])

def check_shift_form_values(self, shift):
Expand All @@ -102,12 +125,16 @@ def check_shift_form_values(self, shift):
:param shift: Iterable consisting values for shift.
"""
settings = self.settings
self.explicit_wait(xpath_value=settings.elements.CREATE_SHIFT_DATE)
self.assertEqual(settings.get_shift_date_value(), shift['date'])
self.explicit_wait(xpath_value=settings.elements.CREATE_SHIFT_START_TIME)
self.assertEqual(
settings.get_shift_start_time_value(),
shift['start_time']
)
self.explicit_wait(xpath_value=settings.elements.CREATE_SHIFT_END_TIME)
self.assertEqual(settings.get_shift_end_time_value(), shift['end_time'])
self.explicit_wait(xpath_value=settings.elements.CREATE_SHIFT_MAX_VOLUNTEER)
self.assertEqual(
settings.get_shift_max_volunteers(),
shift['max_volunteers']
Expand All @@ -129,7 +156,7 @@ def test_null_values_in_create_event(self):
for the non-nullable fields while creating a new event.
"""
self.settings.go_to_events_page()

self.driver.implicitly_wait(8)
event = {
'name': '',
'start_date': '',
Expand All @@ -144,17 +171,21 @@ def test_null_values_in_create_event(self):
# Checks:
# Event was not created
# Error messages appear

self.assertEqual(settings.remove_i18n(self.driver.current_url),
self.live_server_url + settings.create_event_page)
self.assertEqual(len(settings.get_help_blocks()), 5)
self.explicit_wait(xpath_value=settings.elements.EVENT_NAME_ERROR)
self.assertEqual(
settings.get_event_name_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.EVENT_START_DATE_ERROR)
self.assertEqual(
settings.get_event_start_date_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.EVENT_END_DATE_ERROR)
self.assertEqual(
settings.get_event_end_date_error(),
settings.FIELD_REQUIRED
Expand All @@ -175,13 +206,14 @@ def test_null_values_in_edit_event(self):
}
created_event = create_event_with_details(event)
self.settings.go_to_events_page()

self.driver.implicitly_wait(8)
settings = self.settings

settings.elements.EVENT_NAME
self.explicit_wait(xpath_value=settings.elements.EVENT_NAME)
# Check we are having correct event
self.assertEqual(settings.get_event_name(), created_event.name)
self.driver.implicitly_wait(8)
settings.go_to_edit_event_page()

edited_event = {
'name': '',
'start_date': '',
Expand All @@ -200,14 +232,17 @@ def test_null_values_in_edit_event(self):
self.live_server_url + settings.event_list_page
)
self.assertEqual(len(settings.get_help_blocks()), 3)
self.explicit_wait(xpath_value=settings.elements.EVENT_NAME_ERROR)
self.assertEqual(
settings.get_event_name_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.EVENT_START_DATE_ERROR)
self.assertEqual(
settings.get_event_start_date_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.EVENT_END_DATE_ERROR)
self.assertEqual(
settings.get_event_end_date_error(),
settings.FIELD_REQUIRED
Expand All @@ -232,7 +267,7 @@ def test_null_values_in_create_job(self):
self.settings.go_to_events_page()
settings = self.settings
settings.live_server_url = self.live_server_url

self.driver.implicitly_wait(8)
# Create Job of null values
job = {
'event': created_event.id,
Expand All @@ -253,12 +288,14 @@ def test_null_values_in_create_job(self):
self.live_server_url + settings.create_job_page
)
self.assertEqual(len(settings.get_help_blocks()), 3)

self.explicit_wait(xpath_value=settings.elements.JOB_NAME_ERROR)
self.assertEqual(settings.get_job_name_error(), settings.FIELD_REQUIRED)
self.explicit_wait(xpath_value=settings.elements.JOB_START_DATE_ERROR)
self.assertEqual(
settings.get_job_start_date_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.JOB_END_DATE_ERROR)
self.assertEqual(
settings.get_job_end_date_error(),
settings.FIELD_REQUIRED
Expand All @@ -281,7 +318,7 @@ def test_null_values_in_edit_job(self):
created_event = create_event_with_details(event)
self.settings.go_to_events_page()
settings = self.settings

self.driver.implicitly_wait(8)
# Create Job with not-null values
job = {
'event': created_event,
Expand All @@ -296,7 +333,6 @@ def test_null_values_in_edit_job(self):
settings.live_server_url = self.live_server_url
settings.navigate_to_job_list_view()
settings.go_to_edit_job_page()

# Edit job with null values
edit_job = {
'event': created_event.id,
Expand All @@ -306,7 +342,7 @@ def test_null_values_in_edit_job(self):
'description': ''
}
settings.fill_job_form(edit_job)

self.driver.implicitly_wait(8)
# Checks:
# Job not edited
# Error messages appear
Expand All @@ -315,11 +351,14 @@ def test_null_values_in_edit_job(self):
self.live_server_url + settings.job_list_page
)
self.assertEqual(len(settings.get_help_blocks()), 3)
self.explicit_wait(xpath_value=settings.elements.JOB_NAME_ERROR)
self.assertEqual(settings.get_job_name_error(), settings.FIELD_REQUIRED)
self.explicit_wait(xpath_value=settings.elements.JOB_START_DATE_ERROR)
self.assertEqual(
settings.get_job_start_date_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.JOB_END_DATE_ERROR)
self.assertEqual(
settings.get_job_end_date_error(),
settings.FIELD_REQUIRED
Expand All @@ -342,7 +381,7 @@ def test_null_values_in_create_shift(self):
created_event = create_event_with_details(event)
self.settings.go_to_events_page()
settings = self.settings

self.driver.implicitly_wait(8)
# Create Job with not-null values
job = {
'event': created_event,
Expand All @@ -354,6 +393,7 @@ def test_null_values_in_create_shift(self):
create_job_with_details(job)

settings.live_server_url = self.live_server_url
self.driver.implicitly_wait(8)
settings.navigate_to_shift_list_view()
settings.go_to_create_shift_page()

Expand All @@ -372,27 +412,32 @@ def test_null_values_in_create_shift(self):
# Shift not created
# Error messages appear
self.assertEqual(len(settings.get_help_blocks()), 6)

self.explicit_wait(xpath_value=settings.elements.SHIFT_DATE_ERROR)
self.assertEqual(
settings.get_shift_date_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.SHIFT_START_TIME_ERROR)
self.assertEqual(
settings.get_shift_start_time_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.SHIFT_END_TIME_ERROR)
self.assertEqual(
settings.get_shift_end_time_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.SHIFT_MAX_VOLUNTEER_ERROR)
self.assertEqual(
settings.get_shift_max_volunteer_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.SHIFT_ADDRESS_ERROR)
self.assertEqual(
settings.get_shift_address_error(),
settings.ENTER_VALID_VALUE
)
self.explicit_wait(xpath_value=settings.elements.SHIFT_VENUE_ERROR)
self.assertEqual(
settings.get_shift_venue_error(),
settings.ENTER_VALID_VALUE
Expand All @@ -415,7 +460,8 @@ def test_null_values_in_edit_shift(self):
created_event = create_event_with_details(event)
self.settings.go_to_events_page()
settings = self.settings

self.driver.implicitly_wait(8)

# Create Job with not-null values
job = {
'event': created_event,
Expand All @@ -437,6 +483,7 @@ def test_null_values_in_edit_shift(self):
'venue': 'shift-venue'
}
create_shift_with_details(shift)
self.driver.implicitly_wait(8)

settings.live_server_url = self.live_server_url
settings.navigate_to_shift_list_view()
Expand All @@ -456,19 +503,22 @@ def test_null_values_in_edit_shift(self):
# verify that shift was not edited and error messages appear as
# expected
self.assertEqual(len(settings.get_help_blocks()), 4)

self.explicit_wait(xpath_value=settings.elements.SHIFT_DATE_ERROR)
self.assertEqual(
settings.get_shift_date_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.SHIFT_START_TIME_ERROR)
self.assertEqual(
settings.get_shift_start_time_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.SHIFT_END_TIME_ERROR)
self.assertEqual(
settings.get_shift_end_time_error(),
settings.FIELD_REQUIRED
)
self.explicit_wait(xpath_value=settings.elements.SHIFT_MAX_VOLUNTEER_ERROR)
self.assertEqual(
settings.get_shift_max_volunteer_error(),
settings.FIELD_REQUIRED
Expand All @@ -481,6 +531,7 @@ def test_max_volunteer_field(self):
self.settings.go_to_events_page()
settings = self.settings
settings.live_server_url = self.live_server_url
self.driver.implicitly_wait(8)

event = {
'name': 'event-name',
Expand All @@ -499,6 +550,7 @@ def test_max_volunteer_field(self):
'description': ''
}
created_job = create_job_with_details(job)
self.driver.implicitly_wait(8)

settings.navigate_to_shift_list_view()
settings.go_to_create_shift_page()
Expand Down Expand Up @@ -548,6 +600,7 @@ def test_max_volunteer_field(self):
'venue': 'shift-venue'
}
create_shift_with_details(shift)
self.driver.implicitly_wait(8)

settings.navigate_to_shift_list_view()
settings.go_to_edit_shift_page()
Expand Down Expand Up @@ -575,6 +628,7 @@ def test_simplify_shift(self):
self.settings.go_to_events_page()
settings = self.settings
settings.live_server_url = self.live_server_url
self.driver.implicitly_wait(8)

event = {
'name': 'event-name',
Expand All @@ -592,14 +646,18 @@ def test_simplify_shift(self):
'end_date': '2050-05-28',
'description': ''
}
self.driver.implicitly_wait(8)
created_job = create_job_with_details(job)

settings.navigate_to_shift_list_view()
settings.go_to_create_shift_page()

# Check correctness of Job name and date.
self.explicit_wait(xpath_value=settings.elements.SHIFT_JOB)
self.assertEqual(settings.get_shift_job(), job['name'])
self.explicit_wait(xpath_value=settings.elements.SHIFT_JOB_START_DATE)
self.assertEqual(settings.get_shift_job_start_date(), 'May 24, 2050')
self.explicit_wait(xpath_value=settings.elements.SHIFT_JOB_END_DATE)
self.assertEqual(settings.get_shift_job_end_date(), 'May 28, 2050')

# Create shift and check job details in edit form
Expand All @@ -612,13 +670,17 @@ def test_simplify_shift(self):
'address': 'shift-address',
'venue': 'shift-venue'
}
self.driver.implicitly_wait(8)
create_shift_with_details(shift)
settings.navigate_to_shift_list_view()
settings.go_to_edit_shift_page()

# Check correctness of Job name and date.
self.explicit_wait(xpath_value=settings.elements.SHIFT_JOB)
self.assertEqual(settings.get_shift_job(), job['name'])
self.explicit_wait(xpath_value=settings.elements.SHIFT_JOB_START_DATE)
self.assertEqual(settings.get_shift_job_start_date(), 'May 24, 2050')
self.explicit_wait(xpath_value=settings.elements.SHIFT_JOB_END_DATE)
self.assertEqual(settings.get_shift_job_end_date(), 'May 28, 2050')

def test_simplify_job(self):
Expand All @@ -638,6 +700,7 @@ def test_simplify_job(self):
self.settings.go_to_events_page()
settings = self.settings
settings.live_server_url = self.live_server_url
self.driver.implicitly_wait(8)

# Create job and check event details in edit form
job = {
Expand All @@ -651,6 +714,8 @@ def test_simplify_job(self):

settings.navigate_to_job_list_view()
settings.go_to_edit_job_page()
self.driver.implicitly_wait(8)

element = self.driver.find_element_by_xpath(
'//div[2]//div[3]//div[1]//div[1]//option[1]'
)
Expand Down