Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add all auto tests back with new updates #2552

Merged
merged 10 commits into from
Jun 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions .github/workflows/playground_selenium.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Playground Selenium Tests

on:
workflow_dispatch:
schedule:
- cron: "0 6 * * *"

jobs:
selenium-run:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setting up Python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Installing all necessary packages
run: pip install -r packages/playground/tests/frontend_selenium/requirements.txt
- name: Node install
uses: actions/setup-node@v4
with:
node-version: 18
- name: Yarn install
run: yarn install
- name: Lerna Build
run: yarn lerna run build
- name: Yarn Serve
run: make run project=playground &
- name: Wait for localhost
run: sleep 60
- name: Run tests
working-directory: ./packages/playground/tests/frontend_selenium
env:
TFCHAIN_MNEMONICS: ${{ secrets.TFCHAIN_MNEMONICS }}
TFCHAIN_NODE_MNEMONICS: ${{ secrets.TFCHAIN_NODE_MNEMONICS }}
STELLAR_ADDRESS: ${{ secrets.STELLAR_ADDRESS }}
EMAIL: ${{ secrets.EMAIL }}
run: python -m pytest -v
8 changes: 8 additions & 0 deletions packages/playground/tests/frontend_selenium/Config.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[Base]
port = 5173
net = dev
[Utils]
seed =
node_seed =
A-Harby marked this conversation as resolved.
Show resolved Hide resolved
address =
email =
Empty file.
150 changes: 150 additions & 0 deletions packages/playground/tests/frontend_selenium/pages/bridge.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.alert import Alert
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class BridgePage:

"""
This module contains TF Token Bridge page elements.
"""

logout_button = (By.XPATH, "//button[.//span[text()=' Logout ']]")
tfchain_button = (By.XPATH, "//span[text()='TFChain']")
bridge_page = (By.XPATH, "//span[text()='TF Token Bridge']")
transfer_tft_title = (By.XPATH, "//*[contains(text(), 'Transfer TFT Across Chains')]")
stellar_choose = (By.XPATH, "//*[contains(text(), 'stellar')]")
withdraw = (By.XPATH, "//button[.//span[text()='Withdraw']]")
deposit = (By.XPATH, "//button[.//span[text()='Deposit']]")
howdone = (By.XPATH, "//button[.//span[text()='Learn How?']]")
deposite_bridge_address = (By.XPATH, "(//input[@class='v-field__input'])[2]")
twin_id_text = (By.XPATH,"(//input[@class='v-field__input'])[3]")
twin_address_text = (By.XPATH, '/html/body/div[1]/div/div/main/div/div[2]/div/div/div/div[2]/div[2]/div[1]/div/div[3]/div[2]/div/div/div/div[1]/span')
twin_page = (By.XPATH, "//span[text()='Your Profile']")
deposit_close_button = (By.XPATH, "//button[.//span[text()=' Close ']]")
deposit_learn_button = (By.XPATH, "//a[.//span[text()='Learn more?']]")
stellar_address = (By.XPATH, "//label[text()='Stellar Target Wallet Address']/following-sibling::input")
amount_tft = (By.XPATH, "//input[@class='v-field__input' and @type='number']")
submit_button = (By.XPATH, "//button[.//span[text()='Send']]")
balance_text = (By.XPATH,'/html/body/div[1]/div/div/main/header/div/div[3]/div[2]/p[1]/strong')
tft_amount_text = (By.XPATH, "//*[contains(text(), 'Deposit fee is 1 TFT')]")


def __init__(self, browser):
self.browser = browser

def navigate_to_bridge(self):
WebDriverWait(self.browser, 30).until(EC.visibility_of_element_located(self.logout_button))
webdriver.ActionChains(self.browser).send_keys(Keys.ESCAPE).perform()
self.browser.find_element(*self.tfchain_button).click()
self.browser.find_element(*self.bridge_page).click()
WebDriverWait(self.browser, 30).until(EC.visibility_of_element_located(self.transfer_tft_title))

def twin_address(self):
self.browser.find_element(*self.deposit_close_button).click()
self.browser.find_element(*self.twin_page).click()
return self.browser.find_element(*self.twin_address_text).text

def transfer_chain(self):
self.browser.find_element(*self.stellar_choose).click()

def choose_deposit(self):
self.browser.find_element(*self.deposit).click()

def choose_withdraw(self):
self.browser.find_element(*self.withdraw).click()

def how_it_done(self):
self.browser.find_element(*self.howdone).click()
WebDriverWait(self.browser, 30).until(EC.number_of_windows_to_be(2))
self.browser.switch_to.window(self.browser.window_handles[1])
url = self.browser.current_url
self.browser.close()
self.browser.switch_to.window(self.browser.window_handles[0])
return url

