Skip to content

Commit

Permalink
Fix selenium race conditions
Browse files Browse the repository at this point in the history
  • Loading branch information
aarranz committed Jul 13, 2018
1 parent 1598723 commit c07b6ac
Showing 1 changed file with 28 additions and 27 deletions.
55 changes: 28 additions & 27 deletions ckanext/privatedatasets/tests/test_selenium.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-

# Copyright (c) 2014 - 2017 CoNWeT Lab., Universidad Politécnica de Madrid
# Copyright (c) 2018 Future Internet Consulting and Development Solutions S.L.

# This file is part of CKAN Private Dataset Extension.

Expand All @@ -19,21 +20,22 @@

from __future__ import unicode_literals

import json
import os
import unittest
import re
from subprocess import Popen

import ckan.lib.search.index as search_index
import ckan.model as model
from parameterized import parameterized
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select, WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from subprocess import Popen

import ckan.lib.search.index as search_index
import ckan.model as model
import ckanext.privatedatasets.db as db
import json
import os
import unittest
import re
import requests


def get_dataset_url(dataset_name):
Expand All @@ -46,7 +48,6 @@ class TestSelenium(unittest.TestCase):
def setUpClass(cls):
env = os.environ.copy()
env['DEBUG'] = 'True'
env['OAUTHLIB_INSECURE_TRANSPORT'] = 'True'
cls._process = Popen(['paster', 'serve', 'test.ini'], env=env)

@classmethod
Expand Down Expand Up @@ -78,7 +79,6 @@ def setUp(self):
self.driver = webdriver.Firefox()
self.base_url = 'http://127.0.0.1:5000/'

self.driver.implicitly_wait(5)
self.driver.set_window_size(1024, 768)

def tearDown(self):
Expand All @@ -97,7 +97,7 @@ def register(self, username, fullname, mail, password):
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_link_text('Register').click()
driver.find_element_by_id('field-username').clear()
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "field-username"))).clear()
driver.find_element_by_id('field-username').send_keys(username)
driver.find_element_by_id('field-fullname').clear()
driver.find_element_by_id('field-fullname').send_keys(fullname)
Expand All @@ -118,7 +118,7 @@ def login(self, username, password):
)
login_btn.click()

driver.find_element_by_id('field-login').clear()
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "field-login"))).clear()
driver.find_element_by_id('field-login').send_keys(username)
driver.find_element_by_id('field-password').clear()
driver.find_element_by_id('field-password').send_keys(password)
Expand All @@ -128,17 +128,17 @@ def login(self, username, password):
def create_organization(self, name, description, users):
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_link_text('Organizations').click()
driver.find_element_by_link_text('Add Organization').click()
driver.find_element_by_id('field-name').clear()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Organizations'))).click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Add Organization'))).click()
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'field-name'))).clear()
driver.find_element_by_id('field-name').send_keys(name)
driver.find_element_by_id('field-description').clear()
driver.find_element_by_id('field-description').send_keys(description)
driver.find_element_by_name('save').click()

# Add users
driver.find_element_by_link_text('Manage').click()
driver.find_element_by_link_text('Members').click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Manage'))).click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Members'))).click()
for user in users:
driver.find_element_by_link_text('Add Member').click()
driver.find_element_by_id('username').send_keys(user)
Expand All @@ -147,7 +147,7 @@ def create_organization(self, name, description, users):
def fill_ds_general_info(self, name, description, tags, private, searchable, allowed_users, acquire_url):
# FIRST PAGE: Dataset properties
driver = self.driver
driver.find_element_by_id('field-title').clear()
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "field-title"))).clear()
driver.find_element_by_id('field-title').send_keys(name)
driver.find_element_by_id('field-notes').clear()
driver.find_element_by_id('field-notes').send_keys(description)
Expand All @@ -173,11 +173,13 @@ def fill_ds_general_info(self, name, description, tags, private, searchable, all
def create_ds(self, name, description, tags, private, searchable, allowed_users, acquire_url, resource_url, resource_name, resource_description, resource_format):
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_link_text('Datasets').click()
driver.find_element_by_link_text('Add Dataset').click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Datasets'))).click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Add Dataset'))).click()
self.fill_ds_general_info(name, description, tags, private, searchable, allowed_users, acquire_url)

# SECOND PAGE: Add Resources
WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, "field-name")))

try:
# The link button is only clicked if it's present
driver.find_element_by_link_text('Link').click()
Expand Down Expand Up @@ -337,14 +339,14 @@ def test_invalid_fields(self, allowed_users, acquire_url, expected_msg):
# Go the page to create the dataset
driver = self.driver
driver.get(self.base_url)
driver.find_element_by_link_text('Datasets').click()
driver.find_element_by_link_text('Add Dataset').click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Datasets'))).click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'Add Dataset'))).click()

# Fill the requested information
self.fill_ds_general_info(pkg_name, 'Example description', ['tag1'], True, True, allowed_users, acquire_url)

# Check the error message
msg_error = self.driver.find_element_by_xpath('//div[@id=\'content\']/div[3]/div/section/div/form/div/ul/li').text
msg_error = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.XPATH, '//div[@id=\'content\']/div[3]/div/section/div/form/div/ul/li'))).text
self.assertEquals(expected_msg, msg_error)

@parameterized.expand([
Expand All @@ -360,7 +362,7 @@ def test_dashboard_basic_links(self, link, expected_url):
# Enter the acquired dataset tab
driver = self.driver
driver.get(self.base_url + 'dashboard/acquired')
driver.find_element_by_link_text(link).click()
WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, link))).click()
self.assertEquals(self.base_url + 'dataset', self.base_url + expected_url)

@parameterized.expand([
Expand Down Expand Up @@ -496,6 +498,5 @@ def test_bug_16(self):
[], 'http://example.com', 'http://upm.es', 'UPM Main', 'Example Description', 'CSV')

self.modify_ds(url, pkg_name, description, tags, False, None, None, None)
expected_url = 'dataset/%s' % url
current_url = self.driver.current_url
self.assertIn(expected_url, current_url) # Maybe the current URL include some parameters
expected_url = self.base_url + ('dataset/%s' % url)
WebDriverWait(driver, 20).until(lambda driver: driver.current_url.startswith(expected_url))

0 comments on commit c07b6ac

Please sign in to comment.