-
Notifications
You must be signed in to change notification settings - Fork 2
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
485 selenium test statistic #493
Changes from 2 commits
b8ee64e
2218ad6
e095e91
10950d7
3dc0bb7
05c504f
c216d92
ed59b0f
0145493
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
## For beginning: | ||
|
||
Install: | ||
pip install selenium | ||
(selenium==4.16.0 (in this version you don't need to download geckodriver)) | ||
|
||
pip install webdriver-manager (to avoid problem with binary. And you should have Firefox installed not in 'snap') | ||
webdriver-manager==4.0.1 | ||
|
||
## Test for open statistic: | ||
class StatisticTestSelenium(BasicSeleniumTest) with 1 test | ||
|
||
Test check: if page "/check_list" opens | ||
|
||
## Run run_tests | ||
|
||
use login and password from .env | ||
|
||
```bash | ||
$ python tests/main.py --host host --login login --password password | ||
``` |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
import unittest | ||
from selenium import webdriver | ||
from selenium.webdriver.firefox.service import Service as FirefoxService | ||
from webdriver_manager.firefox import GeckoDriverManager #pip install webdriver-manager | ||
|
||
class BasicSeleniumTest(unittest.TestCase): | ||
|
||
driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install())) #you should have Firefox, installed not from snap | ||
def __init__(self, methodName='runTest', param=None): | ||
super(BasicSeleniumTest, self).__init__(methodName) | ||
self.param = param | ||
|
||
@staticmethod | ||
def parametrize(testcase_class, param=None): | ||
testloader = unittest.TestLoader() | ||
testnames = testloader.getTestCaseNames(testcase_class) | ||
suite = unittest.TestSuite() | ||
for name in testnames: | ||
suite.addTest(testcase_class(name, param=param)) | ||
return suite | ||
|
||
def getUrl(self, relativePath): | ||
return self.param[0] + relativePath | ||
|
||
def getDriver(_): | ||
return BasicSeleniumTest.driver | ||
|
||
@classmethod | ||
def closeDriver(cls): | ||
cls.driver.close() |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import unittest | ||
import sys | ||
import argparse | ||
from basic_selenium_test import BasicSeleniumTest | ||
from test_statistic import StatisticTestSelenium | ||
|
||
def parse_arguments(): | ||
parser = argparse.ArgumentParser(description='Run Selenium tests with specified host, login, and password.') | ||
parser.add_argument('--host', type=str, default='http://127.0.0.1:8080', help='Host address for testing') | ||
parser.add_argument('--login', type=str, required=True, help='insert Username') | ||
parser.add_argument('--password', type=str, required=True, help='insert Password') | ||
return parser.parse_args() | ||
|
||
def main(): | ||
args = parse_arguments() | ||
|
||
suite = unittest.TestSuite() | ||
suite.addTest(BasicSeleniumTest.parametrize(StatisticTestSelenium, param=(args.host, args.login, args.password))) | ||
|
||
returnCode = not unittest.TextTestRunner(verbosity=2).run(suite).wasSuccessful() | ||
|
||
BasicSeleniumTest.closeDriver() | ||
sys.exit(returnCode) | ||
|
||
if __name__ == '__main__': | ||
main() |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
import os | ||
from basic_selenium_test import BasicSeleniumTest | ||
from selenium.webdriver.common.by import By | ||
|
||
class StatisticTestSelenium(BasicSeleniumTest): | ||
|
||
def test_open_statistic(self): | ||
host, login_param, password_param = self.param | ||
URL = self.getUrl('/login') | ||
self.getDriver().get(URL) | ||
self.getDriver().implicitly_wait(30) | ||
login = self.getDriver().find_element(By.ID, "login_text_field") | ||
login.clear() | ||
login.send_keys(login_param) | ||
password = self.getDriver().find_element(By.ID, "password_text_field") | ||
password.clear() | ||
password.send_keys(password_param) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Предлагаю логику авторизации вынести в отдельный метод / функцию, который будет переиспользоваться в тестах. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Авторизация добавлена как метод в BasicSeleniumTest |
||
login_button = self.getDriver().find_element(By.ID, "login_button") | ||
login_button.click() | ||
URL = self.getUrl('/check_list') | ||
self.getDriver().get(URL) | ||
self.getDriver().implicitly_wait(30) | ||
obj = self.getDriver().find_element(By.CLASS_NAME, "fixed-table-container") | ||
self.assertNotEquals(obj, None) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Я бы предложил усилить тест - проверить наличие строк в таблице (или их отсутствие, если проверок нет) - т.е. дождаться загрузки данных таблицы
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Исправила. |
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нужно составить свой requirements для данного каталога
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
добавлен tests/requirements.txt