e2e: remove web3 dependencies

This commit is contained in:
Churikova Tetiana 2022-09-08 16:27:38 +02:00
parent 28963acb09
commit 7cc3ea2af4
No known key found for this signature in database
GPG Key ID: 0D4EA7B33B47E6D8
8 changed files with 267 additions and 256 deletions

View File

@ -44,7 +44,7 @@ sauceclient==1.0.0
scrypt==0.8.17
selenium==3.14.1
six==1.16.0
urllib3==1.26.3
urllib3==1.26.12
yarl==1.6.3
docker==4.4.0
influxdb==5.3.1

View File

@ -7,19 +7,12 @@ import time
from json import JSONDecodeError
from decimal import Decimal
from os import environ
from web3.exceptions import TransactionNotFound
import tests
import support.api.web3_api as w3
class NetworkApi(object):
def __init__(self):
# self.network_url = 'http://api-ropsten.etherscan.io/api?'
self.network_url = 'http://api-goerli.etherscan.io/api?'
self.faucet_url = 'https://faucet-ropsten.status.im/donate'
self.faucet_backup_address = w3.account_address
self.headers = {
'User-Agent':"Mozilla\\5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit\\537.36 (KHTML, like Gecko) Chrome\\7"
"7.0.3865.90 Safari\\537.36", }
@ -30,27 +23,12 @@ class NetworkApi(object):
tests.test_suite_data.current_test.testruns[-1].steps.append(text)
logging.info(text)
def get_transactions(self, address: str) -> List[dict]:
method = self.network_url + 'module=account&action=txlist&address=0x%s&sort=desc&apikey=%s' % (address, self.api_key)
def send_etherscan_request(self, method, extracted_param: str):
for attempt in range(3):
try:
transactions_response = requests.request('GET', url=method, headers=self.headers).json()
if transactions_response:
return transactions_response['result']
except TypeError as e:
self.log("Check response from etherscan API. Returned values do not match expected. %s" % e)
except JSONDecodeError as e:
self.log("No valid JSON response from Etherscan: %s " % str(e))
pass
time.sleep(30)
def get_token_transactions(self, address: str) -> List[dict]:
method = self.network_url + 'module=account&action=tokentx&address=0x%s&sort=desc&apikey=%s' % (address, self.api_key)
for attempt in range(3):
try:
transactions_response = requests.request('GET', url=method, headers=self.headers).json()
if transactions_response:
return transactions_response['result']
response = requests.request('GET', url=method, headers=self.headers).json()
if response:
return response[extracted_param]
except TypeError as e:
self.log("Check response from etherscan API. Returned values do not match expected. %s" % str(e))
except JSONDecodeError as e:
@ -58,15 +36,29 @@ class NetworkApi(object):
pass
time.sleep(30)
def get_token_transactions(self, address: str) -> List[dict]:
method = self.network_url + 'module=account&action=tokentx&address=0x%s&sort=desc&apikey=%s' % (
address, self.api_key)
return self.send_etherscan_request(method, 'result')
def get_transactions(self, address: str) -> List[dict]:
method = self.network_url + 'module=account&action=txlist&address=0x%s&sort=desc&apikey=%s' % (address, self.api_key)
return self.send_etherscan_request(method, 'result')
def is_transaction_successful(self, transaction_hash: str) -> int:
method = self.network_url + 'module=transaction&action=getstatus&txhash=%s' % transaction_hash
return not int(requests.request('GET', url=method, headers=self.headers).json()['result']['isError'])
def get_balance(self, address):
address = '0x' + address
balance = w3.balance_of_address(address)
self.log('Balance is %s Gwei' % balance)
return int(balance)
method = self.network_url + 'module=account&action=balance&address=%s&tag=latest&apikey=%s' % (
address, self.api_key)
balance = self.send_etherscan_request(method, 'result')
if balance:
self.log('Balance is %s Gwei' % balance)
return int(balance)
else:
self.log('Cannot extract balance!')
def get_latest_block_number(self) -> int:
method = self.network_url + 'module=proxy&action=eth_blockNumber'
@ -75,22 +67,18 @@ class NetworkApi(object):
def find_transaction_by_hash(self, transaction_hash: str):
method = self.network_url + 'module=transaction&action=gettxreceiptstatus&txhash=%s&apikey=%s' % (
transaction_hash, self.api_key)
try:
transactions_response = requests.request('GET', url=method, headers=self.headers).json()
if transactions_response:
result = True
if transactions_response['result']['status'] == '1':
self.log("TX %s is found and confirmed: " % transaction_hash)
elif transactions_response['result']['status'] == '0':
self.log("TX %s is found and failed: " % transaction_hash)
else:
result = False
self.log("TX %s is not found!" % transaction_hash)
return result
except TypeError as e:
self.log("Check response from etherscan API. Returned values do not match expected. %s" % str(e))
except JSONDecodeError as e:
self.log("No valid JSON response from Etherscan: %s " % str(e))
result = self.send_etherscan_request(method, 'result')
if result:
final_status = True
if result['status'] == '1':
self.log("TX %s is found and confirmed" % transaction_hash)
elif result['status'] == '0':
self.log("TX %s is found and failed: " % transaction_hash)
else:
final_status = False
self.log("TX %s is not found!" % transaction_hash)
return final_status
def find_transaction_by_unique_amount(self, address, amount, token=False, decimals=18, wait_time=300):
additional_info = 'token transactions' if token else 'ETH transactions'
@ -158,37 +146,39 @@ class NetworkApi(object):
if balance / 1000000000000000000 != expected_balance:
errors.append('Recipients balance is not updated on etherscan')
def faucet(self, address):
try:
self.log("Trying to get funds from %s" % self.faucet_url)
return requests.request('GET', '%s/0x%s' % (self.faucet_url, address)).json()
except JSONDecodeError as e:
self.log("No valid JSON response from Etherscan: %s " % str(e))
pass
# Do not use until web3 update
# def faucet(self, address):
# try:
# self.log("Trying to get funds from %s" % self.faucet_url)
# return requests.request('GET', '%s/0x%s' % (self.faucet_url, address)).json()
# except JSONDecodeError as e:
# self.log("No valid JSON response from Etherscan: %s " % str(e))
# pass
def faucet_backup(self, address):
self.log("Trying to get funds from %s" % self.faucet_backup_address)
address = "0x" + address
w3.donate_testnet_eth(address=address, amount=0.01, inscrease_default_gas_price=10)
# def faucet_backup(self, address):
# self.log("Trying to get funds from %s" % self.faucet_backup_address)
# address = "0x" + address
# w3.donate_testnet_eth(address=address, amount=0.01, inscrease_default_gas_price=10)
def get_donate(self, address, external_faucet=False, wait_time=300):
initial_balance = self.get_balance(address)
counter = 0
if initial_balance < 1000000000000000000:
if external_faucet:
self.faucet_backup(address)
else:
self.faucet(address)
while True:
if counter >= wait_time:
pytest.fail("Donation was not received during %s seconds!" % wait_time)
elif self.get_balance(address) == initial_balance:
counter += 10
time.sleep(10)
self.log('Waiting %s seconds for donation' % counter)
else:
self.log('Got %s Gwei for %s' % (self.get_balance(address), address))
return
# def get_donate(self, address, external_faucet=False, wait_time=300):
# initial_balance = self.get_balance(address)
# counter = 0
# if initial_balance < 1000000000000000000:
# if external_faucet:
# self.faucet_backup(address)
# else:
# self.faucet(address)
# while True:
# if counter >= wait_time:
# pytest.fail("Donation was not received during %s seconds!" % wait_time)
# elif self.get_balance(address) == initial_balance:
# counter += 10
# time.sleep(10)
# self.log('Waiting %s seconds for donation' % counter)
# else:
# self.log('Got %s Gwei for %s' % (self.get_balance(address), address))
# return
def start_chat_bot(self, chat_name: str, messages_number: int, interval: int = 1) -> list:
url = '%s/ping/%s?count=%s&interval=%s' % (self.chat_bot_url, chat_name, messages_number, interval)
@ -202,9 +192,15 @@ class NetworkApi(object):
rounded_balance = round(float(actual_balance), decimals)
return rounded_balance
def get_tx_param_by_hash(self, hash: str, param: str):
method = self.network_url + 'module=proxy&action=eth_getTransactionByHash&txhash=%s&apikey=%s' % (
hash, self.api_key)
res = self.send_etherscan_request(method, 'result')
return int(res[param], 16)
def get_custom_fee_tx_params(self, hash: str):
return {
'fee_cap': str(w3.get_tx_param_by_hash(hash, 'maxFeePerGas')/1000000000),
'tip_cap': str(w3.get_tx_param_by_hash(hash, 'maxPriorityFeePerGas')/1000000000),
'gas_limit': str(w3.get_tx_param_by_hash(hash, 'gas'))
}
'fee_cap': str(self.get_tx_param_by_hash(hash, 'maxFeePerGas')/1000000000),
'tip_cap': str(self.get_tx_param_by_hash(hash, 'maxPriorityFeePerGas')/1000000000),
'gas_limit': str(self.get_tx_param_by_hash(hash, 'gas'))
}

