Skip to content
This repository has been archived by the owner on Aug 20, 2018. It is now read-only.

Commit

Permalink
Merge pull request #145 from sashakruglov/issue_120
Browse files Browse the repository at this point in the history
Issue 120
  • Loading branch information
bebef1987 committed Mar 5, 2014
2 parents 18c1b82 + 772dbbd commit 259cfbf
Show file tree
Hide file tree
Showing 3 changed files with 147 additions and 125 deletions.
153 changes: 80 additions & 73 deletions pages/run_tests_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,94 +14,101 @@ class MozTrapRunTestsPage(MozTrapBasePage):

_page_title = 'Run Tests'

_test_pass_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem[data-title="%(case_name)s"] .itembody .action-pass')
_test_is_passed_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem.passed[data-title="%(case_name)s"]')
_test_is_failed_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem.failed[data-title="%(case_name)s"]')
_test_is_invalid_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem.invalidated[data-title="%(case_name)s"]')
_test_summary_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem[data-title="%(case_name)s"] .itembody .item-summary')
_step_fail_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem[data-title="%(case_name)s"] .itembody .steps .stepitem[data-step-number="%(step_number)s"] .stepfail .stepfail-summary')
_step_fail_result_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem[data-title="%(case_name)s"] .itembody .steps .stepitem[data-step-number="%(step_number)s"] .stepfail .stepfail-content .fail-field textarea[name="comment"]')
_step_fail_submit_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem[data-title="%(case_name)s"] .itembody .steps .stepitem[data-step-number="%(step_number)s"] .stepfail .stepfail-content .form-actions .fail')
_test_invalid_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem[data-title="%(case_name)s"] .itembody .testinvalid .invalid-summary')
_test_invalid_desc_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem[data-title="%(case_name)s"] .itembody .testinvalid .invalid-form .invalid-input')
_test_invalid_submit_locator = (By.CSS_SELECTOR, '#runtests .itemlist .listitem[data-title="%(case_name)s"] .itembody .testinvalid .invalid-form .form-actions .invalid')

_test_item_locator = (By.CSS_SELECTOR, '.listitem')

def open_test_summary(self, case_name):
_open_test = (self._test_summary_locator[0], self._test_summary_locator[1] % {'case_name': case_name})
self.selenium.find_element(*_open_test).click()

def pass_test(self, case_name):
_pass_test_locator = (self._test_pass_locator[0], self._test_pass_locator[1] % {'case_name': case_name})

self.open_test_summary(case_name)
self.selenium.find_element(*_pass_test_locator).click()
self.wait_for_ajax()
_test_item_locator = (By.CSS_SELECTOR, '#runtests .listitem')

def fail_test(self, case_name, step_number=1):
_step_fail_locator = (self._step_fail_locator[0], self._step_fail_locator[1] % {'case_name': case_name, 'step_number': step_number})
_step_fail_result_locator = (self._step_fail_result_locator[0], self._step_fail_result_locator[1] % {'case_name': case_name, 'step_number': step_number})
_step_fail_submit_locator = (self._step_fail_submit_locator[0], self._step_fail_submit_locator[1] % {'case_name': case_name, 'step_number': step_number})
_step_fail_result = u'%(case_name)s step %(step_number)s failed' % {'step_number': step_number, 'case_name': case_name}
@property
def test_results(self):
return [TestResult(self.testsetup, web_el) for web_el
in self.selenium.find_elements(*self._test_item_locator)]

self.open_test_summary(case_name)
self.selenium.find_element(*_step_fail_locator).click()
self.type_in_element(_step_fail_result_locator, _step_fail_result)
self.selenium.find_element(*_step_fail_submit_locator).click()
self.wait_for_ajax()
def get_test_result(self, case_name):
for result in self.test_results:
if result.case_name.lower() == case_name.lower():
return result
raise Exception('Test case "%s" is not found in the results' % case_name)

def mark_test_invalid(self, case_name):
_test_invalid_locator = (self._test_invalid_locator[0], self._test_invalid_locator[1] % {'case_name': case_name})
_test_invalid_desc_locator = (self._test_invalid_desc_locator[0], self._test_invalid_desc_locator[1] % {'case_name': case_name})
_test_invalid_submit_locator = (self._test_invalid_submit_locator[0], self._test_invalid_submit_locator[1] % {'case_name': case_name})
_test_invalid_desc = u'%(case_name)s is invalid' % {'case_name': case_name}

