test: Fix selenium tests.
This commit is contained in:
parent
05e6edd5df
commit
22cd3cf9f1
@ -6137,7 +6137,7 @@ class BasicSwap(BaseApp):
|
|||||||
|
|
||||||
if 'chart_api_key' in data:
|
if 'chart_api_key' in data:
|
||||||
new_value = data['chart_api_key']
|
new_value = data['chart_api_key']
|
||||||
ensure(isinstance(new_value, bool), 'New chart_api_key value not a string')
|
ensure(isinstance(new_value, str), 'New chart_api_key value not a string')
|
||||||
ensure(len(new_value) <= 128, 'New chart_api_key value too long')
|
ensure(len(new_value) <= 128, 'New chart_api_key value too long')
|
||||||
if all(c in string.hexdigits for c in new_value):
|
if all(c in string.hexdigits for c in new_value):
|
||||||
if settings_copy.get('chart_api_key', '') != new_value:
|
if settings_copy.get('chart_api_key', '') != new_value:
|
||||||
@ -6196,6 +6196,9 @@ class BasicSwap(BaseApp):
|
|||||||
remotedaemonurls.add(url.strip())
|
remotedaemonurls.add(url.strip())
|
||||||
|
|
||||||
if set(settings_cc.get('remote_daemon_urls', [])) != remotedaemonurls:
|
if set(settings_cc.get('remote_daemon_urls', [])) != remotedaemonurls:
|
||||||
|
if len(remotedaemonurls) == 0 and 'remote_daemon_urls' in settings_cc:
|
||||||
|
del settings_cc['remote_daemon_urls']
|
||||||
|
else:
|
||||||
settings_cc['remote_daemon_urls'] = list(remotedaemonurls)
|
settings_cc['remote_daemon_urls'] = list(remotedaemonurls)
|
||||||
settings_changed = True
|
settings_changed = True
|
||||||
suggest_reboot = True
|
suggest_reboot = True
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-1 p-1">
|
<div class="flex-1 p-1">
|
||||||
<h3 class="font-medium text-sm text-green-900">{{ m[1] }}</h3></div>
|
<h3 class="infomsg font-medium text-sm text-green-900">{{ m[1] }}</h3></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-auto p-2">
|
<div class="w-auto p-2">
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
<div class="text-sm font-medium text-center text-gray-500 border-b border-gray-200 dark:text-gray-400 dark:border-gray-700">
|
<div class="text-sm font-medium text-center text-gray-500 border-b border-gray-200 dark:text-gray-400 dark:border-gray-700">
|
||||||
<ul class="flex flex-wrap -mb-px" id="myTab" data-tabs-toggle="#settingstab" role="tablist">
|
<ul class="flex flex-wrap -mb-px" id="myTab" data-tabs-toggle="#settingstab" role="tablist">
|
||||||
<li class="mr-2" role="presentation">
|
<li class="mr-2" role="presentation">
|
||||||
<a class="inline-block p-4 border-b-2 border-transparent rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300" id="profile-tab" data-tabs-target="#coins" role="tab" aria-controls="coins" aria-selected={% if active_tab == 'default' %}"true"{% else %}"false"{% endif %}>Coins</a>
|
<a class="inline-block p-4 border-b-2 border-transparent rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300" id="coins-tab" data-tabs-target="#coins" role="tab" aria-controls="coins" aria-selected={% if active_tab == 'default' %}"true"{% else %}"false"{% endif %}>Coins</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="mr-2" role="presentation">
|
<li class="mr-2" role="presentation">
|
||||||
<a class="inline-block p-4 border-b-2 border-transparent rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300" id="general-tab" data-tabs-target="#general" role="tab" aria-controls="general" aria-selected={% if active_tab == 'general' %}"true"{% else %}"false"{% endif %}>General</a>
|
<a class="inline-block p-4 border-b-2 border-transparent rounded-t-lg hover:text-gray-600 hover:border-gray-300 dark:hover:text-gray-300" id="general-tab" data-tabs-target="#general" role="tab" aria-controls="general" aria-selected={% if active_tab == 'general' %}"true"{% else %}"false"{% endif %}>General</a>
|
||||||
|
@ -293,7 +293,7 @@ def main():
|
|||||||
received_offers = read_json_api(args.port, 'offers', {'active': 'active', 'include_sent': False, 'coin_from': coin_from_data['id'], 'coin_to': coin_to_data['id']})
|
received_offers = read_json_api(args.port, 'offers', {'active': 'active', 'include_sent': False, 'coin_from': coin_from_data['id'], 'coin_to': coin_to_data['id']})
|
||||||
print('received_offers', received_offers)
|
print('received_offers', received_offers)
|
||||||
|
|
||||||
TODO - adjust rates based on extisting offers
|
TODO - adjust rates based on existing offers
|
||||||
"""
|
"""
|
||||||
|
|
||||||
rates = read_json_api('rates', {'coin_from': coin_from_data['id'], 'coin_to': coin_to_data['id']})
|
rates = read_json_api('rates', {'coin_from': coin_from_data['id'], 'coin_to': coin_to_data['id']})
|
||||||
|
2
tests/basicswap/selenium/notes.txt
Normal file
2
tests/basicswap/selenium/notes.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
python tests/basicswap/extended/test_xmr_persistent.py
|
||||||
|
python tests/basicswap/selenium/test_wallets.py
|
@ -5,35 +5,22 @@
|
|||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
"""
|
|
||||||
cd /tmp
|
|
||||||
wget -4 https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip
|
|
||||||
7z x chromedriver_linux64.zip
|
|
||||||
sudo mv chromedriver /opt/chromedriver114
|
|
||||||
|
|
||||||
python tests/basicswap/extended/test_xmr_persistent.py
|
|
||||||
python tests/basicswap/selenium/test_offer.py
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
from selenium import webdriver
|
|
||||||
from selenium.webdriver.chrome.service import Service
|
|
||||||
from selenium.webdriver.common.by import By
|
from selenium.webdriver.common.by import By
|
||||||
from selenium.webdriver.support.ui import Select
|
from selenium.webdriver.support.ui import Select
|
||||||
from selenium.webdriver.support.wait import WebDriverWait
|
from selenium.webdriver.support.wait import WebDriverWait
|
||||||
from selenium.webdriver.support import expected_conditions as EC
|
from selenium.webdriver.support import expected_conditions as EC
|
||||||
|
|
||||||
|
from util import get_driver
|
||||||
|
|
||||||
def test_html():
|
|
||||||
|
def test_offer(driver):
|
||||||
node1_url = 'http://localhost:12701'
|
node1_url = 'http://localhost:12701'
|
||||||
node2_url = 'http://localhost:12702'
|
node2_url = 'http://localhost:12702'
|
||||||
|
|
||||||
driver = webdriver.Chrome(service=Service('/opt/chromedriver114'))
|
|
||||||
|
|
||||||
driver.get(node1_url + '/newoffer')
|
driver.get(node1_url + '/newoffer')
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
@ -99,10 +86,16 @@ def test_html():
|
|||||||
assert (offer4_json['coin_from'] == 'Particl')
|
assert (offer4_json['coin_from'] == 'Particl')
|
||||||
assert (offer4_json['coin_to'] == 'Monero')
|
assert (offer4_json['coin_to'] == 'Monero')
|
||||||
|
|
||||||
driver.close()
|
print('Test Passed!')
|
||||||
|
|
||||||
print('Done.')
|
|
||||||
|
def run_tests():
|
||||||
|
driver = get_driver()
|
||||||
|
try:
|
||||||
|
test_offer(driver)
|
||||||
|
finally:
|
||||||
|
driver.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_html()
|
run_tests()
|
||||||
|
@ -1,27 +1,25 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (c) 2022 tecnovert
|
# Copyright (c) 2022-2023 tecnovert
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from selenium import webdriver
|
|
||||||
from selenium.webdriver.common.by import By
|
from selenium.webdriver.common.by import By
|
||||||
from selenium.webdriver.chrome.service import Service
|
|
||||||
from selenium.webdriver.support.wait import WebDriverWait
|
from selenium.webdriver.support.wait import WebDriverWait
|
||||||
from selenium.webdriver.support.select import Select
|
from selenium.webdriver.support.select import Select
|
||||||
from selenium.webdriver.support import expected_conditions as EC
|
from selenium.webdriver.support import expected_conditions as EC
|
||||||
|
|
||||||
|
from util import get_driver
|
||||||
|
|
||||||
def test_html():
|
|
||||||
|
def test_settings(driver):
|
||||||
base_url = 'http://localhost:12701'
|
base_url = 'http://localhost:12701'
|
||||||
node2_url = 'http://localhost:12702'
|
node2_url = 'http://localhost:12702'
|
||||||
|
|
||||||
driver = webdriver.Chrome(service=Service('/opt/chromedriver96'))
|
|
||||||
|
|
||||||
url = base_url + '/settings'
|
url = base_url + '/settings'
|
||||||
driver.get(url)
|
driver.get(url)
|
||||||
driver.find_element(By.ID, 'general-tab').click()
|
driver.find_element(By.ID, 'general-tab').click()
|
||||||
@ -48,8 +46,8 @@ def test_html():
|
|||||||
btn_apply_general.click()
|
btn_apply_general.click()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
settings_path = '/tmp/test_persistent/client0/basicswap.json'
|
settings_path_0 = '/tmp/test_persistent/client0/basicswap.json'
|
||||||
with open(settings_path) as fs:
|
with open(settings_path_0) as fs:
|
||||||
settings = json.load(fs)
|
settings = json.load(fs)
|
||||||
|
|
||||||
assert (settings['debug'] is False)
|
assert (settings['debug'] is False)
|
||||||
@ -65,14 +63,14 @@ def test_html():
|
|||||||
|
|
||||||
difficult_text = '`~!@#$%^&*()-_=+[{}]\\|;:\'",<>./? '
|
difficult_text = '`~!@#$%^&*()-_=+[{}]\\|;:\'",<>./? '
|
||||||
el = driver.find_element(By.NAME, 'chartapikey')
|
el = driver.find_element(By.NAME, 'chartapikey')
|
||||||
|
el.clear()
|
||||||
el.send_keys(difficult_text)
|
el.send_keys(difficult_text)
|
||||||
|
|
||||||
btn_apply_chart = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_chart')))
|
btn_apply_chart = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_chart')))
|
||||||
btn_apply_chart.click()
|
btn_apply_chart.click()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
settings_path = '/tmp/test_persistent/client0/basicswap.json'
|
with open(settings_path_0) as fs:
|
||||||
with open(settings_path) as fs:
|
|
||||||
settings = json.load(fs)
|
settings = json.load(fs)
|
||||||
|
|
||||||
assert (settings['show_chart'] is False)
|
assert (settings['show_chart'] is False)
|
||||||
@ -90,16 +88,55 @@ def test_html():
|
|||||||
el = driver.find_element(By.NAME, 'chartapikey')
|
el = driver.find_element(By.NAME, 'chartapikey')
|
||||||
assert el.get_property('value') == hex_text
|
assert el.get_property('value') == hex_text
|
||||||
|
|
||||||
settings_path = '/tmp/test_persistent/client0/basicswap.json'
|
with open(settings_path_0) as fs:
|
||||||
with open(settings_path) as fs:
|
|
||||||
settings = json.load(fs)
|
settings = json.load(fs)
|
||||||
|
|
||||||
assert (settings.get('chart_api_key') == hex_text)
|
assert (settings.get('chart_api_key') == hex_text)
|
||||||
|
|
||||||
driver.close()
|
# Apply XMR settings with blank nodes list
|
||||||
|
driver.find_element(By.ID, 'coins-tab').click()
|
||||||
|
btn_apply_monero = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_monero')))
|
||||||
|
el = driver.find_element(By.NAME, 'remotedaemonurls_monero')
|
||||||
|
el.clear()
|
||||||
|
btn_apply_monero.click()
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
print('Done.')
|
with open(settings_path_0) as fs:
|
||||||
|
settings = json.load(fs)
|
||||||
|
assert ('remote_daemon_urls' not in settings['chainclients']['monero'])
|
||||||
|
|
||||||
|
btn_apply_monero = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_monero')))
|
||||||
|
el = driver.find_element(By.NAME, 'remotedaemonurls_monero')
|
||||||
|
el.clear()
|
||||||
|
el.send_keys('node.xmr.to:18081\nnode1.xmr.to:18082')
|
||||||
|
btn_apply_monero.click()
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
with open(settings_path_0) as fs:
|
||||||
|
settings = json.load(fs)
|
||||||
|
remotedaemonurls = settings['chainclients']['monero']['remote_daemon_urls']
|
||||||
|
assert (len(remotedaemonurls) == 2)
|
||||||
|
|
||||||
|
btn_apply_monero = wait.until(EC.element_to_be_clickable((By.NAME, 'apply_monero')))
|
||||||
|
el = driver.find_element(By.NAME, 'remotedaemonurls_monero')
|
||||||
|
el.clear()
|
||||||
|
btn_apply_monero.click()
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
with open(settings_path_0) as fs:
|
||||||
|
settings = json.load(fs)
|
||||||
|
assert ('remote_daemon_urls' not in settings['chainclients']['monero'])
|
||||||
|
|
||||||
|
print('Test Passed!')
|
||||||
|
|
||||||
|
|
||||||
|
def run_tests():
|
||||||
|
driver = get_driver()
|
||||||
|
try:
|
||||||
|
test_settings(driver)
|
||||||
|
finally:
|
||||||
|
driver.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_html()
|
run_tests()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
# Copyright (c) 2022 tecnovert
|
# Copyright (c) 2022-2023 tecnovert
|
||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
@ -11,11 +11,10 @@ from tests.basicswap.util import (
|
|||||||
read_json_api,
|
read_json_api,
|
||||||
)
|
)
|
||||||
|
|
||||||
from selenium import webdriver
|
from util import get_driver
|
||||||
from selenium.webdriver.chrome.service import Service
|
|
||||||
|
|
||||||
|
|
||||||
def test_html(driver):
|
def test_swap_dir(driver):
|
||||||
node_1_port = 12701
|
node_1_port = 12701
|
||||||
node_2_port = 12702
|
node_2_port = 12702
|
||||||
node1_url = f'http://localhost:{node_1_port}'
|
node1_url = f'http://localhost:{node_1_port}'
|
||||||
@ -58,12 +57,16 @@ def test_html(driver):
|
|||||||
|
|
||||||
raise ValueError('TODO')
|
raise ValueError('TODO')
|
||||||
|
|
||||||
print('Done.')
|
print('Test Passed!')
|
||||||
|
|
||||||
|
|
||||||
|
def run_tests():
|
||||||
|
driver = get_driver()
|
||||||
|
try:
|
||||||
|
test_swap_dir(driver)
|
||||||
|
finally:
|
||||||
|
driver.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
driver = webdriver.Chrome(service=Service('/opt/chromedriver96'))
|
run_tests()
|
||||||
try:
|
|
||||||
test_html(driver)
|
|
||||||
finally:
|
|
||||||
driver.close()
|
|
||||||
|
@ -5,32 +5,18 @@
|
|||||||
# Distributed under the MIT software license, see the accompanying
|
# Distributed under the MIT software license, see the accompanying
|
||||||
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
"""
|
|
||||||
cd /tmp
|
|
||||||
wget -4 https://chromedriver.storage.googleapis.com/114.0.5735.90/chromedriver_linux64.zip
|
|
||||||
7z x chromedriver_linux64.zip
|
|
||||||
sudo mv chromedriver /opt/chromedriver114
|
|
||||||
|
|
||||||
python tests/basicswap/extended/test_xmr_persistent.py
|
|
||||||
python tests/basicswap/selenium/test_wallets.py
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
from selenium import webdriver
|
|
||||||
from selenium.webdriver.common.by import By
|
from selenium.webdriver.common.by import By
|
||||||
from selenium.webdriver.chrome.service import Service
|
from util import get_driver
|
||||||
|
|
||||||
|
|
||||||
def test_html():
|
def test_wallets(driver):
|
||||||
base_url = 'http://localhost:12701'
|
base_url = 'http://localhost:12701'
|
||||||
node2_url = 'http://localhost:12702'
|
node2_url = 'http://localhost:12702'
|
||||||
|
|
||||||
driver = webdriver.Chrome(service=Service('/opt/chromedriver114'))
|
|
||||||
|
|
||||||
# Check json coins data
|
# Check json coins data
|
||||||
coins = json.loads(urlopen(base_url + '/json/coins').read())
|
coins = json.loads(urlopen(base_url + '/json/coins').read())
|
||||||
part_coin = [f for f in coins if f['ticker'] == 'PART'][0]
|
part_coin = [f for f in coins if f['ticker'] == 'PART'][0]
|
||||||
@ -40,13 +26,13 @@ def test_html():
|
|||||||
# Check 404 pages
|
# Check 404 pages
|
||||||
url = base_url + '/unknown'
|
url = base_url + '/unknown'
|
||||||
driver.get(url)
|
driver.get(url)
|
||||||
p1 = driver.find_element(By.TAG_NAME, 'p')
|
p1 = driver.find_element(By.TAG_NAME, 'body')
|
||||||
assert ('404' in p1.text)
|
assert ('Error 404' in p1.text)
|
||||||
|
|
||||||
url = base_url + '/static/nothing.png'
|
url = base_url + '/static/nothing.png'
|
||||||
driver.get(url)
|
driver.get(url)
|
||||||
p1 = driver.find_element(By.TAG_NAME, 'p')
|
p1 = driver.find_element(By.TAG_NAME, 'body')
|
||||||
assert ('404' in p1.text)
|
assert ('Error 404' in p1.text)
|
||||||
|
|
||||||
url = base_url + '/wallet'
|
url = base_url + '/wallet'
|
||||||
driver.get(url)
|
driver.get(url)
|
||||||
@ -81,15 +67,21 @@ def test_html():
|
|||||||
driver.find_element(By.NAME, f'withdraw_{part_id}').click()
|
driver.find_element(By.NAME, f'withdraw_{part_id}').click()
|
||||||
driver.switch_to.alert.accept()
|
driver.switch_to.alert.accept()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
elements = driver.find_elements(By.CLASS_NAME, "infomsg")
|
elements = driver.find_elements(By.CLASS_NAME, 'infomsg')
|
||||||
assert (len(elements) == 1)
|
assert (len(elements) == 1)
|
||||||
e = elements[0]
|
e = elements[0]
|
||||||
assert ('Withdrew 10 rtPART (plain to plain) to address' in e.text)
|
assert ('Withdrew 10 rtPART (plain to plain) to address' in e.text)
|
||||||
|
|
||||||
driver.close()
|
print('Test Passed!')
|
||||||
|
|
||||||
print('Done.')
|
|
||||||
|
def run_tests():
|
||||||
|
driver = get_driver()
|
||||||
|
try:
|
||||||
|
test_wallets(driver)
|
||||||
|
finally:
|
||||||
|
driver.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
test_html()
|
run_tests()
|
||||||
|
14
tests/basicswap/selenium/util.py
Normal file
14
tests/basicswap/selenium/util.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright (c) 2023 tecnovert
|
||||||
|
# Distributed under the MIT software license, see the accompanying
|
||||||
|
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
|
||||||
|
from selenium.webdriver import Firefox
|
||||||
|
|
||||||
|
|
||||||
|
def get_driver():
|
||||||
|
# driver = Chrome() # 2023-11: Hangs here
|
||||||
|
driver = Firefox()
|
||||||
|
return driver
|
Loading…
Reference in New Issue
Block a user