File diff suppressed because one or more lines are too long

View File

@ -189,7 +189,7 @@ def pytest_configure(config):
headers={'Content-Type': 'application/octet-stream'})
break
except ConnectionError:
time.sleep(3)
time.sleep(10)
else:
sauce.storage.upload_file(config.getoption('apk'))
@ -340,11 +340,11 @@ def pytest_runtest_protocol(item, nextitem):
return True # no need to rerun
@pytest.fixture(scope="session", autouse=False)
def faucet_for_senders():
network_api = NetworkApi()
for user in transaction_senders.values():
network_api.faucet(address=user['address'])
# @pytest.fixture(scope="session", autouse=False)
# def faucet_for_senders():
# network_api = NetworkApi()
# for user in transaction_senders.values():
# network_api.faucet(address=user['address'])
@pytest.fixture

View File

@ -604,6 +604,7 @@ class TestChatMediumMultipleDevice(MultipleSharedDeviceTestCase):
self.drivers[1].reset()
self.home_2 = SignInView(self.drivers[1]).recover_access(ens_user['passphrase'])
self.home_2.ens_banner_close_button.wait_and_click()
self.home_1.home_button.double_click()
self.profile_2 = self.home_2.profile_button.click()
ens, full_ens, username_2 = ens_user['ens'], '@%s' % ens_user['ens'], ens_user['username']