self.open_test_summary(case_name)
self.selenium.find_element(*_test_invalid_locator).click()
self.type_in_element(_test_invalid_desc_locator, _test_invalid_desc)
self.selenium.find_element(*_test_invalid_submit_locator).click()
self.wait_for_ajax()
class TestResult(PageRegion):

def is_test_passed(self, case_name):
_test_is_passed_locator = (self._test_is_passed_locator[0], self._test_is_passed_locator[1] % {'case_name': case_name})
_case_result_locator = (By.CSS_SELECTOR, '.result')
_case_name_locator = (By.CSS_SELECTOR, '.title')
_suite_name_locator = (By.CSS_SELECTOR, '.filter-link.suite')
_case_position_number_locator = (By.CSS_SELECTOR, '.order')

return self.is_element_present(*_test_is_passed_locator)
_result_passed_locator = (By.CSS_SELECTOR, '.result.passed')
_result_failed_locator = (By.CSS_SELECTOR, '.result.failed')
_result_invalid_locator = (By.CSS_SELECTOR, '.result.invalidated')
_result_blocked_locator = (By.CSS_SELECTOR, '.result.blocked')

def is_test_failed(self, case_name):
_test_is_failed_locator = (self._test_is_failed_locator[0], self._test_is_failed_locator[1] % {'case_name': case_name})
_open_test_summary_locator = (By.CSS_SELECTOR, '.item-summary')
_pass_test_button_locator = (By.CSS_SELECTOR, '.action-pass')
_fail_test_button_locator = (By.CSS_SELECTOR, '.stepfail-summary')
_invalidate_test_button_locator = (By.CSS_SELECTOR, '.invalid-summary')
_block_test_button_locator = (By.CSS_SELECTOR, '.block-summary')

return self.is_element_present(*_test_is_failed_locator)
_failed_step_comment_locator = (By.CSS_SELECTOR, '.fail-field textarea[name="comment"]')
_failed_step_submit_locator = (By.CSS_SELECTOR, '.fail')
_invalid_test_comment_locator = (By.CSS_SELECTOR, '.invalid-input')
_invalid_test_submit_locator = (By.CSS_SELECTOR, '.invalid')
_blocked_test_comment_locator = (By.CSS_SELECTOR, '.block-input')
_blocked_test_submit_locator = (By.CSS_SELECTOR, '.block')

def is_test_invalid(self, case_name):
_test_is_invalid_locator = (self._test_is_invalid_locator[0], self._test_is_invalid_locator[1] % {'case_name': case_name})
@property
def case_name(self):
return self.find_element(*self._case_name_locator).text

return self.is_element_present(*_test_is_invalid_locator)
@property
def suite_name(self):
return self.find_element(*self._suite_name_locator).text

@property
def test_items(self):
return [self.TestItem(self.testsetup, web_el) for web_el
in self.selenium.find_elements(*self._test_item_locator)]
def position_number(self):
return self.find_element(*self._case_position_number_locator).text

class TestItem(PageRegion):
@property
def is_test_passed(self):
return self.is_element_present(*self._result_passed_locator)

_case_result_locator = (By.CSS_SELECTOR, '.result')
_case_name_locator = (By.CSS_SELECTOR, '.title')
_suite_name_locator = (By.CSS_SELECTOR, 'a[data-type="suite"]')
_case_position_number_locator = (By.CSS_SELECTOR, '.order')
@property
def is_test_failed(self):
return self.is_element_present(*self._result_failed_locator)

@property
def result(self):
return self.find_element(*self._case_result_locator).text
@property
def is_test_invalid(self):
return self.is_element_present(*self._result_invalid_locator)

@property
def name(self):
return self.find_element(*self._case_name_locator).text
@property
def is_blocked(self):
return self.is_element_present(*self._result_blocked_locator)

@property
def suite_name(self):
return self.find_element(*self._suite_name_locator).text
def open_test_summary(self):
self.find_element(*self._open_test_summary_locator).click()

@property
def position_number(self):
return self.find_element(*self._case_position_number_locator).text
def pass_test(self):
self.open_test_summary()
self.find_element(*self._pass_test_button_locator).click()
self.wait_for_ajax()

def fail_test(self):
self.open_test_summary()
self.find_element(*self._fail_test_button_locator).click()
self.type_in_element(self._failed_step_comment_locator,
u'Test case "%s" failed' % self.case_name)
self.find_element(*self._failed_step_submit_locator).click()
self.wait_for_ajax()

