Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
11 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. from selenium.webdriver.common.keys import Keys
  5. from selenium import webdriver
  6. from selenium.webdriver.common.by import By
  7. from selenium.webdriver.support.ui import WebDriverWait
  8. from selenium.webdriver.support import expected_conditions as EC
  9. from selenium.common.exceptions import TimeoutException
  10. from urllib import unquote
  11. import time, frappe, subprocess
  12. host = "http://localhost:8888"
  13. pipe = None
  14. driver = None
  15. verbose = None
  16. host = None
  17. logged_in = False
  18. cur_route = False
  19. def start(_verbose=None):
  20. global driver, verbose
  21. verbose = _verbose
  22. start_test_server(verbose)
  23. driver = webdriver.PhantomJS()
  24. def start_test_server(verbose):
  25. global pipe
  26. pipe = subprocess.Popen(["frappe", "--serve", "--port", "8888"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  27. while not pipe.stderr.readline():
  28. time.sleep(0.5)
  29. if verbose:
  30. print "Test server started"
  31. def get(url):
  32. driver.get(url)
  33. def login(wait_for_id="#page-desktop"):
  34. global logged_in
  35. if logged_in:
  36. return
  37. get(host + "/login")
  38. wait("#login_email")
  39. set_input("#login_email", "Administrator")
  40. set_input("#login_password", "admin" + Keys.RETURN)
  41. wait(wait_for_id)
  42. logged_in = True
  43. def go_to_module(module_name, item=None):
  44. global cur_route
  45. # desktop
  46. find(".navbar-brand")[0].click()
  47. cur_route = None
  48. wait("#page-desktop")
  49. page = "Module/" + module_name
  50. m = find('#page-desktop [data-link="{0}"]'.format(page))
  51. if not m:
  52. page = "List/" + module_name
  53. m = find('#page-desktop [data-link="{0}"]'.format(page))
  54. if not m:
  55. raise Exception, "Module {0} not found".format(module_name)
  56. m[0].click()
  57. wait_for_page(page)
  58. if item:
  59. elem = find('[data-label="{0}"]'.format(item))[0]
  60. elem.click()
  61. page = unquote(elem.get_attribute("href").split("#", 1)[1])
  62. wait_for_page(page)
  63. def new_doc(module, doctype):
  64. go_to_module(module, doctype)
  65. find('.appframe-iconbar .icon-plus')[0].click()
  66. wait_for_page("Form/" + doctype)
  67. def add_child(fieldname):
  68. find('[data-fieldname="{0}"] .grid-add-row'.format(fieldname))[0].click()
  69. wait('[data-fieldname="{0}"] .form-grid'.format(fieldname))
  70. def find(selector, everywhere=False):
  71. if cur_route and not everywhere:
  72. selector = cur_route + " " + selector
  73. return driver.find_elements_by_css_selector(selector)
  74. def set_field(fieldname, value):
  75. set_input('input[data-fieldname="{0}"]'.format(fieldname), value + Keys.TAB)
  76. wait_for_ajax()
  77. time.sleep(0.5)
  78. def primary_action():
  79. find(".appframe-titlebar .btn-primary")[0].click()
  80. wait_for_ajax()
  81. def wait_for_ajax():
  82. wait('body[data-ajax-state="complete"]', True)
  83. def wait_for_page(name):
  84. global cur_route
  85. cur_route = None
  86. route = '[data-page-route="{0}"]'.format(name)
  87. elem = wait(route)
  88. wait_for_ajax()
  89. cur_route = route
  90. return elem
  91. def wait_for_state(state):
  92. return wait(cur_route + '[data-state="{0}"]'.format(state), True)
  93. def wait(selector, everywhere=False):
  94. if cur_route and not everywhere:
  95. selector = cur_route + " " + selector
  96. try:
  97. elem = WebDriverWait(driver, 10).until(
  98. EC.presence_of_element_located((By.CSS_SELECTOR, selector)))
  99. if verbose:
  100. print "found " + selector
  101. except TimeoutException:
  102. print "not found " + selector
  103. raise
  104. return elem
  105. def set_input(selector, text):
  106. elem = find(selector)[0]
  107. elem.clear()
  108. elem.send_keys(text)
  109. def close():
  110. global driver, pipe
  111. driver.quit()
  112. pipe.kill()
  113. driver = pipe = None