View File

@ -77,11 +77,10 @@ class TestChatManagement(SingleDeviceTestCase):
@marks.testrail_id(6292)
def test_keycard_send_funds_between_accounts_set_max_in_multiaccount_instance(self):
sign_in_view = SignInView(self.driver).create_user(keycard=True)
wallet = sign_in_view.wallet_button.click()
sign_in = SignInView(self.driver).create_user(keycard=True)
wallet = sign_in.wallet_button.click()
status_account_address = wallet.get_wallet_address()[2:]
self.network_api.get_donate(status_account_address, external_faucet=True)
wallet.wait_balance_is_changed()
wallet.get_test_assets(keycard=True)
account_name = 'subaccount'
wallet.add_account(account_name, keycard=True)
wallet.get_account_by_name(account_name).click()
@ -160,6 +159,7 @@ class TestChatManagement(SingleDeviceTestCase):
send_transaction.sign_transaction(keycard=True)
wallet.element_by_text('Assets').click()
wallet.wait_balance_is_equal_expected_amount(asset='ETH', expected_balance=0, main_screen=False)
wallet.donate_leftovers(keycard=True)
@marks.testrail_id(5742)
def test_keycard_onboarding_interruption_creating_flow(self):
@ -472,11 +472,11 @@ class TestChatManagement(SingleDeviceTestCase):
if wallet.backup_recovery_phrase_warning_text.is_element_present():
self.driver.fail("'Back up your seed phrase' warning is shown on Wallet while no funds are present")
address = wallet.get_wallet_address()
self.network_api.get_donate(address[2:], external_faucet=True, wait_time=200)
wallet.close_button.click()
wallet.wait_balance_is_changed(scan_tokens=True)
wallet.get_test_assets()
if not wallet.backup_recovery_phrase_warning_text.is_element_present(30):
self.driver.fail("'Back up your seed phrase' warning is not shown on Wallet with funds")
wallet.donate_leftovers()
profile = wallet.get_profile_view()
wallet.backup_recovery_phrase_warning_text.click()
profile.backup_recovery_phrase()
@ -1067,11 +1067,8 @@ class TestChatManagement(SingleDeviceTestCase):
self.chat_key = self.home.get_public_key_and_username()
self.wallet.just_fyi("Get required donate")
w3.donate_testnet_eth(self.address, amount=0.1, inscrease_default_gas_price=10)
self.home.wallet_button.click()
self.wallet.wait_balance_is_changed()
w3.donate_testnet_token('STT', address=self.address, amount=10, inscrease_default_gas_price=10)
self.wallet.wait_balance_is_changed('STT', scan_tokens=True)
self.wallet.get_test_assets()
self.wallet.get_test_assets(token=True)
self.wallet.just_fyi("Purchase ENS")
self.profile = self.home.profile_button.click()
@ -1099,13 +1096,7 @@ class TestChatManagement(SingleDeviceTestCase):
self.wallet.just_fyi("Send leftovers")
self.wallet.wallet_button.double_click()
address = self.wallet.get_wallet_address()
send_transaction = self.wallet.send_transaction_button.click()
send_transaction.set_max_button.click()
send_transaction.confirm()
send_transaction.chose_recipient_button.click()
send_transaction.set_recipient_address(w3.ACCOUNT_ADDRESS)
send_transaction.sign_transaction_button.click()
send_transaction.sign_transaction()
self.wallet.donate_leftovers()
self.wallet.just_fyi("Verify purchased ENS")
self.home.home_button.click()
@ -1118,6 +1109,8 @@ class TestChatManagement(SingleDeviceTestCase):
"Public key in not resolved correctly from %s ENS name on stateofus!" % self.ens_name)
self.home.get_back_to_home_view()
self.wallet.wallet_button.double_click()
from views.send_transaction_view import SendTransactionView
send_transaction = SendTransactionView(self.driver)
self.wallet.send_transaction_from_main_screen.click_until_presence_of_element(send_transaction.chose_recipient_button)
send_transaction.chose_recipient_button.scroll_and_click()
send_transaction.set_recipient_address(self.ens_name)