def deposite_learn_more(self):
self.browser.find_element(*self.deposit).click()
self.wait_for_button(self.browser.find_element(*self.deposit_learn_button)).click()
WebDriverWait(self.browser, 30).until(EC.number_of_windows_to_be(2))
self.browser.switch_to.window(self.browser.window_handles[1])
return self.browser.current_url

def check_deposit(self):
self.browser.find_element(*self.deposit).click()
amount_text = self.browser.find_element(*self.tft_amount_text).text
bridge_address = self.browser.find_element(*self.deposite_bridge_address).get_attribute("value")
twin_id = self.browser.find_element(*self.twin_id_text).get_attribute("value")
return twin_id, amount_text, bridge_address

def setup_withdraw_tft(self, data):
self.browser.find_element(*self.withdraw).click()
self.browser.find_element(*self.amount_tft).send_keys(Keys.CONTROL + "a")
self.browser.find_element(*self.amount_tft).send_keys(Keys.DELETE)
self.browser.find_element(*self.amount_tft).send_keys(data)

def setup_widthdraw_address(self, data):
balance = self.browser.find_element(*self.balance_text).text[:-4]
self.browser.find_element(*self.withdraw).click()
self.browser.find_element(*self.stellar_address).send_keys(Keys.CONTROL + "a")
self.browser.find_element(*self.stellar_address).send_keys(Keys.DELETE)
self.browser.find_element(*self.stellar_address).send_keys(data)
return balance

def check_withdraw_invalid_stellar(self, data):
self.browser.find_element(*self.stellar_address).send_keys(Keys.CONTROL + "a")
self.browser.find_element(*self.stellar_address).send_keys(Keys.DELETE)
self.browser.find_element(*self.stellar_address).send_keys(data)
return self.browser.find_element(*self.submit_button).is_enabled()

def check_withdraw_tft_amount(self, data):
self.browser.find_element(*self.amount_tft).send_keys(Keys.CONTROL + "a")
self.browser.find_element(*self.amount_tft).send_keys(Keys.DELETE)
self.browser.find_element(*self.amount_tft).send_keys(data)
WebDriverWait(self.browser, 30).until(EC.element_to_be_clickable(self.submit_button))
return self.browser.find_element(*self.submit_button).is_enabled()

def check_withdraw_invalid_tft_amount(self, data):
self.browser.find_element(*self.amount_tft).send_keys(Keys.CONTROL + "a")
self.browser.find_element(*self.amount_tft).send_keys(Keys.DELETE)
self.browser.find_element(*self.amount_tft).send_keys(data)
return self.browser.find_element(*self.submit_button).is_enabled()

def check_withdraw(self, address, amount):
self.browser.find_element(*self.withdraw).click()
self.wait_for('Interact with the bridge in order to withdraw your TFT to Stellar (withdraw fee is: 1 TFT)')
self.browser.find_element(*self.amount_tft).send_keys(Keys.CONTROL + "a")
self.browser.find_element(*self.amount_tft).send_keys(Keys.DELETE)
self.browser.find_element(*self.amount_tft).send_keys(amount)
self.browser.find_element(*self.stellar_address).send_keys(Keys.CONTROL + "a")
self.browser.find_element(*self.stellar_address).send_keys(Keys.DELETE)
self.browser.find_element(*self.stellar_address).send_keys(address)
WebDriverWait(self.browser, 30).until(EC.element_to_be_clickable(self.submit_button))
return self.browser.find_element(*self.submit_button)

def get_balance(self):
new_balance = self.browser.find_element(*self.balance_text).text[:-4]
WebDriverWait(self.browser, 30).until(EC.visibility_of_element_located(self.transfer_tft_title))
while('Loadin' in new_balance):
self.wait_for(' Balance: ')
new_balance = self.browser.find_element(*self.balance_text).text[:-4]
return new_balance

def get_balance_withdraw(self, balance):
new_balance = self.browser.find_element(*self.balance_text).text[:-4]
self.browser.refresh()
alert = Alert(self.browser)
alert.accept()
while(new_balance==balance):
new_balance = self.browser.find_element(*self.balance_text).text[:-4]
return new_balance

def wait_for_button(self, button):
WebDriverWait(self.browser, 30).until(EC.element_to_be_clickable(button))
return button

def wait_for(self, keyword):
WebDriverWait(self.browser, 30).until(EC.visibility_of_element_located((By.XPATH, "//*[contains(text(), '"+ keyword +"')]")))
return True
Loading
Loading