def invalidate_test(self):
self.open_test_summary()
self.selenium.find_element(*self._invalidate_test_button_locator).click()
self.type_in_element(self._invalid_test_comment_locator,
u'Test case "%s" is invalid' % self.case_name)
self.selenium.find_element(*self._invalid_test_submit_locator).click()
self.wait_for_ajax()

def mark_blocked(self):
self.open_test_summary()
self.selenium.find_element(*self._block_test_button_locator).click()
self.type_in_element(self._blocked_test_comment_locator,
u'Test case "%s" is blocked' % self.case_name)
self.selenium.find_element(*self._blocked_test_submit_locator).click()
self.wait_for_ajax()
37 changes: 37 additions & 0 deletions tests/test_manage_runs_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,40 @@ def test_that_user_can_create_and_delete_run(self, mozwebqa_logged_in, product):
manage_runs_pg.delete_run(name=run['name'])

Assert.false(manage_runs_pg.is_element_present(*run['manage_locator']))

@pytest.mark.moztrap(3302)
def test_for_edit_active_run_that_includes_suites_to_be_sure_they_are_listed(self, mozwebqa_logged_in, product):
#create version
version = product['version']
#create two test suites
suite_a = self.create_suite(mozwebqa_logged_in, product=product, use_API=True, name='suite A')
suite_b = self.create_suite(mozwebqa_logged_in, product=product, use_API=True, name='suite B')
#create test run
suite_order = [suite_b['name'], suite_a['name']]
test_run = self.create_run(
mozwebqa_logged_in, product=product,
version=version, suite_name_list=suite_order)

manage_runs_pg = MozTrapManageRunsPage(mozwebqa_logged_in)
manage_runs_pg.go_to_manage_runs_page()
manage_runs_pg.filter_form.filter_by(lookup='name', value=test_run['name'])
manage_runs_pg.activate_run(name=test_run['name'])
edit_run_pg = manage_runs_pg.go_to_edit_run_page(test_run['name'])

#assert that multiselect widget is not present thus suites list is readonly
Assert.false(
edit_run_pg.is_multiselect_widget_present,
u'multiselect widget should not be present')
#assert that order of suites is correct
Assert.equal(
suite_order, edit_run_pg.readonly_included_suites,
u'suites are listed in wrong order')

edit_run_pg.save_run()
test_run = manage_runs_pg.test_runs[0]
test_run.show_details()

#assert that order of suites is still correct
Assert.equal(
suite_order, test_run.included_suites,
u'suites are listed in wrong order')
82 changes: 30 additions & 52 deletions tests/test_run_tests_page.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,39 +17,42 @@ class TestRunTestsPage(BaseTest):

@pytest.mark.moztrap([205, 208])
def test_that_user_can_pass_test(self, mozwebqa_logged_in, product, element):
run_tests_pg = MozTrapRunTestsPage(mozwebqa_logged_in)

case = self.create_and_run_test(mozwebqa_logged_in, product, element)[0]

Assert.false(run_tests_pg.is_test_passed(case_name=case['name']))
run_tests_pg = MozTrapRunTestsPage(mozwebqa_logged_in)
result = run_tests_pg.get_test_result(case['name'])
Assert.false(result.is_test_passed)

run_tests_pg.pass_test(case_name=case['name'])
result.pass_test()

Assert.true(run_tests_pg.is_test_passed(case_name=case['name']))
result = run_tests_pg.get_test_result(case['name'])
Assert.true(result.is_test_passed)

@pytest.mark.moztrap(206)
def test_that_user_can_fail_test(self, mozwebqa_logged_in, product, element):
run_tests_pg = MozTrapRunTestsPage(mozwebqa_logged_in)

case = self.create_and_run_test(mozwebqa_logged_in, product, element)[0]

Assert.false(run_tests_pg.is_test_failed(case_name=case['name']))
run_tests_pg = MozTrapRunTestsPage(mozwebqa_logged_in)
result = run_tests_pg.get_test_result(case['name'])
Assert.false(result.is_test_failed)

run_tests_pg.fail_test(case_name=case['name'])
result.fail_test()

Assert.true(run_tests_pg.is_test_failed(case_name=case['name']))
result = run_tests_pg.get_test_result(case['name'])
Assert.true(result.is_test_failed)

