diff --git a/e2e/crud/crud.spec.js b/e2e/crud/crud.spec.js
new file mode 100644
index 0000000..f3660b4
--- /dev/null
+++ b/e2e/crud/crud.spec.js
@@ -0,0 +1,51 @@
+const user = require('../test_helpers/user');
+const page = require('./crud.po');
+const config = require('../test_helpers/config');
+
+describe('XOS CRUD Page', function() {
+
+  beforeEach((done) => {
+    user.login()
+      .then(() => {
+        done();
+      });
+  });
+
+  describe('list view', () => {
+    beforeEach(() => {
+      browser.get(`${config.url}/core/nodes/`);
+    });
+    it('should have a table', () => {
+      expect(page.tableRows.count()).toBe(2);
+      expect(page.tableColumn.count()).toBe(5);
+      expect(page.deleteBtn.count()).toBe(1); // per row
+    });
+
+    it('should have an add button', () => {
+      expect(page.addBtn.isDisplayed()).toBeTruthy();
+      page.addBtn.click();
+      expect(browser.getCurrentUrl()).toBe(`${config.url}/core/nodes/add`);
+    });
+  });
+
+  describe('details view', () => {
+
+    describe('for an existing model', () => {
+      beforeEach(() => {
+        browser.get(`${config.url}/core/nodes/1`);
+      });
+      it('should have a form', () => {
+        expect(page.formInputs.count()).toBe(5);
+        expect(page.formBtn.isPresent()).toBeTruthy();
+      });
+
+      it('should save the model', () => {
+        page.nameField.clear().sendKeys('test');
+        page.formBtn.click();
+        expect(page.nameField.getAttribute('value')).toBe('test');
+        expect(page.successFeedback.isDisplayed()).toBeTruthy();
+        browser.sleep(3000)
+      });
+    })
+  });
+});
\ No newline at end of file
