@@ -6,10 +6,15 @@ python: | |||
services: | |||
- mysql | |||
before_install: | |||
- "export DISPLAY=:99.0" | |||
- "sh -e /etc/init.d/xvfb start" | |||
install: | |||
- sudo apt-get purge -y mysql-common | |||
- wget https://raw.githubusercontent.com/frappe/bench/master/install_scripts/setup_frappe.sh | |||
- sudo bash setup_frappe.sh --skip-setup-bench --mysql-root-password travis | |||
- sudo pip install --upgrade pip | |||
- sudo service redis-server start | |||
- rm $TRAVIS_BUILD_DIR/.git/shallow | |||
- cd ~/ && bench init frappe-bench --frappe-path $TRAVIS_BUILD_DIR | |||
@@ -23,7 +28,7 @@ script: | |||
- bench build-website | |||
- bench serve & | |||
- sleep 10 | |||
- bench --verbose run-tests | |||
- bench --verbose run-tests --driver Firefox | |||
before_script: | |||
- mysql -e 'create database test_frappe' | |||
@@ -85,20 +85,23 @@ frappe.views.moduleview.ModuleView = Class.extend({ | |||
.appendTo(this.page.main); | |||
$(this.sections[name]).find(".module-item").each(function(i, mi) { | |||
$(mi).on("click", function(event) { | |||
// if clicked on open notification! | |||
if (event.target.classList.contains("open-notification")) { | |||
var doctype = event.target.getAttribute("data-doctype"); | |||
frappe.route_options = frappe.boot.notification_info.conditions[doctype]; | |||
} | |||
var item = data.items[$(mi).attr("data-item-index")]; | |||
if(item.type==="help") { | |||
frappe.help.show_video(item.youtube_id); | |||
return false; | |||
} else { | |||
frappe.set_route(me.get_route(item)); | |||
} | |||
}); | |||
var item = data.items[$(mi).attr("data-item-index")]; | |||
$(mi) | |||
.attr("data-route", me.get_route(item).join("/")) | |||
.attr("data-label", item.name) | |||
.on("click", function(event) { | |||
// if clicked on open notification! | |||
if (event.target.classList.contains("open-notification")) { | |||
var doctype = event.target.getAttribute("data-doctype"); | |||
frappe.route_options = frappe.boot.notification_info.conditions[doctype]; | |||
} | |||
if(item.type==="help") { | |||
frappe.help.show_video(item.youtube_id); | |||
return false; | |||
} else { | |||
frappe.set_route(me.get_route(item)); | |||
} | |||
}); | |||
}); | |||
} | |||
@@ -9,15 +9,12 @@ selenium_tests = True | |||
class TestLogin(unittest.TestCase): | |||
def setUp(self): | |||
return | |||
sel.login() | |||
def test_login(self): | |||
return | |||
self.assertEquals(sel._driver.current_url, sel.get_localhost() + "/desk") | |||
def test_to_do(self): | |||
return # does not pass in travis ?? | |||
sel.go_to_module("ToDo") | |||
sel.primary_action() | |||
sel.wait_for_page("Form/ToDo") | |||
@@ -25,11 +22,3 @@ class TestLogin(unittest.TestCase): | |||
sel.primary_action() | |||
self.assertTrue(sel.wait_for_state("clean")) | |||
# def test_material_request(self): | |||
# sel.new_doc("Stock", "Material Request") | |||
# sel.add_child("items") | |||
# sel.set_field("item_code", "_Test Item") | |||
# sel.set_field("schedule_date", "10-10-2014") | |||
# sel.primary_action() | |||
# sel.wait_for_state("clean") | |||
@@ -59,7 +59,7 @@ def login(wait_for_id="#page-desktop"): | |||
get(get_localhost() + "/login") | |||
wait("#login_email") | |||
set_input("#login_email", "Administrator") | |||
set_input("#login_password", "admin" + Keys.RETURN) | |||
set_input("#login_password", "admin", key=Keys.RETURN) | |||
wait(wait_for_id) | |||
logged_in = True | |||
@@ -86,7 +86,7 @@ def go_to_module(module_name, item=None): | |||
if item: | |||
elem = find('[data-label="{0}"]'.format(item))[0] | |||
elem.click() | |||
page = unquote(elem.get_attribute("href").split("#", 1)[1]) | |||
page = elem.get_attribute("data-route") | |||
wait_for_page(page) | |||
def new_doc(module, doctype): | |||
@@ -98,13 +98,19 @@ def add_child(fieldname): | |||
find('[data-fieldname="{0}"] .grid-add-row'.format(fieldname))[0].click() | |||
wait('[data-fieldname="{0}"] .form-grid'.format(fieldname)) | |||
def done_add_child(fieldname): | |||
selector = '[data-fieldname="{0}"] .grid-row-open .btn-success'.format(fieldname) | |||
scroll_to(selector) | |||
wait_till_clickable(selector).click() | |||
def find(selector, everywhere=False): | |||
if cur_route and not everywhere: | |||
selector = cur_route + " " + selector | |||
return _driver.find_elements_by_css_selector(selector) | |||
def set_field(fieldname, value, fieldtype="input"): | |||
set_input('{0}[data-fieldname="{1}"]'.format(fieldtype, fieldname), value + Keys.TAB) | |||
selector = '{0}[data-fieldname="{1}"]'.format(fieldtype, fieldname) | |||
set_input(selector, value, key=Keys.TAB) | |||
wait_for_ajax() | |||
def set_select(fieldname, value): | |||
@@ -113,7 +119,9 @@ def set_select(fieldname, value): | |||
wait_for_ajax() | |||
def primary_action(): | |||
wait_till_visible(".page-actions .primary-action").click() | |||
selector = ".page-actions .primary-action" | |||
scroll_to(selector) | |||
wait_till_clickable(selector).click() | |||
wait_for_ajax() | |||
def wait_for_page(name): | |||
@@ -152,13 +160,22 @@ def wait(selector, everywhere=False): | |||
def get_wait(): | |||
return WebDriverWait(_driver, 20) | |||
def set_input(selector, text): | |||
def set_input(selector, text, key=None): | |||
elem = find(selector)[0] | |||
elem.clear() | |||
elem.send_keys(text) | |||
if key: | |||
time.sleep(1) | |||
elem.send_keys(key) | |||
if input_wait: | |||
time.sleep(input_wait) | |||
def scroll_to(selector): | |||
execute_script("frappe.ui.scroll('{0}')".format(selector)) | |||
def execute_script(js): | |||
_driver.execute_script(js) | |||
def close(): | |||
global _driver, pipe | |||
if _driver: | |||
@@ -6,5 +6,6 @@ | |||
"mail_login": "test@example.com", | |||
"mail_password": "test", | |||
"admin_password": "admin", | |||
"run_selenium_tests": 1 | |||
"run_selenium_tests": 1, | |||
"host_name": "http://localhost:8000" | |||
} |