View File

@ -685,6 +685,38 @@ class BaseView(object):
web_view.new_tab_button.click()
return web_view
def get_test_assets(self, token=False, keycard=False):
from views.home_view import HomeView
status_test_dapp = HomeView(self.driver).open_status_test_dapp()
status_test_dapp.wait_for_d_aap_to_load()
self.just_fyi("Requesting test assets in dapp")
status_test_dapp.assets_button.click()
if token:
send_tx = status_test_dapp.request_stt_button.click()
send_tx.sign_transaction(keycard=keycard)
wallet = self.wallet_button.click()
wallet.wait_balance_is_changed(asset='STT', scan_tokens=True)
else:
status_test_dapp.request_eth_button.click()
status_test_dapp.ok_button.wait_and_click()
wallet = self.wallet_button.click()
wallet.wait_balance_is_changed()
return wallet
def donate_leftovers(self, keycard=False):
self.just_fyi("Send leftovers from test accounts")
wallet = self.wallet_button.click()
self.wallet_button.click()
send_transaction = wallet.send_transaction_from_main_screen.click()
send_transaction.set_max_button.click()
send_transaction.confirm()
send_transaction.chose_recipient_button.click()
send_transaction.set_recipient_address('0x2127edab5d08b1e11adf7ae4bae16c2b33fdf74a')
send_transaction.sign_transaction_button.click()
send_transaction.sign_transaction(keycard=keycard)
# Method-helper
def write_page_source_to_file(self, full_path_to_file):
string_source = self.driver.page_source

View File

@ -100,7 +100,7 @@ class StatusTestDAppView(BaseWebView):
self.driver = driver
self.assets_button = Button(self.driver, webview="Assets")
self.request_eth_button = Button(self.driver, webview="Request Ropsten ETH")
self.request_eth_button = Button(self.driver, webview="Request Goerli ETH")
self.request_stt_button = RequestSTTButton(self.driver)
self.transactions_button = TransactionsButton(self.driver)
@ -119,15 +119,3 @@ class StatusTestDAppView(BaseWebView):
self.driver.info("**Wait %ss for assets in simpledapp**" % wait_time)
self.assets_button.wait_for_visibility_of_element(seconds=wait_time)
def faucet_asset(self, asset='eth'):
self.driver.info("**Faucet %s in dapp**" % asset)
self.wait_for_d_aap_to_load()
self.assets_button.click()
if asset == 'eth':
self.request_eth_button.click()
self.element_by_text('Faucet request recieved').wait_for_visibility_of_element()
self.ok_button.click()
self.element_by_text('Faucet request recieved').wait_for_invisibility_of_element()
elif asset == 'stt':
send_transaction_view = self.request_stt_button.click()
send_transaction_view.sign_transaction()