issue_details.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. from __future__ import absolute_import
  2. import json
  3. from .base import BasePage
  4. class IssueDetailsPage(BasePage):
  5. def __init__(self, browser, client):
  6. super(IssueDetailsPage, self).__init__(browser)
  7. self.client = client
  8. def visit_issue(self, org, groupid):
  9. self.dismiss_assistant()
  10. self.browser.get(u'/organizations/{}/issues/{}/'.format(org, groupid))
  11. self.wait_until_loaded()
  12. def api_issue_get(self, groupid):
  13. return self.client.get(u'/api/0/issues/{}/'.format(groupid))
  14. def go_to_subtab(self, name):
  15. tabs = self.browser.find_element_by_css_selector('.group-detail .nav-tabs')
  16. tabs.find_element_by_partial_link_text(name).click()
  17. self.browser.wait_until_not('.loading-indicator')
  18. def open_issue_errors(self):
  19. self.browser.click('.errors-toggle')
  20. self.browser.wait_until('.entries > .errors ul')
  21. def open_curl(self):
  22. self.browser.find_element_by_xpath("//a//code[contains(text(), 'curl')]").click()
  23. def resolve_issue(self):
  24. self.browser.click('[data-test-id="action-link-resolve"]')
  25. # Resolve should become unresolve
  26. self.browser.wait_until('[data-test-id="button-unresolve"]')
  27. def ignore_issue(self):
  28. self.browser.click('[data-test-id="action-link-ignore"]')
  29. # Ignore should become unresolve
  30. self.browser.wait_until('[data-test-id="button-unresolve"]')
  31. def bookmark_issue(self):
  32. self.browser.click('.group-bookmark')
  33. self.browser.wait_until('.group-bookmark.active')
  34. def assign_to(self, user):
  35. assignee = self.browser.find_element_by_css_selector('.assigned-to')
  36. # Open the assignee picker
  37. assignee.find_element_by_css_selector('[role="button"]').click()
  38. assignee.find_element_by_tag_name('input').send_keys(user)
  39. # Click the member/team
  40. options = assignee.find_elements_by_css_selector('[data-test-id="assignee-option"]')
  41. assert len(options) > 0, 'No assignees could be found.'
  42. options[0].click()
  43. self.browser.wait_until_not('.loading-indicator')
  44. def find_comment_form(self):
  45. return self.browser.find_element_by_css_selector('[data-test-id="note-input-form"]')
  46. def has_comment(self, text):
  47. element = self.browser.element('[data-test-id="activity-note-body"]')
  48. return text in element.text
  49. def dismiss_assistant(self):
  50. res = self.client.put(
  51. '/api/0/assistant/',
  52. content_type='application/json',
  53. data=json.dumps({'guide_id': 1, 'status': 'viewed', 'useful': True}))
  54. assert res.status_code == 201
  55. res = self.client.put(
  56. '/api/0/assistant/',
  57. content_type='application/json',
  58. data=json.dumps({'guide_id': 3, 'status': 'viewed', 'useful': True}))
  59. assert res.status_code == 201
  60. def wait_until_loaded(self):
  61. self.browser.wait_until_not('.loading-indicator')
  62. self.browser.wait_until('.entries')
  63. self.browser.wait_until_test_id('linked-issues')
  64. self.browser.wait_until_test_id('loaded-device-name')