@pytest.mark.moztrap(207)
def test_that_user_can_mark_test_invalid(self, mozwebqa_logged_in, product, element):
run_tests_pg = MozTrapRunTestsPage(mozwebqa_logged_in)

case = self.create_and_run_test(mozwebqa_logged_in, product, element)[0]

Assert.false(run_tests_pg.is_test_invalid(case_name=case['name']))
run_tests_pg = MozTrapRunTestsPage(mozwebqa_logged_in)
result = run_tests_pg.get_test_result(case['name'])
Assert.false(result.is_test_invalid)

run_tests_pg.mark_test_invalid(case_name=case['name'])
result.invalidate_test()

Assert.true(run_tests_pg.is_test_invalid(case_name=case['name']))
result = run_tests_pg.get_test_result(case['name'])
Assert.true(result.is_test_invalid)

@pytest.mark.moztrap(2744)
def test_that_test_run_saves_right_order_of_test_cases(self, mozwebqa_logged_in, product, element):
Expand Down Expand Up @@ -78,7 +81,7 @@ def test_that_test_run_saves_right_order_of_test_cases(self, mozwebqa_logged_in,
env_category_name=element['category']['name'], env_element_name=element['name'])

run_tests_pg = MozTrapRunTestsPage(mozwebqa_logged_in)
actual_order = [(item.name, item.suite_name) for item in run_tests_pg.test_items]
actual_order = [(item.case_name, item.suite_name) for item in run_tests_pg.test_results]

expected_order = [(case['name'], suite) for case in suite_a_cases for suite in (suite_a['name'],)] + \
[(case['name'], suite) for case in suite_b_cases for suite in (suite_b['name'],)]
Expand All @@ -101,46 +104,21 @@ def test_that_test_run_saves_right_order_of_test_cases(self, mozwebqa_logged_in,
product_name=product['name'], version_name=version['name'], run_name=first_run['name'],
env_category_name=element['category']['name'], env_element_name=element['name'])
#check actual order of items on run tests page
actual_order = [(item.name, item.suite_name) for item in run_tests_pg.test_items]
actual_order = [(item.case_name, item.suite_name) for item in run_tests_pg.test_results]

expected_order = [(case['name'], suite) for case in suite_b_cases for suite in (suite_b['name'],)] + \
[(case['name'], suite) for case in suite_a_cases for suite in (suite_a['name'],)]
#assert that right order saved
Assert.equal(actual_order, expected_order)

@pytest.mark.moztrap(3302)
def test_for_edit_active_run_that_includes_suites_to_be_sure_they_are_listed(self, mozwebqa_logged_in, product):
#create version
version = product['version']
#create two test suites
suite_a = self.create_suite(mozwebqa_logged_in, product=product, use_API=True, name='suite A')
suite_b = self.create_suite(mozwebqa_logged_in, product=product, use_API=True, name='suite B')
#create test run
suite_order = [suite_b['name'], suite_a['name']]
test_run = self.create_run(
mozwebqa_logged_in, product=product,
version=version, suite_name_list=suite_order)
def test_that_user_can_mark_test_as_blocked(self, mozwebqa_logged_in, product, element):
case = self.create_and_run_test(mozwebqa_logged_in, product, element)[0]

manage_runs_pg = MozTrapManageRunsPage(mozwebqa_logged_in)
manage_runs_pg.go_to_manage_runs_page()
manage_runs_pg.filter_form.filter_by(lookup='name', value=test_run['name'])
manage_runs_pg.activate_run(name=test_run['name'])
edit_run_pg = manage_runs_pg.go_to_edit_run_page(test_run['name'])

#assert that multiselect widget is not present thus suites list is readonly
Assert.false(
edit_run_pg.is_multiselect_widget_present,
u'multiselect widget should not be present')
#assert that order of suites is correct
Assert.equal(
suite_order, edit_run_pg.readonly_included_suites,
u'suites are listed in wrong order')

edit_run_pg.save_run()
test_run = manage_runs_pg.test_runs[0]
test_run.show_details()

#assert that order of suites is still correct
Assert.equal(
suite_order, test_run.included_suites,
u'suites are listed in wrong order')
run_tests_pg = MozTrapRunTestsPage(mozwebqa_logged_in)
test_result = run_tests_pg.get_test_result(case['name'])
Assert.false(test_result.is_blocked)

test_result.mark_blocked()

test_result = run_tests_pg.get_test_result(case['name'])
Assert.true(test_result.is_blocked)

0 comments on commit 259cfbf

Please sign in to comment.