aboutsummaryrefslogtreecommitdiff
path: root/selenium/test.py
diff options
context:
space:
mode:
authorMarcello Stanisci <marcello.stanisci@inria.fr>2016-04-27 13:54:35 +0200
committerMarcello Stanisci <marcello.stanisci@inria.fr>2016-04-27 13:54:35 +0200
commit320eac1675fd3c4b2de4d5dd404ecc413b9ea505 (patch)
treebee8962d2e5ebd7dec88ce0625df2de952fa1dff /selenium/test.py
parent90c67fc7178ad2219d37ae36d0a0b7c842de75fe (diff)
selenium test not in unittest
Diffstat (limited to 'selenium/test.py')
-rw-r--r--selenium/test.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/selenium/test.py b/selenium/test.py
new file mode 100644
index 000000000..8720c79d7
--- /dev/null
+++ b/selenium/test.py
@@ -0,0 +1,100 @@
+from selenium import webdriver
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support import expected_conditions as EC
+from selenium.webdriver.support.ui import WebDriverWait
+import time
+import logging
+
+logger = logging.getLogger(__name__)
+bank_url = 'http://127.0.0.1:9898'
+
+def client_setup():
+ """Return a dict containing the driver and the extension's id"""
+ co = webdriver.ChromeOptions()
+ co.add_argument("load-extension=/home/marcello/wallet-webex")
+ cap = webdriver.DesiredCapabilities.CHROME.copy()
+ cap['loggingPrefs'] = {'driver': 'INFO', 'browser': 'INFO'}
+ client = webdriver.Chrome(chrome_options=co, desired_capabilities=cap)
+ client.get('https://taler.net')
+ listener = """\
+ document.addEventListener('taler-id', function(evt){
+ var html = document.getElementsByTagName('html')[0];
+ html.setAttribute('data-taler-wallet-id', evt.detail.id);
+ });
+
+ var evt = new CustomEvent('taler-query-id');
+ document.dispatchEvent(evt);
+ """
+ client.execute_script(listener)
+ client.implicitly_wait(5)
+ html = client.find_element(By.TAG_NAME, "html")
+ return {'client': client, 'ext_id': html.get_attribute('data-taler-wallet-id')}
+
+
+def is_error(client):
+ """Return True in case of errors in the browser, False otherwise"""
+ for log_type in ['browser']:
+ for log in client.get_log(log_type):
+ if log['level'] is 'error':
+ print(log['level'] + ': ' + log['message'])
+ return True
+ return False
+
+
+def register(client):
+ """Register a new user to the bank delaying its execution until the
+ profile page is shown"""
+ client.get(bank_url + '/accounts/register')
+ client.find_element(By.TAG_NAME, "form")
+ register = """\
+ var form = document.getElementsByTagName('form')[0];
+ form.username.value = '%s';
+ form.password.value = 'test';
+ form.submit();
+ """ % str(int(time.time())) # need fresh username
+
+ client.execute_script(register)
+ # need implicit wait to be set up
+ button = client.find_element(By.ID, "select-exchange")
+ # when button is gotten, the browser is in the profile page
+ # so the function can return
+ if not is_error(client):
+ logger.info('correctly registered at bank')
+ else:
+ logger.error('User not registered at bank')
+
+
+def withdraw(client):
+ """Register and withdraw (1) KUDOS for a fresh user"""
+ register(client)
+ # trigger withdrawal button
+ button = client.find_element(By.ID, "select-exchange")
+ button.click()
+ location = client.execute_script("return document.location.href")
+ client.get(location)
+ # Confirm xchg
+ wait = WebDriverWait(client, 10)
+ button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[1]")))
+ # This click returns the captcha page (put wait?)
+ button.click()
+ answer = client.find_element(By.XPATH, "//input[@name='pin_0']")
+ question = client.find_element(By.XPATH, "//span[@class='captcha-question']/div")
+ questionTok = question.text.split()
+ op1 = int(questionTok[2])
+ op2 = int(questionTok[4])
+ res = {'+': op1 + op2, '-': op1 - op2, u'\u00d7': op1 * op2}
+ answer.send_keys(res[questionTok[3]])
+ form = client.find_element(By.TAG_NAME, "form")
+ form.submit()
+ # check outcome
+ msg_succ = client.find_element(By.CLASS_NAME, "informational-ok")
+ if not msg_succ:
+ logger.error('Error in withdrawing')
+ else: logger.info('Withdrawal successful')
+
+
+
+ret = client_setup()
+client = ret['client']
+withdraw(client)
+client.close()