From 399baad22fb1f0f55e88003f6d148f8e52278e6b Mon Sep 17 00:00:00 2001 From: Ankit Hinge Date: Wed, 21 Aug 2024 19:26:08 +0530 Subject: [PATCH] New testcases added --- Doczy.AI_Automation/Pipfile | 6 + Doczy.AI_Automation/Pipfile.lock | 488 +++++++++++++++++- Doczy.AI_Automation/config/aws_conn.py | 35 ++ Doczy.AI_Automation/config/env.yaml | 52 +- Doczy.AI_Automation/data/data.xlsx | Bin 0 -> 10301 bytes Doczy.AI_Automation/elements/__init__.py | 0 .../elements/interface_0_elements.py | 34 ++ .../elements/interface_1_elements.py | 46 ++ .../elements/interface_2_elements.py | 58 +++ .../pages/interface_0_page_objects.py | 79 +-- .../pages/interface_1_page_objects.py | 105 ++-- .../pages/interface_2_page_objects.py | 118 +++++ Doczy.AI_Automation/pytest.ini | 2 +- Doczy.AI_Automation/requirements.txt | 7 +- Doczy.AI_Automation/tests/conftest.py | 94 +++- Doczy.AI_Automation/tests/test_end_to_end.py | 119 +++-- Doczy.AI_Automation/tests/test_interface_0.py | 144 +++--- Doczy.AI_Automation/tests/test_interface_1.py | 105 ++-- Doczy.AI_Automation/tests/test_interface_2.py | 163 ++++++ Doczy.AI_Automation/utils/CustomException.py | 42 ++ .../utils/element_related_methods.py | 56 +- Doczy.AI_Automation/utils/reader.py | 30 +- Doczy.AI_Automation/utils/report.py | 3 - 23 files changed, 1506 insertions(+), 280 deletions(-) create mode 100644 Doczy.AI_Automation/config/aws_conn.py create mode 100644 Doczy.AI_Automation/data/data.xlsx create mode 100644 Doczy.AI_Automation/elements/__init__.py create mode 100644 Doczy.AI_Automation/elements/interface_0_elements.py create mode 100644 Doczy.AI_Automation/elements/interface_1_elements.py create mode 100644 Doczy.AI_Automation/elements/interface_2_elements.py create mode 100644 Doczy.AI_Automation/pages/interface_2_page_objects.py create mode 100644 Doczy.AI_Automation/tests/test_interface_2.py create mode 100644 Doczy.AI_Automation/utils/CustomException.py diff --git a/Doczy.AI_Automation/Pipfile b/Doczy.AI_Automation/Pipfile index 1d37b7b..42dd8e8 100644 --- a/Doczy.AI_Automation/Pipfile +++ b/Doczy.AI_Automation/Pipfile @@ -9,6 +9,12 @@ pytest-html = "*" pyyaml = "*" loguru = "*" selenium = "*" +allure-pytest = "*" +pandas = "*" +openpyxl = "*" +boto3 = "*" +pysnowflake = "*" +snowflake-connector-python = "*" [dev-packages] diff --git a/Doczy.AI_Automation/Pipfile.lock b/Doczy.AI_Automation/Pipfile.lock index 7aeb59e..aa7dc58 100644 --- a/Doczy.AI_Automation/Pipfile.lock +++ b/Doczy.AI_Automation/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f77c7c7943f58908fd2ad821aa5c106631c28e6aeaec3e3dfdc163c7a432733f" + "sha256": "5e35a15ee081cc486c1aec46265ff8fb402e945de85ce6433e7b28534f9f2512" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,29 @@ ] }, "default": { + "allure-pytest": { + "hashes": [ + "sha256:0ef8e1790c44a988db6b83c4d4f5e91451e2c4c8ea10601dfa88528d23afcf6e", + "sha256:94130bac32964b78058e62cf4b815ad97a5ac82a065e6dd2d43abac2be7640fc" + ], + "index": "pypi", + "version": "==2.13.5" + }, + "allure-python-commons": { + "hashes": [ + "sha256:8b0e837b6e32d810adec563f49e1d04127a5b6770e0232065b7cb09b9953980d", + "sha256:a232e7955811f988e49a4c1dd6c16cce7e9b81d0ea0422b1e5654d3254e2caf3" + ], + "markers": "python_version >= '3.6'", + "version": "==2.13.5" + }, + "asn1crypto": { + "hashes": [ + "sha256:13ae38502be632115abf8a24cbe5f4da52e3b5231990aff31123c805306ccb9c", + "sha256:db4e40728b728508912cbb3d44f19ce188f218e9eba635821bb4b68564f8fd67" + ], + "version": "==1.5.1" + }, "attrs": { "hashes": [ "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30", @@ -24,13 +47,30 @@ "markers": "python_version >= '3.7'", "version": "==23.2.0" }, + "boto3": { + "hashes": [ + "sha256:2058397f0a92c301e3116e9e65fbbc70ea49270c250882d65043d19b7c6e2d17", + "sha256:d63d36e5a34533ba69188d56f96da132730d5e9932c4e11c02d79319cd1afcec" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==1.34.148" + }, + "botocore": { + "hashes": [ + "sha256:258dd95570b43db9fa21cce5426eabaea5867e3a61224157650448b5019d1bbd", + "sha256:9e09428b0bc4d0c1cf5e368dd6ab18eabf6047304060f8b5dd8391677cfe00e6" + ], + "markers": "python_version >= '3.8'", + "version": "==1.34.148" + }, "certifi": { "hashes": [ - "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", - "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" + "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b", + "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90" ], "markers": "python_version >= '3.6'", - "version": "==2024.2.2" + "version": "==2024.7.4" }, "cffi": { "hashes": [ @@ -87,9 +127,105 @@ "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956", "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357" ], - "markers": "os_name == 'nt' and implementation_name != 'pypy'", + "markers": "python_version >= '3.8'", "version": "==1.16.0" }, + "charset-normalizer": { + "hashes": [ + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.2" + }, "colorama": { "hashes": [ "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", @@ -98,6 +234,60 @@ "markers": "sys_platform == 'win32'", "version": "==0.4.6" }, + "cryptography": { + "hashes": [ + "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad", + "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583", + "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b", + "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c", + "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1", + "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648", + "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949", + "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba", + "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c", + "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9", + "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d", + "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c", + "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e", + "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2", + "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d", + "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7", + "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70", + "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2", + "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7", + "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14", + "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe", + "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e", + "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71", + "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961", + "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7", + "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c", + "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28", + "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842", + "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902", + "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801", + "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a", + "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e" + ], + "markers": "python_version >= '3.7'", + "version": "==42.0.8" + }, + "et-xmlfile": { + "hashes": [ + "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c", + "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada" + ], + "markers": "python_version >= '3.6'", + "version": "==1.1.0" + }, + "filelock": { + "hashes": [ + "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb", + "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7" + ], + "markers": "python_version >= '3.8'", + "version": "==3.15.4" + }, "h11": { "hashes": [ "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", @@ -130,6 +320,14 @@ "markers": "python_version >= '3.7'", "version": "==3.1.4" }, + "jmespath": { + "hashes": [ + "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", + "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" + ], + "markers": "python_version >= '3.7'", + "version": "==1.0.1" + }, "loguru": { "hashes": [ "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb", @@ -205,6 +403,66 @@ "markers": "python_version >= '3.7'", "version": "==2.1.5" }, + "numpy": { + "hashes": [ + "sha256:08458fbf403bff5e2b45f08eda195d4b0c9b35682311da5a5a0a0925b11b9bd8", + "sha256:0fbb536eac80e27a2793ffd787895242b7f18ef792563d742c2d673bfcb75134", + "sha256:12f5d865d60fb9734e60a60f1d5afa6d962d8d4467c120a1c0cda6eb2964437d", + "sha256:15eb4eca47d36ec3f78cde0a3a2ee24cf05ca7396ef808dda2c0ddad7c2bde67", + "sha256:173a00b9995f73b79eb0191129f2455f1e34c203f559dd118636858cc452a1bf", + "sha256:1b902ce0e0a5bb7704556a217c4f63a7974f8f43e090aff03fcf262e0b135e02", + "sha256:1f682ea61a88479d9498bf2091fdcd722b090724b08b31d63e022adc063bad59", + "sha256:1f87fec1f9bc1efd23f4227becff04bd0e979e23ca50cc92ec88b38489db3b55", + "sha256:24a0e1befbfa14615b49ba9659d3d8818a0f4d8a1c5822af8696706fbda7310c", + "sha256:2c3a346ae20cfd80b6cfd3e60dc179963ef2ea58da5ec074fd3d9e7a1e7ba97f", + "sha256:36d3a9405fd7c511804dc56fc32974fa5533bdeb3cd1604d6b8ff1d292b819c4", + "sha256:3fdabe3e2a52bc4eff8dc7a5044342f8bd9f11ef0934fcd3289a788c0eb10018", + "sha256:4127d4303b9ac9f94ca0441138acead39928938660ca58329fe156f84b9f3015", + "sha256:4658c398d65d1b25e1760de3157011a80375da861709abd7cef3bad65d6543f9", + "sha256:485b87235796410c3519a699cfe1faab097e509e90ebb05dcd098db2ae87e7b3", + "sha256:529af13c5f4b7a932fb0e1911d3a75da204eff023ee5e0e79c1751564221a5c8", + "sha256:5a3d94942c331dd4e0e1147f7a8699a4aa47dffc11bf8a1523c12af8b2e91bbe", + "sha256:5daab361be6ddeb299a918a7c0864fa8618af66019138263247af405018b04e1", + "sha256:61728fba1e464f789b11deb78a57805c70b2ed02343560456190d0501ba37b0f", + "sha256:6790654cb13eab303d8402354fabd47472b24635700f631f041bd0b65e37298a", + "sha256:69ff563d43c69b1baba77af455dd0a839df8d25e8590e79c90fcbe1499ebde42", + "sha256:6bf4e6f4a2a2e26655717a1983ef6324f2664d7011f6ef7482e8c0b3d51e82ac", + "sha256:6e4eeb6eb2fced786e32e6d8df9e755ce5be920d17f7ce00bc38fcde8ccdbf9e", + "sha256:72dc22e9ec8f6eaa206deb1b1355eb2e253899d7347f5e2fae5f0af613741d06", + "sha256:75b4e316c5902d8163ef9d423b1c3f2f6252226d1aa5cd8a0a03a7d01ffc6268", + "sha256:7b9853803278db3bdcc6cd5beca37815b133e9e77ff3d4733c247414e78eb8d1", + "sha256:7d6fddc5fe258d3328cd8e3d7d3e02234c5d70e01ebe377a6ab92adb14039cb4", + "sha256:81b0893a39bc5b865b8bf89e9ad7807e16717f19868e9d234bdaf9b1f1393868", + "sha256:8efc84f01c1cd7e34b3fb310183e72fcdf55293ee736d679b6d35b35d80bba26", + "sha256:8fae4ebbf95a179c1156fab0b142b74e4ba4204c87bde8d3d8b6f9c34c5825ef", + "sha256:99d0d92a5e3613c33a5f01db206a33f8fdf3d71f2912b0de1739894668b7a93b", + "sha256:9adbd9bb520c866e1bfd7e10e1880a1f7749f1f6e5017686a5fbb9b72cf69f82", + "sha256:a1e01dcaab205fbece13c1410253a9eea1b1c9b61d237b6fa59bcc46e8e89343", + "sha256:a8fc2de81ad835d999113ddf87d1ea2b0f4704cbd947c948d2f5513deafe5a7b", + "sha256:b83e16a5511d1b1f8a88cbabb1a6f6a499f82c062a4251892d9ad5d609863fb7", + "sha256:bb2124fdc6e62baae159ebcfa368708867eb56806804d005860b6007388df171", + "sha256:bfc085b28d62ff4009364e7ca34b80a9a080cbd97c2c0630bb5f7f770dae9414", + "sha256:cbab9fc9c391700e3e1287666dfd82d8666d10e69a6c4a09ab97574c0b7ee0a7", + "sha256:e5eeca8067ad04bc8a2a8731183d51d7cbaac66d86085d5f4766ee6bf19c7f87", + "sha256:e9e81fa9017eaa416c056e5d9e71be93d05e2c3c2ab308d23307a8bc4443c368", + "sha256:ea2326a4dca88e4a274ba3a4405eb6c6467d3ffbd8c7d38632502eaae3820587", + "sha256:eacf3291e263d5a67d8c1a581a8ebbcfd6447204ef58828caf69a5e3e8c75990", + "sha256:ec87f5f8aca726117a1c9b7083e7656a9d0d606eec7299cc067bb83d26f16e0c", + "sha256:f1659887361a7151f89e79b276ed8dff3d75877df906328f14d8bb40bb4f5101", + "sha256:f9cf5ea551aec449206954b075db819f52adc1638d46a6738253a712d553c7b4" + ], + "markers": "python_version >= '3.12'", + "version": "==2.0.1" + }, + "openpyxl": { + "hashes": [ + "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", + "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.1.5" + }, "outcome": { "hashes": [ "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8", @@ -215,11 +473,55 @@ }, "packaging": { "hashes": [ - "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", - "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", + "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" ], - "markers": "python_version >= '3.7'", - "version": "==24.0" + "markers": "python_version >= '3.8'", + "version": "==24.1" + }, + "pandas": { + "hashes": [ + "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863", + "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2", + "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1", + "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad", + "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db", + "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76", + "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51", + "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32", + "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08", + "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b", + "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4", + "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921", + "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288", + "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee", + "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0", + "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24", + "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99", + "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151", + "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd", + "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce", + "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57", + "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef", + "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54", + "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a", + "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238", + "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23", + "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772", + "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce", + "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.2.2" + }, + "platformdirs": { + "hashes": [ + "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee", + "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3" + ], + "markers": "python_version >= '3.8'", + "version": "==4.2.2" }, "pluggy": { "hashes": [ @@ -237,6 +539,29 @@ "markers": "python_version >= '3.8'", "version": "==2.22" }, + "pyjwt": { + "hashes": [ + "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de", + "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" + ], + "markers": "python_version >= '3.7'", + "version": "==2.8.0" + }, + "pyopenssl": { + "hashes": [ + "sha256:4247f0dbe3748d560dcbb2ff3ea01af0f9a1a001ef5f7c4c647956ed8cbf0e95", + "sha256:967d5719b12b243588573f39b0c677637145c7a1ffedcd495a487e58177fbb8d" + ], + "markers": "python_version >= '3.7'", + "version": "==24.2.1" + }, + "pysnowflake": { + "hashes": [ + "sha256:47ed6b65c2b758d3930f0df61f7851d357e85f7d8f96aa08d9525e34e36e4b0d" + ], + "index": "pypi", + "version": "==0.1.3" + }, "pysocks": { "hashes": [ "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299", @@ -247,12 +572,12 @@ }, "pytest": { "hashes": [ - "sha256:1733f0620f6cda4095bbf0d9ff8022486e91892245bb9e7d5542c018f612f233", - "sha256:d507d4482197eac0ba2bae2e9babf0672eb333017bcedaa5fb1a3d42c1174b3f" + "sha256:7e8e5c5abd6e93cb1cc151f23e57adc31fcf8cfd2a3ff2da63e23f732de35db6", + "sha256:e9600ccf4f563976e2c99fa02c7624ab938296551f280835ee6516df8bc4ae8c" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==8.2.0" + "version": "==8.3.1" }, "pytest-html": { "hashes": [ @@ -271,6 +596,21 @@ "markers": "python_version >= '3.8'", "version": "==3.1.1" }, + "python-dateutil": { + "hashes": [ + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.9.0.post0" + }, + "pytz": { + "hashes": [ + "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", + "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" + ], + "version": "==2024.1" + }, "pyyaml": { "hashes": [ "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", @@ -329,14 +669,38 @@ "markers": "python_version >= '3.6'", "version": "==6.0.1" }, + "requests": { + "hashes": [ + "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6" + ], + "markers": "python_version >= '3.8'", + "version": "==2.32.3" + }, + "s3transfer": { + "hashes": [ + "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6", + "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69" + ], + "markers": "python_version >= '3.8'", + "version": "==0.10.2" + }, "selenium": { "hashes": [ - "sha256:0bd564ee166980d419a8aaf4ac00289bc152afcf2eadca5efe8c8e36711853fd", - "sha256:b1d0c33b38ca27d0499183e48e1dd09ff26973481f5d3ef2983073813ae6588d" + "sha256:128d099e66284437e7128d2279176ec7a06e6ec7426e167f5d34987166bd8f46", + "sha256:3a8d9f23dc636bd3840dd56f00c2739e32ec0c1e34a821dd553e15babef24477" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==4.20.0" + "version": "==4.23.1" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" }, "sniffio": { "hashes": [ @@ -346,6 +710,39 @@ "markers": "python_version >= '3.7'", "version": "==1.3.1" }, + "snowflake-connector-python": { + "hashes": [ + "sha256:019b8a61e5af689451d502df2af8793fc6f20b5b0a3548fd8ad03aa8b62e7f2d", + "sha256:1aa34aec0f96d7fc7271e38c68ee0d58529875d05e084afb4fc8f09b694643c4", + "sha256:21cbaef51fbed719de01155079df3d004cee963d3723c1ebdb8980923f893e04", + "sha256:2735e16fffded0900f7484030613b79699afc1ed4e5cff086bd139a0ce965594", + "sha256:320e0b6f8cd8556e19c8b87249c931700238b2958313afc7a33108d67da87d82", + "sha256:368e46f1d079056e028bfe8f7171fabef62eb00bcf590df294220b7a5be5d56c", + "sha256:3c06bfba4a329fd4ec3feba0ada7b31f86ed4e156a9766bced52c2814d001fd2", + "sha256:45f9b9678694f10571c1f7ec7d0d741663ad0ff61a71ae53aa71be47faa19978", + "sha256:564752d22accc43351b50f676b03aa9f2b441be2641e3cf9a7790faf54eff210", + "sha256:60675fd83022daef40541d717d006695149c512b283e35741b61a4f48ba537e9", + "sha256:6a0cc03fb44808f3ddc464ee272f141564c8daea14475e1df5c2a54c7acb2ddf", + "sha256:6e245b84c164433454ce49d78e6bcf5c2e62e25657358bf34ab533166e588f80", + "sha256:85a5565b8813d164f33f32a825a70443008fe009aae050307f128a1ca892f9ed", + "sha256:880e6e95171cd7374a86da14132fdfc4b622665f134561f4d43e3f35bdacf67d", + "sha256:8d33d845e4c68d33e73a9f64100b53342c18607ac25c4f2a27dbed2078078d12", + "sha256:a567b937b0179d1e95a8ad7200943d286f38d0e76df90af10f747ed9149dd681", + "sha256:a92c9a19a23033df709e63baa6ccdf6eff65210143a8c9c67a0a24bba862034b", + "sha256:acf84b07dd2f22adfaa7d52ccd6be1722bd5a0e2b1a9b08681c3851bea05768f", + "sha256:c06a8e2e12284b4a4d462d0073fb4983e90ad2d6a2382926f9e3409f06c81d0b", + "sha256:c1d43bfaa885aab712f14f9ced232abe5023adfca7fbf7a7a0768a162523e9d6", + "sha256:c2bbdbbb028d7d542815ed68b28200728aa6707b9354e3a447fdc8c7a34bcdce", + "sha256:c2f621030b26a220711c64518e00059736b79c1da53afa6a8ce68b31c1941014", + "sha256:c86d4a7d49f42ea0bb34218cb49c401ba995892abcfb509ea749cd0a74a8b28a", + "sha256:dc333fcfc383a8cab8bd7e890a7c76703e26598925a05954c75d2c50bff06071", + "sha256:edf28df8be24845cfcec653b160d2b8c048d5cb0c85b051f4957f0b0aae1e493", + "sha256:f27d6a1a180832c7b551d38df1094a70fb79917f90c57893b9ce7e219362f6c1" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==3.12.0" + }, "sortedcontainers": { "hashes": [ "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", @@ -353,13 +750,38 @@ ], "version": "==2.4.0" }, - "trio": { + "tomlkit": { "hashes": [ - "sha256:9b41f5993ad2c0e5f62d0acca320ec657fdb6b2a2c22b8c7aed6caf154475c4e", - "sha256:e6458efe29cc543e557a91e614e2b51710eba2961669329ce9c862d50c6e8e81" + "sha256:08ad192699734149f5b97b45f1f18dad7eb1b6d16bc72ad0c2335772650d7b72", + "sha256:7075d3042d03b80f603482d69bf0c8f345c2b30e41699fd8883227f89972b264" ], "markers": "python_version >= '3.8'", - "version": "==0.25.0" + "version": "==0.13.0" + }, + "tornado": { + "hashes": [ + "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8", + "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f", + "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4", + "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3", + "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14", + "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842", + "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9", + "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698", + "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7", + "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d", + "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4" + ], + "markers": "python_version >= '3.8'", + "version": "==6.4.1" + }, + "trio": { + "hashes": [ + "sha256:67c5ec3265dd4abc7b1d1ab9ca4fe4c25b896f9c93dac73713778adab487f9c4", + "sha256:bb9c1b259591af941fccfbabbdc65bc7ed764bd2db76428454c894cd5e3d2032" + ], + "markers": "python_version >= '3.8'", + "version": "==0.26.0" }, "trio-websocket": { "hashes": [ @@ -371,22 +793,38 @@ }, "typing-extensions": { "hashes": [ - "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0", - "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a" + "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", + "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], "markers": "python_version >= '3.8'", - "version": "==4.11.0" + "version": "==4.12.2" + }, + "tzdata": { + "hashes": [ + "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd", + "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252" + ], + "markers": "python_version >= '2'", + "version": "==2024.1" }, "urllib3": { "extras": [ "socks" ], "hashes": [ - "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", - "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" + "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472", + "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168" ], "markers": "python_version >= '3.8'", - "version": "==2.2.1" + "version": "==2.2.2" + }, + "websocket-client": { + "hashes": [ + "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", + "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da" + ], + "markers": "python_version >= '3.8'", + "version": "==1.8.0" }, "win32-setctime": { "hashes": [ diff --git a/Doczy.AI_Automation/config/aws_conn.py b/Doczy.AI_Automation/config/aws_conn.py new file mode 100644 index 0000000..6fe9589 --- /dev/null +++ b/Doczy.AI_Automation/config/aws_conn.py @@ -0,0 +1,35 @@ +import boto3 +from botocore.exceptions import ClientError +import snowflake.connector + + +def get_files(s3_client, path, client_bucket, batch_id): + batch_objects = s3_client.list_objects_v2(Bucket=client_bucket, + Prefix=path+"/"+batch_id, + Delimiter='/') + file_list = [] + for prefix in batch_objects['CommonPrefixes']: + file_list.append(prefix['Prefix'][:-1].split('/')[-1]) + file_count = len(file_list) + return file_count, file_list + + +def get_s3_client(): + region_name = "us-east-2" + s3_client = boto3.client('s3', + region_name=region_name) + return s3_client + + +def get_snowflake_conn(schema): + secret = ''#get_secret() + secret_dict = eval(secret) + conn = snowflake.connector.connect( + user=secret_dict['user'], + password=secret_dict['password'], + account=secret_dict['account_alias'], + warehouse=secret_dict['warehouse'], + database=secret_dict['database'], + schema=schema + ) + return conn \ No newline at end of file diff --git a/Doczy.AI_Automation/config/env.yaml b/Doczy.AI_Automation/config/env.yaml index 6b72106..4328672 100644 --- a/Doczy.AI_Automation/config/env.yaml +++ b/Doczy.AI_Automation/config/env.yaml @@ -1,21 +1,33 @@ environment: - url_interface_0: "https://doczy.aarete.com:8500/" - url_interface_1: "https://doczy.aarete.com:8501/" - username: "ahinge@aarete.com" - password: "" - contract_files_path: "C:\\Ankit\\Marked Up PDFs\\test\\" - contract_files: - - '050540697 Deepak Nanda 2017 PHSP MU1.pdf' - - '2014-01-01 United Health Centers San Joaquin AMD MU (1).pdf' - - '2019 06 01 Dr Raul Rivera & Associates (Amend 1)_MU.pdf' - - 'Bay Ridge Medical Imaging Universal (113045841) MU.pdf' - - 'Baz Allergy Asthma & Sinus_MU.pdf' - - 'BoilerplateAnc_Boro Park Obstetrics & Gynecology PC - Amendment 11.2.12_MU.pdf' - - 'Boilerplate_Prof_Premier Health Specialists Inc Third Amendment_A.4_20160101_MU.pdf' - - 'Boilerplate_TX Amendment Mission Health Network effective_040114 MU.pdf' - - 'Custom_Prof_Anna Suponya MD PC - Agreement Provider Signed_MU (1).pdf' - - 'Custom_TX - MP AMENDMENT - MISSION HEALTH NETWORK - MU.pdf' - - 'Delaware First Health_First State Homecare Agency_212260_7 MU.pdf' - - 'ICMProviderAgreement_AlisonUnitisLPCMH_227710_5.pdf' - - 'Molina Healthcare of Texas, Inc. Amendment 4 - HIX ACA__EFF 01012016_MU.pdf' - - 'Prof1_ICM135705_ICMProviderAgreement_135705 IPA of NJ MU.pdf' \ No newline at end of file + DEV: + platform: 'firefox' + url_interface_0: "https://doczydev.aarete.com:8500/" + url_interface_1: "https://doczydev.aarete.com:8501/" + url_interface_2: "https://doczydev.aarete.com:8502/" + username: "ahinge@aarete.com" + password: "" + timeout: 20 + contract_files_path: "C:\\Ankit\\test\\" + data_file_path: 'C:\\Ankit\\Code\\doczy.ai\\Doczy.AI_Automation\\data\\data.xlsx' + + UAT: + platform: 'firefox' + url_interface_0: "https://doczyuat.aarete.com:8500/" + url_interface_1: "https://doczyuat.aarete.com:8501/" + url_interface_2: "https://doczyuat.aarete.com:8502/" + username: "ahinge@aarete.com" + password: "" + timeout: 20 + contract_files_path: "C:\\Ankit\\test\\" + data_file_path: 'C:\\Ankit\\Code\\doczy.ai\\Doczy.AI_Automation\\data\\data.xlsx' + + PROD: + platform: 'firefox' + url_interface_0: "https://doczy.aarete.com:8500/" + url_interface_1: "https://doczy.aarete.com:8501/" + url_interface_2: "https://doczy.aarete.com:8502/" + username: "ahinge@aarete.com" + password: "" + timeout: 20 + contract_files_path: "C:\\Ankit\\test\\" + data_file_path: 'C:\\Ankit\\Code\\doczy.ai\\Doczy.AI_Automation\\data\\data.xlsx' \ No newline at end of file diff --git a/Doczy.AI_Automation/data/data.xlsx b/Doczy.AI_Automation/data/data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8bb67fda0eb905d7adb36397bdc3f5fd2c8578c9 GIT binary patch literal 10301 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 G?f(JS+YCbh literal 0 HcmV?d00001 diff --git a/Doczy.AI_Automation/elements/__init__.py b/Doczy.AI_Automation/elements/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Doczy.AI_Automation/elements/interface_0_elements.py b/Doczy.AI_Automation/elements/interface_0_elements.py new file mode 100644 index 0000000..e8ee273 --- /dev/null +++ b/Doczy.AI_Automation/elements/interface_0_elements.py @@ -0,0 +1,34 @@ +from selenium.webdriver.common.by import By + +from utils.element_related_methods import get_clickable_element, get_invisible_element, get_element + + +class Interface_0_elements: + client_name_dropdown_xpath = '//div[@data-testid="stSelectbox"]' + client_list_xpath = '//li' + file_input_xpath = "//input[@type='file']" + file_input_progress_xpath = '//div[@role="progressbar"]'#'//div[@class="stFileUploaderFileName"]' + create_batch_btn_xpath = "//div[@data-testid='stButton']/button[@data-testid='baseButton-secondary']" + p_element_xpath = "//div[@data-testid='stCodeBlock']/pre/div/code/span" + error_xpath = "//div[@data-testid='stNotificationContentError']/div/div/p" + + def get_client_name_dropdown(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.client_name_dropdown_xpath) + + def get_client_list(self, driver): + return driver.find_elements(By.XPATH, self.client_list_xpath) + + def get_file_input(self, driver, config): + return get_invisible_element(driver, config, By.XPATH, self.file_input_xpath) + + def get_file_input_progress(self, driver): + return driver.find_elements(By.XPATH, self.file_input_progress_xpath) + + def get_create_batch_btn(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.create_batch_btn_xpath) + + def get_p_element(self, driver, config): + return get_element(driver, config, By.XPATH, self.p_element_xpath) + + def get_error_toast(self, driver, config): + return get_element(driver, config, By.XPATH, self.error_xpath) diff --git a/Doczy.AI_Automation/elements/interface_1_elements.py b/Doczy.AI_Automation/elements/interface_1_elements.py new file mode 100644 index 0000000..8f58a9a --- /dev/null +++ b/Doczy.AI_Automation/elements/interface_1_elements.py @@ -0,0 +1,46 @@ +from selenium.webdriver.common.by import By + +from utils.element_related_methods import get_clickable_element, get_invisible_element, get_element + + +class Interface_1_elements: + client_name_dropdown_xpath = '//div[@data-testid="stSelectbox"]' + client_list_xpath = '//li' + batch_id_xpath = '(//div[@data-testid="stSelectbox"])[2]' + batch_id_list_xpath = '//li' + checkbox_list_xpath = "//div[@data-testid='stCheckbox']" + read_the_contracts_from_path_btn_xpath = "//button[.//p[text()='Read the contracts from Path']]" + result_table_xpath = "//table[@aria-colcount='9']" + table_rows_xpath = ".//tbody/tr" + run_doczy_ai_pipeline_btn_xpath = "//button[.//p[text()='Run Doczy.AI Pipeline']]" + error_xpath = "//div[@data-testid='stNotificationContentError']/div/div/p" + + def get_client_name_dropdown(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.client_name_dropdown_xpath) + + def get_client_list(self, driver): + return driver.find_elements(By.XPATH, self.client_list_xpath) + + def get_batch_id(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.batch_id_xpath) + + def get_batch_id_list(self, driver): + return driver.find_elements(By.XPATH, self.batch_id_list_xpath) + + def get_checkbox_list(self, driver): + return driver.find_elements(By.XPATH, self.checkbox_list_xpath) + + def get_read_the_contracts_from_path_btn(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.read_the_contracts_from_path_btn_xpath) + + def get_result_table(self, driver, config): + return get_element(driver, config, By.XPATH, self.result_table_xpath) + + def get_table_rows(self, result_table): + return result_table.find_elements(By.XPATH, self.table_rows_xpath) + + def get_run_doczy_ai_pipeline_btn(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.run_doczy_ai_pipeline_btn_xpath) + + def get_error(self, driver, config): + return get_element(driver, config, By.XPATH, self.error_xpath) diff --git a/Doczy.AI_Automation/elements/interface_2_elements.py b/Doczy.AI_Automation/elements/interface_2_elements.py new file mode 100644 index 0000000..9ae454e --- /dev/null +++ b/Doczy.AI_Automation/elements/interface_2_elements.py @@ -0,0 +1,58 @@ +from selenium.webdriver.common.by import By + +from utils.element_related_methods import get_clickable_element, get_invisible_element, get_element + + +class Interface_2_elements: + client_name_dropdown_xpath = '//div[@data-testid="stSelectbox"]' + client_list_xpath = '//li' + batch_id_xpath = '(//div[@data-testid="stSelectbox"])[2]' + batch_id_list_xpath = '//li' + contract_name_xpath = '(//div[@data-testid="stSelectbox"])[3]' + contract_name_list_xpath = '//li' + field_group_xpath = '(//div[@data-testid="stSelectbox"])[4]' + field_group_list_xpath = '//li' + show_result_btn_xpath = "//button[.//p[text()='Show Results']]" + result_table_xpath = "//table[@aria-colcount='9']" + table_rows_xpath = ".//tbody/tr" + kickoff_database_btn_xpath = "//button[.//p[text()='Kickoff Database Integration']]" + error_xpath = "//div[@data-testid='stNotificationContentError']/div/div/p" + + def get_client_name_dropdown(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.client_name_dropdown_xpath) + + def get_client_list(self, driver): + return driver.find_elements(By.XPATH, self.client_list_xpath) + + def get_batch_id(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.batch_id_xpath) + + def get_batch_id_list(self, driver): + return driver.find_elements(By.XPATH, self.batch_id_list_xpath) + + def get_contract_name(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.contract_name_xpath) + + def get_contract_name_list(self, driver): + return driver.find_elements(By.XPATH, self.contract_name_list_xpath) + + def get_field_group(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.field_group_xpath) + + def get_field_group_list(self, driver): + return driver.find_elements(By.XPATH, self.field_group_list_xpath) + + def get_show_result_btn(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.show_result_btn_xpath) + + def get_result_table(self, driver, config): + return get_element(driver, config, By.XPATH, self.result_table_xpath) + + def get_table_rows(self, result_table): + return result_table.find_elements(By.XPATH, self.table_rows_xpath) + + def get_kickoff_database_btn(self, driver, config): + return get_clickable_element(driver, config, By.XPATH, self.kickoff_database_btn_xpath) + + def get_error_toast(self, driver, config): + return get_element(driver, config, By.XPATH, self.error_xpath) diff --git a/Doczy.AI_Automation/pages/interface_0_page_objects.py b/Doczy.AI_Automation/pages/interface_0_page_objects.py index 09cbf11..9d28204 100644 --- a/Doczy.AI_Automation/pages/interface_0_page_objects.py +++ b/Doczy.AI_Automation/pages/interface_0_page_objects.py @@ -2,59 +2,72 @@ import random import time from selenium.common import InvalidArgumentException -from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait -from utils.element_related_methods import get_clickable_element, get_element, get_invisible_element +from elements.interface_0_elements import Interface_0_elements from utils.logger import get_logger +from utils.reader import read_files -class Interface_0: +class Interface_0(Interface_0_elements): logger = get_logger() p_element = None - def __init__(self, driver): + def __init__(self, driver, config): self.driver = driver - self.client_name_dropdown = get_clickable_element(driver, By.XPATH, - '/html/body/div/div[1]/div[1]/div/div/div/section/div[1]/div/div/div/div[3]/div[2]/div/div/div/div/div/div/div') + self.config = config - def select_client(self): - self.client_name_dropdown.click() - client_list = self.driver.find_elements(By.XPATH, "//li") + def select_client(self, client_name=''): + client_name_dropdown = super().get_client_name_dropdown(self.driver, self.config) + client_name_dropdown.click() + client_list = super().get_client_list(self.driver) assert len(client_list) > 0 - random_number = random.randint(1, len(client_list) - 1) - time.sleep(1) - self.logger.info(f"Selected Client Name: {client_list[random_number].text}") - client_name = client_list[random_number].text - client_list[random_number].click() - time.sleep(5) + if client_name == '': + random_number = random.randint(0, len(client_list) - 1) + time.sleep(1) + self.logger.info(f"Selected Client Name: {client_list[random_number].text}") + client_name = client_list[random_number].text + client_list[random_number].click() + else: + for client in client_list: + if client_name == client.text: + client.click() + self.logger.info(f"Selected Client Name: {client_name}") + break + time.sleep(20) return client_name - def upload_files(self, config): - # file_input = self.driver.find_element(By.XPATH, "//input[@type='file']") + def upload_files(self, client_name): + file_list = "" try: - file_input = get_invisible_element(self.driver, By.XPATH, "//input[@type='file']") - contract_files = config["contract_files"] - random_count = random.randint(1, len(contract_files)) - random_elements = random.sample(contract_files, random_count) - contracts = f'\n{config['contract_files_path']}'.join(random_elements) - self.logger.info(f"Selected Contract File Name: {', '.join(random_elements)}") - file_input.send_keys(f"{config['contract_files_path']}{contracts}") - time.sleep(1) + file_input = super().get_file_input(self.driver, self.config) + file_list = read_files(self.config["contract_files_path"]+client_name+"\\") + files = '\n'.join(file_list) + print(files) + file_input.send_keys(files) + self.logger.info(f"Uploading files...") + time.sleep(10) WebDriverWait(self.driver, timeout=50).until( - lambda browser: len(browser.find_elements(By.XPATH, '//div[@role="progressbar"]')) == 0 + lambda browser: len(super().get_file_input_progress(browser)) == 0 ) - time.sleep(5) - except InvalidArgumentException: - self.logger.info(f"File not found in test folder{', '.join(random_elements)}") - except: + time.sleep(10) + except InvalidArgumentException as e: + print(e) + self.logger.info(f"File not found in test folder {', '.join(file_list)}") + except Exception as e1: + print(e1) self.logger.info(f"Exception occur") def create_batch(self): - create_batch_btn = self.driver.find_element(By.XPATH, "//div[@data-testid='stButton']/button[@data-testid='baseButton-secondary']") + create_batch_btn = super().get_create_batch_btn(self.driver, self.config) create_batch_btn.click() - self.logger.info("Creating batch") + # self.logger.info("Creating batch") time.sleep(3) - self.p_element = get_element(self.driver, By.XPATH, "//p[starts-with(., 'batch')]") + def verify_message(self, tc): time.sleep(3) + if tc == 'POS': + return super().get_p_element(self.driver, self.config) + else: + return super().get_error_toast(self.driver, self.config) + diff --git a/Doczy.AI_Automation/pages/interface_1_page_objects.py b/Doczy.AI_Automation/pages/interface_1_page_objects.py index 9cea7ea..a7363c8 100644 --- a/Doczy.AI_Automation/pages/interface_1_page_objects.py +++ b/Doczy.AI_Automation/pages/interface_1_page_objects.py @@ -5,71 +5,108 @@ from selenium.common import InvalidArgumentException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait +from elements.interface_1_elements import Interface_1_elements from utils.element_related_methods import get_clickable_element, get_element, get_invisible_element from utils.logger import get_logger -class Interface_1: +class Interface_1(Interface_1_elements): logger = get_logger() selected_batch = '' result_message = None p_element = None - def __init__(self, driver): + + def __init__(self, driver, config): self.driver = driver - self.client_name_dropdown = get_clickable_element(driver, By.XPATH, - '/html/body/div/div[1]/div[1]/div/div/div/section/div[1]/div/div/div/div[3]/div[2]/div/div/div/div/div/div/div') + self.config = config - def select_client(self): - self.client_name_dropdown.click() - client_list = self.driver.find_elements(By.XPATH, "//li") + def select_client(self, client_name=''): + client_name_dropdown = super().get_client_name_dropdown(self.driver, self.config) + client_name_dropdown.click() + client_list = super().get_client_list(self.driver) assert len(client_list) > 0 - random_number = random.randint(1, len(client_list) - 1) - time.sleep(1) - self.logger.info(f"Selected Client Name: {client_list[random_number].text}") - client_list[random_number].click() - time.sleep(5) + if client_name == '': + random_number = random.randint(0, len(client_list) - 1) + time.sleep(1) + self.logger.debug(f"Selected Client Name: {client_list[random_number].text}") + client_name = client_list[random_number].text + client_list[random_number].click() + else: + for client in client_list: + if client_name == client.text: + client.click() + self.logger.debug(f"Selected Client Name: {client_name}") + break + time.sleep(20) + return client_name - def select_batch(self): - batch_id = get_clickable_element(self.driver, By.XPATH, '/html/body/div[1]/div[1]/div[1]/div/div/div/section/div[1]/div/div/div/div[3]/div[2]/div/div/div/div/div/div/div') + def select_batch(self, batch_id_name=''): + batch_id = super().get_batch_id(self.driver, self.config) batch_id.click() - batch_id_list = self.driver.find_elements(By.XPATH, "//li") + batch_id_list = super().get_batch_id_list(self.driver) assert len(batch_id_list) > 0 - random_number = random.randint(2, len(batch_id_list) - 1) - self.selected_batch = batch_id_list[random_number].text - self.logger.info(f"Selected Batch: {batch_id_list[random_number].text}") - batch_id_list[random_number].click() + if batch_id_name == '': + random_number = random.randint(1, len(batch_id_list) - 1) + self.selected_batch = batch_id_list[random_number].text + time.sleep(1) + self.logger.debug(f"Selected Batch: {batch_id_list[random_number].text}") + batch_id_name = batch_id_list[random_number].text + time.sleep(1) + batch_id_list[random_number].click() + else: + for batch in batch_id_list: + if batch.text == batch_id_name: + batch.click() + self.selected_batch = batch_id_name + self.logger.debug(f"Selected Batch: {batch_id_name}") + break time.sleep(5) + return batch_id_name - def check_group_no(self): - checkbox_list = self.driver.find_elements(By.XPATH, "//div[@data-testid='stCheckbox']") + def check_group_no(self, group_checkbox=None): + if group_checkbox is None: + group_checkbox = [] + checkbox_list = super().get_checkbox_list(self.driver) assert len(checkbox_list) > 0 - random_number = random.randint(0, len(checkbox_list) - 1) - random_elements = random.sample(checkbox_list, random_number) - checked_groups = '' - for checkbox in random_elements: - checkbox.click() - checked_groups = f'{checked_groups}{checkbox.text}, ' - self.logger.info(f"checked Group No.: {checked_groups[:-2]}") + if(len(group_checkbox)>0): + checked_groups = '' + for checkbox in checkbox_list: + if checkbox.text in group_checkbox: + checkbox.click() + checked_groups = f'{checked_groups}{checkbox.text}, ' + self.logger.debug(f"checked Group No.: {checked_groups[:-2]}") + else: + random_number = random.randint(0, len(checkbox_list) - 1) + random_elements = random.sample(checkbox_list, random_number) + checked_groups = '' + for checkbox in random_elements: + time.sleep(1) + checkbox.click() + time.sleep(1) + checked_groups = f'{checked_groups}{checkbox.text}, ' + self.logger.debug(f"checked Group No.: {checked_groups[:-2]}") time.sleep(5) def click_read_the_contracts_from_path(self): - read_the_contracts_from_path_btn = get_clickable_element(self.driver, By.XPATH, '/html/body/div[1]/div[1]/div[1]/div/div/div/section/div[1]/div/div/div/div[6]/div/button') + read_the_contracts_from_path_btn = super().get_read_the_contracts_from_path_btn(self.driver, self.config) read_the_contracts_from_path_btn.click() time.sleep(5) def check_table_contain(self): - result_table = self.driver.find_element(By.XPATH, "//table[@aria-colcount='9']") - rows = result_table.find_elements(By.XPATH, ".//tbody/tr") + result_table = super().get_result_table(self.driver, self.config) + rows = super().get_table_rows(result_table) + for row in rows: + print(row) if len(rows) > 0: - self.logger.info(f"{len(rows)} contracts are read from batch: {self.selected_batch}") + self.logger.debug(f"{len(rows)} contracts are read from batch: {self.selected_batch}") assert True else: assert False time.sleep(5) def click_run_doczy_ai_pipeline(self): - run_doczy_ai_pipeline_btn = get_clickable_element(self.driver, By.XPATH, '/html/body/div[1]/div[1]/div[1]/div/div/div/section/div[1]/div/div/div/div[11]/div[2]/div/div/div/div/div/button') + run_doczy_ai_pipeline_btn = super().get_run_doczy_ai_pipeline_btn(self.driver, self.config) run_doczy_ai_pipeline_btn.click() time.sleep(3) - self.result_message = get_element(self.driver, By.XPATH, "//p[starts-with(., 'Success')]") + self.result_message = super().get_error(self.driver, self.config) time.sleep(3) diff --git a/Doczy.AI_Automation/pages/interface_2_page_objects.py b/Doczy.AI_Automation/pages/interface_2_page_objects.py new file mode 100644 index 0000000..4c9dcaa --- /dev/null +++ b/Doczy.AI_Automation/pages/interface_2_page_objects.py @@ -0,0 +1,118 @@ +import random +import time + +from selenium.common import InvalidArgumentException +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait + +from elements.interface_2_elements import Interface_2_elements +from utils.element_related_methods import get_clickable_element, get_element, get_invisible_element +from utils.logger import get_logger + + +class Interface_2(Interface_2_elements): + logger = get_logger() + selected_batch = '' + selected_contract = '' + selected_field_group = '' + result_message = None + p_element = None + + def __init__(self, driver, config): + self.driver = driver + self.config = config + + def select_client(self, client_name=''): + client_name_dropdown = super().get_client_name_dropdown(self.driver, self.config) + client_name_dropdown.click() + client_list = super().get_client_list(self.driver) + assert len(client_list) > 0 + if client_name == '': + random_number = random.randint(0, len(client_list) - 1) + time.sleep(1) + self.logger.info(f"Selected Client Name: {client_list[random_number].text}") + client_name = client_list[random_number].text + client_list[random_number].click() + else: + # assert client_name in client_list, "Selected Client not present" + for client in client_list: + print(client.text) + if client_name == client.text: + client.click() + break + time.sleep(20) + return client_name + + def select_batch(self, batch_id_name=''): + batch_id = super().get_batch_id(self.driver, self.config)#get_clickable_element(self.driver, By.XPATH, '/html/body/div/div[1]/div[1]/div/div/div/section[2]/div[1]/div/div/div/div[5]/div[2]/div/div/div/div/div') + batch_id.click() + batch_id_list = super().get_batch_id_list(self.driver)#self.driver.find_elements(By.XPATH, "//li") + assert len(batch_id_list) > 0 + if batch_id_name == '': + random_number = random.randint(1, len(batch_id_list) - 1) + self.selected_batch = batch_id_list[random_number].text + time.sleep(1) + self.logger.info(f"Selected Batch: {batch_id_list[random_number].text}") + batch_id_name = batch_id_list[random_number].text + time.sleep(1) + batch_id_list[random_number].click() + else: + assert batch_id_name in batch_id_list, "Selected Batch Id not present" + for batch in batch_id_list: + if batch.text == batch_id_name: + batch.click() + break + time.sleep(5) + return batch_id_name + + def select_contract(self): + contract = super().get_contract_name(self.driver, self.config) + contract.click() + contract_list = super().get_contract_name_list(self.driver) + assert len(contract_list) > 0 + random_number = random.randint(1, len(contract_list) - 1) + time.sleep(1) + self.selected_contract = contract_list[random_number].text + time.sleep(1) + self.logger.info(f"Selected contract: {contract_list[random_number].text}") + time.sleep(1) + contract_list[random_number].click() + time.sleep(5) + + def select_field_group(self): + field_group = super().get_field_group(self.driver, self.config) + field_group.click() + field_group_list = super().get_field_group_list(self.driver) + assert len(field_group_list) > 0 + random_number = random.randint(1, len(field_group_list) - 1) + time.sleep(1) + self.selected_field_group = field_group_list[random_number].text + time.sleep(1) + self.logger.info(f"Selected field froup: {field_group_list[random_number].text}") + time.sleep(1) + field_group_list[random_number].click() + time.sleep(5) + + def click_show_results(self): + show_result_btn = super().get_show_result_btn(self.driver, self.config) + show_result_btn.click() + time.sleep(15) + + def check_table_contain(self): + result_table = super().get_result_table(self.driver, self.config) + rows = super().get_table_rows(result_table) + if len(rows) > 0: + self.logger.info(f"{len(rows)} fields are read from contract: {self.selected_contract}") + assert True + else: + assert False + time.sleep(5) + + def click_kickoff_database_integration_btn(self): + kickoff_database_btn = super().get_kickoff_database_btn(self.driver, self.config) + kickoff_database_btn.click() + time.sleep(15) + + def check_error_message(self): + error_message = super().get_error_toast(self.driver, self.config) + return error_message.text diff --git a/Doczy.AI_Automation/pytest.ini b/Doczy.AI_Automation/pytest.ini index b3942f3..9267712 100644 --- a/Doczy.AI_Automation/pytest.ini +++ b/Doczy.AI_Automation/pytest.ini @@ -1,2 +1,2 @@ [pytest] -addopts = --html=reports/test_report.html --json=reports/test_report.json \ No newline at end of file +addopts = --html=reports/test_report.html --json=reports/test_report.json --alluredir=reports/allure-results \ No newline at end of file diff --git a/Doczy.AI_Automation/requirements.txt b/Doczy.AI_Automation/requirements.txt index 02e3f76..80c5789 100644 --- a/Doczy.AI_Automation/requirements.txt +++ b/Doczy.AI_Automation/requirements.txt @@ -1,3 +1,8 @@ +selenium~=4.23.1 +pytest~=8.3.1 +pandas~=2.2.2 loguru~=0.7.2 PyYAML~=6.0.1 -pytest~=8.2.0 \ No newline at end of file +boto3~=1.34.148 +pysnowflake~=0.1.3 +botocore~=1.34.148 \ No newline at end of file diff --git a/Doczy.AI_Automation/tests/conftest.py b/Doczy.AI_Automation/tests/conftest.py index 75de6ce..3123fec 100644 --- a/Doczy.AI_Automation/tests/conftest.py +++ b/Doczy.AI_Automation/tests/conftest.py @@ -1,21 +1,99 @@ +import datetime + +import allure import pytest from selenium import webdriver -from pages.interface_0_page_objects import Interface_0 -from utils.reader import read_yaml +from utils.reader import read_yaml, read_excel + + +# def pytest_runtest_makereport(item, call): +# # Your custom logic here +# # This function will be called automatically by pytest +# # with information about the test item and its outcome (call) +# # outcome = yield +# # rep = outcome.get_result() +# pass + + +# @pytest.hookimpl(tryfirst=True) +def pytest_html_report_title(report): + """Set the title of the HTML report dynamically.""" + current_datetime = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + report.title = f"Test Report {current_datetime}" + + +def client_list(): + file_path = 'C:\\Ankit\\Code\\doczy.ai\\Doczy.AI_Automation\\data\\data.xlsx' + sheet_name = 'client_data' + return read_excel(file_path, sheet_name, ['client']) @pytest.fixture -def driver(): - driver = webdriver.Chrome() - # return driver - yield driver +def client_list_fixture(): + return client_list() + + +@pytest.fixture +def groups(): + file_path = 'C:\\Ankit\\Code\\doczy.ai\\Doczy.AI_Automation\\data\\data.xlsx' + sheet_name = 'groups' + return read_excel(file_path, sheet_name, ['groups']) + + +def batch_list(): + file_path = 'C:\\Ankit\\Code\\doczy.ai\\Doczy.AI_Automation\\data\\data.xlsx' + sheet_name = 'batch_data' + return read_excel(file_path, sheet_name, ['client', 'Batch']) + + +@pytest.fixture +@allure.title("Creating Web Driver") +def driver(config, request): + browser = request.config.getoption('--browser') + if browser == 'remote': + driver = webdriver.Remote() + yield driver + elif browser == 'firefox': + driver = webdriver.Firefox() + yield driver + elif browser == 'edge': + driver = webdriver.Edge() + yield driver + else: + driver = webdriver.Chrome() + driver.maximize_window() + yield driver + # if config['platform'] == 'remote': + # driver = webdriver.Remote() + # yield driver + # elif config['platform'] == 'firefox': + # driver = webdriver.Firefox() + # yield driver + # elif config['platform'] == 'edge': + # driver = webdriver.Edge() + # yield driver + # else: + # driver = webdriver.Chrome() + # yield driver if driver is not None: driver.quit() @pytest.fixture -def config(): - return read_yaml("C:\\Ankit\\Code\\doczy.ai\\Doczy.AI_Automation\\config\\env.yaml")["environment"] +def config(request): + env = request.config.getoption('--env') + return read_yaml_config(env) + +def read_yaml_config(env): + yaml_file_path = "C:\\Ankit\\Code\\doczy.ai\\Doczy.AI_Automation\\config\\" + yaml_file_name = "env.yaml" + + return read_yaml(yaml_file_path, yaml_file_name)["environment"][env] + + +def pytest_addoption(parser): + parser.addoption('--env', action='store', default='DEV', help='Environment to run tests against') + parser.addoption('--browser', action='store', default='firefox', help='browser to run test on') diff --git a/Doczy.AI_Automation/tests/test_end_to_end.py b/Doczy.AI_Automation/tests/test_end_to_end.py index b76b0ce..9c2a735 100644 --- a/Doczy.AI_Automation/tests/test_end_to_end.py +++ b/Doczy.AI_Automation/tests/test_end_to_end.py @@ -1,12 +1,14 @@ import random import time -from selenium.webdriver.common.by import By -from selenium.webdriver.support.wait import WebDriverWait +import allure +import pytest from pages.Pre_sign_in_page import Pre_sign_in_page from pages.interface_0_page_objects import Interface_0 from pages.interface_1_page_objects import Interface_1 +from pages.interface_2_page_objects import Interface_2 +from tests.conftest import client_list from utils.common_methods import sign_in from utils.element_related_methods import get_title, get_invisible_element from utils.logger import get_logger @@ -16,46 +18,73 @@ class Test_end_to_end: logger = get_logger() - def test_validate_navigation(self, driver, config): - self.logger.info("Verifying S3 bucket is created with batch ID") - driver.get(config['url_interface_0']) - sign_in(driver, config) - self.logger.info("Signed in successful") - interface_0_page = Interface_0(driver) - interface_0_page.select_client() - interface_0_page.upload_files(config) - interface_0_page.create_batch() - self.logger.info(f"Created batch with Batch ID: {interface_0_page.p_element.text}") - self.logger.info("Verifying Single Sign-On (SSO) Login for Interface 1") - driver.get(config['url_interface_1']) - # sign_in(driver, config) - pre_sign_in_page = Pre_sign_in_page(driver) - pre_sign_in_page.click_sign_in_link() - self.logger.info("Signed in successful") - get_title(driver, "interface_1 · Streamlit") - interface_1 = Interface_1(driver) - interface_1.select_client() - interface_1.select_batch() - interface_1.check_group_no() - interface_1.click_read_the_contracts_from_path() - interface_1.check_table_contain() - interface_1.click_run_doczy_ai_pipeline() - if interface_1.result_message.text is "Success": - self.logger.info(f"Files are passed to Doczy.AI pipeline") - assert True - else: - self.logger.info(f"Files are passed to Doczy.AI pipeline") - assert True - - # def test_verify_sign_in(self, driver, config): - # self.logger.info("Verifying Single Sign-On (SSO) Login for Interface 0") - # driver.get(config['url_interface_0']) - # sign_in(driver, config) - # self.logger.info("Signed in successful") - # get_title(driver, "interface_0 · Streamlit") - # if driver.title == 'interface_0 · Streamlit': - # self.logger.info("Interface 0 page opened successfully") - # assert True - # else: - # self.logger.info("Interface 0 page not opened successfully") - # assert False \ No newline at end of file + # @pytest.mark.skip("Due to broken functionality") + @pytest.mark.parametrize("client", client_list()) + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for End to end") + @allure.sub_suite("Tests for End to end functionality") + @allure.title("Verifying End to end functionality") + @allure.feature('End to end') + @allure.story('Verifying End to end functionality') + @allure.severity(allure.severity_level.CRITICAL) + def test_end_to_end(self, client, driver, config, groups): + self.logger.info("Verifying End to end functionality") + driver.get(config['url_interface_0'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P90Kn8ixTenU_xRich4oROh6FiAIvqe9IcmtiRPSuy7Cl3U70LQWDBnyGZF1wF2US5pmZAl3cYSs3CXilUakzjFaRQS0hZDH-aAb1gwPAtMLD8kA5R0r8ZSuFDfE5TL30BocqNvItA96_6L9DmagcfQmtFhimBmT9zuiGWjDb13rNFI97_UyUojskrzjPLW_PSP_ynOqk9bKCGlsEU4mqnUfHW0HRarnk4nrv-H7mp4LXmHxlpNIUJjIT4lp1vhFz0TdsPXkTypHOhgjPQ6LA0S6NFcdd3pbejPGiRibqwOdS9HI2nYk4g6-FEO7-jRiEchFn_CeXILamMPkZuh4HXvvITZxkYfGHUXqap2mABFXvBknDT0QXqyonjknLCl8-HBmpRt8xe3D5cm95P_147j63uKS3CK9HM7aTAJ9aHAcBwkiF4axlYMoG9WRqC8RbPKaYmBKhcjScCNorqQRKbElXi0O4tkJwkS-CxLElQtQYhwdd1sAxLRSNg4WPz4RN8eH2osmh7RlZz3NrLe465U0PMIFYVRmJSEmiBilYY1LC-Ydg521gxePSpK882qOxJe4URjD2PziYAZ0mFVDvWpsLNtbV3B67mPBlyJD98gkcUsaY-34bmqRxfzbCJRxqBmBrLke-Y4vV16r4m4aAgNIH_sz9nC61hoB46UDpjiwYvMrCRDMrRthsUYD3FpA2CCxTmgNBXYZggLuHrJ_U7pHL71owHdv94yKVmNZOm4D8qs3-0y3zlYzlOC8f-RQQ1WRr7J20L1iN5VOesrv6xwVYS9EQRPOahkmOdwz1LrAcaDoxpr9CI&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + with allure.step("Signing in"): + # sign_in(driver, config) + self.logger.info("Signed in successful") + with allure.step("Selecting Client"): + interface_0_page = Interface_0(driver, config) + client = interface_0_page.select_client(client) + with allure.step("Uploading files"): + interface_0_page.upload_files(client) + with allure.step("Creating Batch"): + interface_0_page.create_batch() + with allure.step("Asserting Batch Creating"): + assert interface_0_page.verify_message('POS').startswith("batch_") + batch = interface_0_page.verify_message('POS') + self.logger.info(f"Created batch with Batch ID: {batch}") + with allure.step('Navigating to interface 1'): + driver.get(config['url_interface_1'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P90Kn8ixTenU_xRich4oROh6FiAIvqe9IcmtiRPSuy7Cl3U70LQWDBnyGZF1wF2US5pmZAl3cYSs3CXilUakzjFaRQS0hZDH-aAb1gwPAtMLD8kA5R0r8ZSuFDfE5TL30BocqNvItA96_6L9DmagcfQmtFhimBmT9zuiGWjDb13rNFI97_UyUojskrzjPLW_PSP_ynOqk9bKCGlsEU4mqnUfHW0HRarnk4nrv-H7mp4LXmHxlpNIUJjIT4lp1vhFz0TdsPXkTypHOhgjPQ6LA0S6NFcdd3pbejPGiRibqwOdS9HI2nYk4g6-FEO7-jRiEchFn_CeXILamMPkZuh4HXvvITZxkYfGHUXqap2mABFXvBknDT0QXqyonjknLCl8-HBmpRt8xe3D5cm95P_147j63uKS3CK9HM7aTAJ9aHAcBwkiF4axlYMoG9WRqC8RbPKaYmBKhcjScCNorqQRKbElXi0O4tkJwkS-CxLElQtQYhwdd1sAxLRSNg4WPz4RN8eH2osmh7RlZz3NrLe465U0PMIFYVRmJSEmiBilYY1LC-Ydg521gxePSpK882qOxJe4URjD2PziYAZ0mFVDvWpsLNtbV3B67mPBlyJD98gkcUsaY-34bmqRxfzbCJRxqBmBrLke-Y4vV16r4m4aAgNIH_sz9nC61hoB46UDpjiwYvMrCRDMrRthsUYD3FpA2CCxTmgNBXYZggLuHrJ_U7pHL71owHdv94yKVmNZOm4D8qs3-0y3zlYzlOC8f-RQQ1WRr7J20L1iN5VOesrv6xwVYS9EQRPOahkmOdwz1LrAcaDoxpr9CI&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # pre_sign_in_page = Pre_sign_in_page(driver) + # pre_sign_in_page.click_sign_in_link() + # self.logger.info("Signed in successful") + get_title(driver, config, "interface_1 · Streamlit") + with allure.step('Selecting Client'): + interface_1 = Interface_1(driver, config) + interface_1.select_client(client) + with allure.step('Selecting Batch'): + interface_1.select_batch(batch) + with allure.step('Selecting Groups'): + interface_1.check_group_no(groups) + with allure.step('Reading Contracts from S3 Bucket'): + interface_1.click_read_the_contracts_from_path() + interface_1.check_table_contain() + with allure.step('Running Doczy.AI Pipeline'): + interface_1.click_run_doczy_ai_pipeline() + if interface_1.result_message.text == "Success": + self.logger.info(f"Files are passed to Doczy.AI pipeline") + assert True + else: + self.logger.info(f"Files are unable to passed to Doczy.AI pipeline") + assert False + with allure.step("Signing in"): + time.sleep(900) + driver.get(config[ + 'url_interface_2'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P90Kn8ixTenU_xRich4oROh6FiAIvqe9IcmtiRPSuy7Cl3U70LQWDBnyGZF1wF2US5pmZAl3cYSs3CXilUakzjFaRQS0hZDH-aAb1gwPAtMLD8kA5R0r8ZSuFDfE5TL30BocqNvItA96_6L9DmagcfQmtFhimBmT9zuiGWjDb13rNFI97_UyUojskrzjPLW_PSP_ynOqk9bKCGlsEU4mqnUfHW0HRarnk4nrv-H7mp4LXmHxlpNIUJjIT4lp1vhFz0TdsPXkTypHOhgjPQ6LA0S6NFcdd3pbejPGiRibqwOdS9HI2nYk4g6-FEO7-jRiEchFn_CeXILamMPkZuh4HXvvITZxkYfGHUXqap2mABFXvBknDT0QXqyonjknLCl8-HBmpRt8xe3D5cm95P_147j63uKS3CK9HM7aTAJ9aHAcBwkiF4axlYMoG9WRqC8RbPKaYmBKhcjScCNorqQRKbElXi0O4tkJwkS-CxLElQtQYhwdd1sAxLRSNg4WPz4RN8eH2osmh7RlZz3NrLe465U0PMIFYVRmJSEmiBilYY1LC-Ydg521gxePSpK882qOxJe4URjD2PziYAZ0mFVDvWpsLNtbV3B67mPBlyJD98gkcUsaY-34bmqRxfzbCJRxqBmBrLke-Y4vV16r4m4aAgNIH_sz9nC61hoB46UDpjiwYvMrCRDMrRthsUYD3FpA2CCxTmgNBXYZggLuHrJ_U7pHL71owHdv94yKVmNZOm4D8qs3-0y3zlYzlOC8f-RQQ1WRr7J20L1iN5VOesrv6xwVYS9EQRPOahkmOdwz1LrAcaDoxpr9CI&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # pre_sign_in_page = Pre_sign_in_page(driver) + # pre_sign_in_page.click_sign_in_link() + # self.logger.info("Signed in successful") + get_title(driver, config, "interface_2 · Streamlit") + with allure.step("Selecting Client"): + interface_2 = Interface_2(driver, config) + interface_2.select_client(client) + with allure.step("Selecting Batch"): + interface_2.select_batch(batch) + with allure.step("Selecting Contract"): + interface_2.select_contract() + with allure.step("Selecting field Group"): + interface_2.select_field_group() + with allure.step("Click on 'Show Result' Button"): + interface_2.click_show_results() + interface_2.check_table_contain() diff --git a/Doczy.AI_Automation/tests/test_interface_0.py b/Doczy.AI_Automation/tests/test_interface_0.py index c36f917..22cf759 100644 --- a/Doczy.AI_Automation/tests/test_interface_0.py +++ b/Doczy.AI_Automation/tests/test_interface_0.py @@ -1,22 +1,30 @@ -import random -import time - -from selenium.common import InvalidArgumentException +import allure +from config.aws_conn import get_s3_client +from pages.Pre_sign_in_page import Pre_sign_in_page from pages.interface_0_page_objects import Interface_0 from utils.element_related_methods import get_title from utils.common_methods import sign_in from utils.logger import get_logger +import boto3 class Test_interface_0: logger = get_logger() + # @allure.label("type", 'smoke') + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 0") + @allure.sub_suite("Tests for Navigation") + @allure.title("Verifying designated Interface 0 Page opens successfully") + @allure.feature('Interface 0') + @allure.story('Verifying designated Interface 0 Page opens successfully') + @allure.severity(allure.severity_level.CRITICAL) def test_validate_navigation(self, driver, config): self.logger.info("Verifying designated Interface 0 Page opens successfully") driver.get(config['url_interface_0']) - get_title(driver, "interface_0 · Streamlit") + get_title(driver, config, "interface_0 · Streamlit") if driver.title == 'interface_0 · Streamlit': self.logger.info("Designated Interface 0 Page opened successfully") assert True @@ -24,12 +32,20 @@ class Test_interface_0: self.logger.info("Designated Interface 0 Page not opened successfully") assert False + # @allure.label('type', 'regression', 'smoke') + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 0") + @allure.sub_suite("Tests for Authentication") + @allure.title("Verifying Single Sign-On (SSO) Login for Interface 0") + @allure.feature('Interface 0') + @allure.story('Verifying Single Sign-On (SSO) Login for Interface 0') + @allure.severity(allure.severity_level.CRITICAL) def test_verify_sign_in(self, driver, config): self.logger.info("Verifying Single Sign-On (SSO) Login for Interface 0") - driver.get(config['url_interface_0']) - sign_in(driver, config) + driver.get(config['url_interface_0'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P-Xu65_k1cptZUCoWDROksYjcCYq_DvUcJbXG9MczlC6LlsO80A1Y4mYcEajsGirxfVgaxYazfwYb5sXUbARKILzxaoqtvPuW3nJDMPcIjjOCG5bNQo2tu67oUGeIWJEQIMWH0jVXB4D8N1j3m3Rd1lPkV-d_Wr6LNfieAK1ralDynQXV8zd5y5TNJTkplLjazIKbhjMr9SrhfCs4m-_IrWIPcGIteLt4oly-XzxAxgX6mhs0WTgcXqUfuyTuYkPJrZs70exEdNQi48Ml_vZRXux7NXn_yuyRu51qZ34sG89Wj8nkIdmPyoOi-CTwl0QFSUzNKixWczhQssq0WyRfKgw4-afANx2mkHozy9gwL1JbGm6Je29H00ntHrQX0YvSWtEvTT4kdXRh2F6zaS12LZJ31-GUAOUNdZcz09FitSbdEVSF-Z9e4VPNEZVPoUhj3cbFAf02N5Wv3K4vapE24Aof18CHav9gvg5-BcZUzfPhq-zAva2WoC-DANUSPHOjCQlUBRt2WjnJ-9qqAWNV8A9MIf3-tF5kES48HpIVwnt05uCs0t6M6bDJIK6eml4lV9YfVtlmO9LOxhtoMO69Sj5RExcol8Yz_-5T1u0xlbdKlWetUXQTFNwfjcz1u_HYjXVy_fpLFG1M2MdhjtvQ85hxGBv32d8BDYuGeXpjoc-fYEOnm1tOlESrqbZBzFLRv1MmRlkxiAg3uW0Myb32wKjS2iTFp3pkQ-D8Yxv1h0_HRd9ZeCQE-JfLJ2HALswI9wxLFidsCvZ4xaOXpqLZX0o8U7SwHvLw9BRvPvPol5b7mHQ9_OS&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # sign_in(driver, config) self.logger.info("Signed in successful") - get_title(driver, "interface_0 · Streamlit") + get_title(driver, config, "interface_0 · Streamlit") if driver.title == 'interface_0 · Streamlit': self.logger.info("Interface 0 page opened successfully") assert True @@ -37,60 +53,68 @@ class Test_interface_0: self.logger.info("Interface 0 page not opened successfully") assert False - # def test_verify_client_name_dropdown(self, driver, config): - # self.logger.info(f"Opening URL {config['url_interface_0']}") - # driver.get(config['url_interface_0']) - # self.logger.info(f"URL {config['url_interface_0']} opened") - # sign_in(driver, config) - # interface_0_page = Interface_0(driver) - # interface_0_page.click_client_name_dropdown() - # # get_title(driver, "interface_0 · Streamlit") - # if driver.title == 'interface_0 · Streamlit': - # assert True - # else: - # assert False - + # @allure.label('type', 'regression', 'smoke') + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 0") + @allure.sub_suite("Tests for Batch Creation") + @allure.title("Verifying S3 bucket is created with batch ID") + @allure.feature('Interface 0') + @allure.story('Verifying S3 bucket is created with batch ID') + @allure.severity(allure.severity_level.CRITICAL) + @allure.testcase("TC-003") def test_verify_batch_creation(self, driver, config): self.logger.info("Verifying S3 bucket is created with batch ID") - driver.get(config['url_interface_0']) - sign_in(driver, config) - self.logger.info("Signed in successful") - interface_0_page = Interface_0(driver) - interface_0_page.select_client() - interface_0_page.upload_files(config) - interface_0_page.create_batch() - self.logger.info(f"Created batch with Batch ID: {interface_0_page.p_element.text}") - assert interface_0_page.p_element.text.startswith("batch_") + driver.get(config['url_interface_0'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P-Xu65_k1cptZUCoWDROksYjcCYq_DvUcJbXG9MczlC6LlsO80A1Y4mYcEajsGirxfVgaxYazfwYb5sXUbARKILzxaoqtvPuW3nJDMPcIjjOCG5bNQo2tu67oUGeIWJEQIMWH0jVXB4D8N1j3m3Rd1lPkV-d_Wr6LNfieAK1ralDynQXV8zd5y5TNJTkplLjazIKbhjMr9SrhfCs4m-_IrWIPcGIteLt4oly-XzxAxgX6mhs0WTgcXqUfuyTuYkPJrZs70exEdNQi48Ml_vZRXux7NXn_yuyRu51qZ34sG89Wj8nkIdmPyoOi-CTwl0QFSUzNKixWczhQssq0WyRfKgw4-afANx2mkHozy9gwL1JbGm6Je29H00ntHrQX0YvSWtEvTT4kdXRh2F6zaS12LZJ31-GUAOUNdZcz09FitSbdEVSF-Z9e4VPNEZVPoUhj3cbFAf02N5Wv3K4vapE24Aof18CHav9gvg5-BcZUzfPhq-zAva2WoC-DANUSPHOjCQlUBRt2WjnJ-9qqAWNV8A9MIf3-tF5kES48HpIVwnt05uCs0t6M6bDJIK6eml4lV9YfVtlmO9LOxhtoMO69Sj5RExcol8Yz_-5T1u0xlbdKlWetUXQTFNwfjcz1u_HYjXVy_fpLFG1M2MdhjtvQ85hxGBv32d8BDYuGeXpjoc-fYEOnm1tOlESrqbZBzFLRv1MmRlkxiAg3uW0Myb32wKjS2iTFp3pkQ-D8Yxv1h0_HRd9ZeCQE-JfLJ2HALswI9wxLFidsCvZ4xaOXpqLZX0o8U7SwHvLw9BRvPvPol5b7mHQ9_OS&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # sign_in(driver, config) + with allure.step("Signing in"): + self.logger.info("Signed in successful") + interface_0_page = Interface_0(driver, config) + with allure.step("Selecting Client"): + client_name = interface_0_page.select_client("Centene") + with allure.step("Uploading files"): + interface_0_page.upload_files(client_name) + with allure.step("Creating Batch"): + interface_0_page.create_batch() + # self.logger.info(f"Created batch with Batch ID: {interface_0_page.p_element.text}") + with allure.step("Asserting Batch Creating"): + assert interface_0_page.verify_message('POS').startswith("batch_") + + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 0") + @allure.sub_suite("Tests for Batch Creation without client") + @allure.title("Verifying S3 bucket is created without selecting client") + @allure.feature('Interface 0') + @allure.story('Verifying S3 bucket is created without selecting client') + @allure.severity(allure.severity_level.CRITICAL) + def test_verify_batch_creation_without_client(self, driver, config): + self.logger.info("Verifying S3 bucket is created without selecting client") + driver.get(config[ + 'url_interface_0'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P-Xu65_k1cptZUCoWDROksYjcCYq_DvUcJbXG9MczlC6LlsO80A1Y4mYcEajsGirxfVgaxYazfwYb5sXUbARKILzxaoqtvPuW3nJDMPcIjjOCG5bNQo2tu67oUGeIWJEQIMWH0jVXB4D8N1j3m3Rd1lPkV-d_Wr6LNfieAK1ralDynQXV8zd5y5TNJTkplLjazIKbhjMr9SrhfCs4m-_IrWIPcGIteLt4oly-XzxAxgX6mhs0WTgcXqUfuyTuYkPJrZs70exEdNQi48Ml_vZRXux7NXn_yuyRu51qZ34sG89Wj8nkIdmPyoOi-CTwl0QFSUzNKixWczhQssq0WyRfKgw4-afANx2mkHozy9gwL1JbGm6Je29H00ntHrQX0YvSWtEvTT4kdXRh2F6zaS12LZJ31-GUAOUNdZcz09FitSbdEVSF-Z9e4VPNEZVPoUhj3cbFAf02N5Wv3K4vapE24Aof18CHav9gvg5-BcZUzfPhq-zAva2WoC-DANUSPHOjCQlUBRt2WjnJ-9qqAWNV8A9MIf3-tF5kES48HpIVwnt05uCs0t6M6bDJIK6eml4lV9YfVtlmO9LOxhtoMO69Sj5RExcol8Yz_-5T1u0xlbdKlWetUXQTFNwfjcz1u_HYjXVy_fpLFG1M2MdhjtvQ85hxGBv32d8BDYuGeXpjoc-fYEOnm1tOlESrqbZBzFLRv1MmRlkxiAg3uW0Myb32wKjS2iTFp3pkQ-D8Yxv1h0_HRd9ZeCQE-JfLJ2HALswI9wxLFidsCvZ4xaOXpqLZX0o8U7SwHvLw9BRvPvPol5b7mHQ9_OS&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # sign_in(driver, config) + self.logger.info("Signed in successful") + interface_0_page = Interface_0(driver, config) + interface_0_page.create_batch() + assert interface_0_page.verify_message('NEG') == "No Client Name Selected.", "Batch ID is created instead of message" + + # @allure.label("type", 'regression') + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 0") + @allure.sub_suite("Tests for Batch Creation without files") + @allure.title("Verifying S3 bucket is created with no files are uploaded") + @allure.feature('Interface 0') + @allure.story('Verifying S3 bucket is created with no files are uploaded') + @allure.severity(allure.severity_level.CRITICAL) def test_verify_no_files_uploaded(self, driver, config): - self.logger.info("Verifying S3 bucket is created with batch ID") - driver.get(config['url_interface_0']) - sign_in(driver, config) - self.logger.info("Signed in successful") - interface_0_page = Interface_0(driver) - interface_0_page.select_client() - interface_0_page.create_batch() - # self.logger.info(f"Created batch with Batch ID: {p_element.text}") - # try: - assert interface_0_page.p_element.text is "Select files to create batch", "Batch ID is created instead of message" - # except AssertionError: - # self.logger.info(f"Batch ID is created instead of message") - # assert False + self.logger.info("Verifying S3 bucket is created with no files are uploaded") + driver.get(config['url_interface_0'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P9LX84t_sXygReogqiCvr7kFfaCaIcCEnNTGHigLFFW27KaCXXvBZ4b6UzF9L92ozdGa9JxHLXSNERV8wUc7DZRC5U_FC1U-hcSZjGFGA_rteC6-iOnqSqzp58hTnxJw5gBPxwqO0ZIBZy3zbjfe2piABPrTTvvftQ_ccdzbZoSoBfVbvpnWNpesYapFyc8zCnUdfKAS3sz65mtBouZqqgRQ6C31NhaoUMl5qFmqLs01vM50k3VrnRA_AqkzMTne0nNgt53FsdQ2WbubuIIZnwNFbDO8WwskHT2r_jVjnSXXs7pgufPMgV0DOlu2BRZKnabLSqiYa0OGsUepnB7dTV9QlduQw-_TYyXdiReapwXxkz9RtfgM8EUgt1ldTGB5Qd4GOtXDwACNcas53RxUoKJeI2vLVLSXKAtvhROs8NqvF222T1IWWDjjari6-M661OZd2kEmx9JeRilSlmIylonz8qhmL40dRWsDppiSeoPiCgIQsoIqZJiCD8TTMyUSo23qxDcQZamIR8LlteELMQdZHUpSfQG8vKCF02I7Bxc8zD8aksP-27O7g7JTCwWQ3OOFbTGH2hy9_JZFzWCj6W8vYbb9yjGJrAccevXg6T-FBa6LBqWZBmTP9q6Ic8XQOUFZaYMkceMuDg6-ARDxyLXWE60ajN3fQA0xkFrWXOyaCJY3fYnxpHwRk_jyC_yEAaZCciUHFyDPK_Uiudh4L4jbpy7wKM_GPR0faJE0OPJbTc32SId6-LC9e2ECaFYtyUNTkLw-DVhZ2MnFbUEj-Y0SAoRYchAroTF7EfByMFLqSXAKeGj&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # sign_in(driver, config) + with allure.step("Sign In"): + self.logger.info("Signed in successful") + interface_0_page = Interface_0(driver, config) + with allure.step("Selecting Client"): + interface_0_page.select_client('Centene') + with allure.step("Creating Batch"): + interface_0_page.create_batch() + assert interface_0_page.verify_message('NEG') == "No Files Selected.", "Batch ID is created instead of message" - - # def test_multiple_files(self, driver, config): - # contract_files = config["contract_files"] - # # random.seed(5) - # random_count = random.randint(1, len(contract_files)) # Choose a random count between 1 and the length of the array - # - # # Get a random selection of elements from the array - # random_elements = random.sample(contract_files, random_count) - # - # # Print the random count and the selected elements - # print("Random count:", random_count) - # print("Random elements:", random_elements) - # contracts = '\nC:\\Ankit\\Marked Up PDFs\\test\\'.join(random_elements) - # print(contracts) - # # for file in contract_files: - # # print(file) - # # print(contract_files) \ No newline at end of file diff --git a/Doczy.AI_Automation/tests/test_interface_1.py b/Doczy.AI_Automation/tests/test_interface_1.py index fc0bf15..d3eec15 100644 --- a/Doczy.AI_Automation/tests/test_interface_1.py +++ b/Doczy.AI_Automation/tests/test_interface_1.py @@ -1,4 +1,8 @@ +import allure +import pytest + from pages.interface_1_page_objects import Interface_1 +from tests.conftest import groups from utils.element_related_methods import get_title from utils.common_methods import sign_in from utils.logger import get_logger @@ -8,11 +12,18 @@ class Test_interface_1: logger = get_logger() + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 1") + @allure.sub_suite("Tests for Navigation") + @allure.title("Verifying designated Interface 1 Page opens successfully") + @allure.feature('Interface 1') + @allure.story('Verifying designated Interface 1 Page opens successfully') + @allure.severity(allure.severity_level.CRITICAL) def test_validate_navigation(self, driver, config): self.logger.info("Verifying designated Interface 1 Page opens successfully") driver.get(config['url_interface_1']) self.logger.info(f"url_interface_1 {config['url_interface_1']} opened") - get_title(driver, "interface_1 · Streamlit") + get_title(driver, config, "interface_1 · Streamlit") if driver.title == 'interface_1 · Streamlit': self.logger.info("Designated Interface 1 Page opened successfully") assert True @@ -20,12 +31,19 @@ class Test_interface_1: self.logger.info("Designated Interface 1 Page not opened successfully") assert False + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 1") + @allure.sub_suite("Tests for Authentication") + @allure.title("Verifying Single Sign-On (SSO) Login for Interface 1") + @allure.feature('Interface 1') + @allure.story('Verifying Single Sign-On (SSO) Login for Interface 1') + @allure.severity(allure.severity_level.CRITICAL) def test_verify_sign_in(self, driver, config): self.logger.info("Verifying Single Sign-On (SSO) Login for Interface 1") - driver.get(config['url_interface_1']) - sign_in(driver, config) + driver.get(config['url_interface_1'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P-OZmUc_k67ay91q5x8iGq-FCMcsGOuN-RILqMWR3WzTHoAUItcREFppJowN22APhWP0_3aO-H-ByYLq_4toR4SkrJ83TIfavORbh2T-CllhzINKejOopV6Oj2TGqnANs2vp_vgpufdLpQiYcT5Cntcx6Zfz4TZCFrmFNjxoLox5FcXrNiwv_yTFyoiHaIUJG-cIaOn_oTqRGo7O-hUouN9JVxhmnU7ufPFdqEyvj566q9FddhHWKDUAh15f8nxWwRKqI65-vBXTiygJZboznnFjs4kQaXi7sRrmoT1uXt73lxr6FQe6bzlIWxHRWXci50qp4J_MU5gfZ1vSzJS5zFzFy7W2spTG7hByAH9LVv3us5Q_dAvr2_J3rn6zLJaZBnp_xRJ6cJM9e_zgcxL5zD6vVPtFkuqxWpV_Axtm2xrqTS7q03WRoDDwhRlHC02whsP8HVovurA-knXTrIRHM4p1eRSfK99EuKkev0eOGL5cNSKT-JNLQoe23R-JstAqhlyTSTis2wNK8I5Y2kd5esJGnBoe1jHeyTD5a-yppMfmBd6nW90_nvOc0eipFxMuWnhvYs56ex5Mv7PM6iWvnrP2ewVPbRI7oFa8WM_YhJ84Je4JRVw-HGi8Ftfv3pZfn8kxfxAp2lvncXw9GmCjm3eig-NdJqB1gpNGXN-lPZgMzjOwX5REWe3Wvqn2wK9sNd9gSzGTUCtHCN9NCkuSqkUAlAxECMy7FVuUl8i3CqNCkfrd7EI-LwczhRaOnKT9VJF0E544fAK1W5GWKMBGcrcrp8fJwOdAHqf8R7Mcsl3XzrafYzJo1SO&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # sign_in(driver, config) self.logger.info("Signed in successful") - get_title(driver, "interface_1 · Streamlit") + get_title(driver, config, "interface_1 · Streamlit") if driver.title == 'interface_1 · Streamlit': self.logger.info("Interface 1 page opened successfully") assert True @@ -33,50 +51,77 @@ class Test_interface_1: self.logger.info("Interface 1 page not opened successfully") assert False - def test_read_contract_from_path(self, driver, config): - self.logger.info("Verifying Single Sign-On (SSO) Login for Interface 1") - driver.get(config['url_interface_1']) - sign_in(driver, config) - self.logger.info("Signed in successful") - get_title(driver, "interface_1 · Streamlit") - interface_1 = Interface_1(driver) - interface_1.select_client() - interface_1.select_batch() - interface_1.check_group_no() - interface_1.click_read_the_contracts_from_path() - interface_1.check_table_contain() + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 1") + @allure.sub_suite("Tests for Read the contracts from Path") + @allure.title('Verify the "Read the contracts from Path" button functionality') + @allure.feature('Interface 1') + @allure.story('Verify the "Read the contracts from Path" button functionality') + @allure.severity(allure.severity_level.CRITICAL) + def test_read_contract_from_path(self, driver, config, groups): + self.logger.info('Verify the "Read the contracts from Path" button functionality') + driver.get(config['url_interface_1'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P-OZmUc_k67ay91q5x8iGq-FCMcsGOuN-RILqMWR3WzTHoAUItcREFppJowN22APhWP0_3aO-H-ByYLq_4toR4SkrJ83TIfavORbh2T-CllhzINKejOopV6Oj2TGqnANs2vp_vgpufdLpQiYcT5Cntcx6Zfz4TZCFrmFNjxoLox5FcXrNiwv_yTFyoiHaIUJG-cIaOn_oTqRGo7O-hUouN9JVxhmnU7ufPFdqEyvj566q9FddhHWKDUAh15f8nxWwRKqI65-vBXTiygJZboznnFjs4kQaXi7sRrmoT1uXt73lxr6FQe6bzlIWxHRWXci50qp4J_MU5gfZ1vSzJS5zFzFy7W2spTG7hByAH9LVv3us5Q_dAvr2_J3rn6zLJaZBnp_xRJ6cJM9e_zgcxL5zD6vVPtFkuqxWpV_Axtm2xrqTS7q03WRoDDwhRlHC02whsP8HVovurA-knXTrIRHM4p1eRSfK99EuKkev0eOGL5cNSKT-JNLQoe23R-JstAqhlyTSTis2wNK8I5Y2kd5esJGnBoe1jHeyTD5a-yppMfmBd6nW90_nvOc0eipFxMuWnhvYs56ex5Mv7PM6iWvnrP2ewVPbRI7oFa8WM_YhJ84Je4JRVw-HGi8Ftfv3pZfn8kxfxAp2lvncXw9GmCjm3eig-NdJqB1gpNGXN-lPZgMzjOwX5REWe3Wvqn2wK9sNd9gSzGTUCtHCN9NCkuSqkUAlAxECMy7FVuUl8i3CqNCkfrd7EI-LwczhRaOnKT9VJF0E544fAK1W5GWKMBGcrcrp8fJwOdAHqf8R7Mcsl3XzrafYzJo1SO&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + with allure.step("Signing in"): + # sign_in(driver, config) + self.logger.debug("Signed in successful") + get_title(driver, config, "interface_1 · Streamlit") + with allure.step('Selecting Client'): + interface_1 = Interface_1(driver, config) + interface_1.select_client("Centene") + with allure.step('Selecting Batch'): + interface_1.select_batch("batch_190624022330") + with allure.step('Selecting Groups'): + interface_1.check_group_no(groups) + with allure.step('Reading Contracts from S3 Bucket'): + interface_1.click_read_the_contracts_from_path() + interface_1.check_table_contain() - def test_run_doczy_ai_pipeline(self, driver, config): - self.logger.info("Verifying Single Sign-On (SSO) Login for Interface 1") - driver.get(config['url_interface_1']) - sign_in(driver, config) + # @pytest.mark.skip("Due to broken functionality") + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 1") + @allure.sub_suite("Tests for Run Doczy.AI Pipeline") + @allure.title('Verify "Run Doczy.AI Pipeline" button functionality') + @allure.feature('Interface 1') + @allure.story('Verify "Run Doczy.AI Pipeline" button functionality') + @allure.severity(allure.severity_level.CRITICAL) + def test_run_doczy_ai_pipeline(self, driver, config, groups): + self.logger.info('Verify "Run Doczy.AI Pipeline" button functionality') + driver.get(config['url_interface_1'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P9xUVp2PJ6-Ymm_h4pBRlXjhIYg3cEOpiosJGKkG8EF0WMNT10RyUeKXqrs3UDMkLlTCZy3qMPFePktnSIkLU7AmdUv_QXjPc221BMScHwImuvMxH5YhN8s8jeJuS9GWMnllIbKInqHn_DNzL5uBSMVCd3lx1YEtHTr2Bn_MY4Vp9TS7Z3byW3upWK77c6SE6Fsv4nBTTab_4ebD_cLAanFoY2BPZdKXPngveBjjxDPUcAXD3JvRwUGHPUR8Iv3sRip6lqa02SsXt0_UzhypRYRmP67P52D_xhGjfQ--FuVF_M87UTnFK4FeNVHSeU6SRKJA9VWG9QDnizP-xiRB_8cnfmaaBw2UWnpbXC1o_EnsWPbjyomHylkPTc69gygghWBOGwR8agZA3B8sWjz-pMJO8E7hWpOIBlsEeRLJieXgBZxdRG77JZ4iUtJZZ0Dd-1VFxQCh8bSUl9TBdHA8wzui-dqNd15xKDHtS7FA3BHGZOICrYcKeiaShjC2OhQl71oUOtF8o31zsyUvq9jeTCL64X1l_xL8ePDqzinfJeaN--mPea3QZHkd3P6jOGdT4cTD9u-RBTD-Qbu6dj5egQDgUSPCcfL7kVeSz0QSi8jpqUoxJi4RTOXZEFLX77n88kUJczMsUsSQSdzTaKBDXY5HQwFK79jE5uJ7hwdBcEtKBHv0zoE0pn8RogLwzKk6SG-6R94UAuvuYw-ivkW8HyCWbGHQq_QSj5YdMEyBO2C-woCH5qwFbN4qoTc-OabOvW4lHTfFyeoJB7ryUdHilMd1kdAPe6WNNRKCmLb0Ofn_Jv5eqFID6L7DtmEJCc&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # sign_in(driver, config) self.logger.info("Signed in successful") - get_title(driver, "interface_1 · Streamlit") - interface_1 = Interface_1(driver) + get_title(driver, config, "interface_1 · Streamlit") + interface_1 = Interface_1(driver, config) interface_1.select_client() interface_1.select_batch() - interface_1.check_group_no() + interface_1.check_group_no(groups) interface_1.click_read_the_contracts_from_path() interface_1.check_table_contain() interface_1.click_run_doczy_ai_pipeline() - if interface_1.result_message.text is "Success": + if interface_1.result_message.text == "Success": self.logger.info(f"Files are passed to Doczy.AI pipeline") assert True else: self.logger.info(f"Files are passed to Doczy.AI pipeline") assert True + @pytest.mark.skip("Due to broken functionality") + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 1") + @allure.sub_suite("Tests for Run Doczy.AI Pipeline with no Groups") + @allure.title('Verify if none Group No is selected from Group No Checkbox or from table then "Run Doczy.AI Pipeline"should not be functional') + @allure.feature('Interface 1') + @allure.story('Verify if none Group No is selected from Group No Checkbox or from table then "Run Doczy.AI Pipeline"should not be functional') + @allure.severity(allure.severity_level.CRITICAL) def test_run_doczy_ai_pipeline_without_selecting_group_no(self, driver, config): - self.logger.info("Verifying Single Sign-On (SSO) Login for Interface 1") - driver.get(config['url_interface_1']) - sign_in(driver, config) + self.logger.info('Verify if none Group No is selected from Group No Checkbox or from table then "Run Doczy.AI Pipeline"should not be functional') + driver.get(config['url_interface_1'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P-OZmUc_k67ay91q5x8iGq-FCMcsGOuN-RILqMWR3WzTHoAUItcREFppJowN22APhWP0_3aO-H-ByYLq_4toR4SkrJ83TIfavORbh2T-CllhzINKejOopV6Oj2TGqnANs2vp_vgpufdLpQiYcT5Cntcx6Zfz4TZCFrmFNjxoLox5FcXrNiwv_yTFyoiHaIUJG-cIaOn_oTqRGo7O-hUouN9JVxhmnU7ufPFdqEyvj566q9FddhHWKDUAh15f8nxWwRKqI65-vBXTiygJZboznnFjs4kQaXi7sRrmoT1uXt73lxr6FQe6bzlIWxHRWXci50qp4J_MU5gfZ1vSzJS5zFzFy7W2spTG7hByAH9LVv3us5Q_dAvr2_J3rn6zLJaZBnp_xRJ6cJM9e_zgcxL5zD6vVPtFkuqxWpV_Axtm2xrqTS7q03WRoDDwhRlHC02whsP8HVovurA-knXTrIRHM4p1eRSfK99EuKkev0eOGL5cNSKT-JNLQoe23R-JstAqhlyTSTis2wNK8I5Y2kd5esJGnBoe1jHeyTD5a-yppMfmBd6nW90_nvOc0eipFxMuWnhvYs56ex5Mv7PM6iWvnrP2ewVPbRI7oFa8WM_YhJ84Je4JRVw-HGi8Ftfv3pZfn8kxfxAp2lvncXw9GmCjm3eig-NdJqB1gpNGXN-lPZgMzjOwX5REWe3Wvqn2wK9sNd9gSzGTUCtHCN9NCkuSqkUAlAxECMy7FVuUl8i3CqNCkfrd7EI-LwczhRaOnKT9VJF0E544fAK1W5GWKMBGcrcrp8fJwOdAHqf8R7Mcsl3XzrafYzJo1SO&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # sign_in(driver, config) self.logger.info("Signed in successful") - get_title(driver, "interface_1 · Streamlit") - interface_1 = Interface_1(driver) + get_title(driver, config, "interface_1 · Streamlit") + interface_1 = Interface_1(driver, config) interface_1.select_client() interface_1.select_batch() interface_1.click_read_the_contracts_from_path() interface_1.check_table_contain() interface_1.click_run_doczy_ai_pipeline() assert interface_1.result_message.text is "Please select at least one Group No." - diff --git a/Doczy.AI_Automation/tests/test_interface_2.py b/Doczy.AI_Automation/tests/test_interface_2.py new file mode 100644 index 0000000..02738a1 --- /dev/null +++ b/Doczy.AI_Automation/tests/test_interface_2.py @@ -0,0 +1,163 @@ +import allure +import pytest + +from pages.interface_2_page_objects import Interface_2 +from utils.common_methods import sign_in +from utils.element_related_methods import get_title +from utils.logger import get_logger + + +class Test_interface_2: + logger = get_logger() + + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 2") + @allure.sub_suite("Tests for Navigation") + @allure.title("Verifying designated Interface 2 Page opens successfully") + @allure.feature('Interface 2') + @allure.story('Verifying designated Interface 2 Page opens successfully') + @allure.severity(allure.severity_level.CRITICAL) + def test_validate_navigation(self, driver, config): + self.logger.info("Verifying designated Interface 2 Page opens successfully") + driver.get(config['url_interface_2']) + get_title(driver, config, "interface_2 · Streamlit") + if driver.title == 'interface_2 · Streamlit': + self.logger.info("Designated Interface 2 Page opened successfully") + assert True + else: + self.logger.info("Designated Interface 2 Page not opened successfully") + assert False + + # @pytest.mark.skip("Due to bug ") + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 2") + @allure.sub_suite("Tests for Authentication") + @allure.title("Verifying Single Sign-On (SSO) Login for Interface 2") + @allure.feature('Interface 2') + @allure.story('Verifying Single Sign-On (SSO) Login for Interface 2') + @allure.severity(allure.severity_level.CRITICAL) + def test_verify_sign_in(self, driver, config): + self.logger.info("Verifying Single Sign-On (SSO) Login for Interface 2") + driver.get(config['url_interface_2'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P91FtoYFvR20dqHG0dEKQhDe1BftWl3mQWsfh9s8UJttZdIVkp4cYIkmKKhTtdGruEzTbeZjcCH6mii-K8QH5QDmQ9chVv-P5lGlTOPig_9AZ_6ZZEty4XWPFPJzseHk4JsvCk36kgebUZvfT2X2MfMEsRi-TnOC2CWhhlurm0a8mCR7WzDWHLzPHpFAwcd-GS7V3N8NUri6LDskw8E1HiOtMSs0SwwZCGw2A7GZV59MrYvNxi8YyousqNRLhdOg56PrzlhLk5l-hgm9ZX9NrKYmlNmb3LYFrxd8zgWQ5fdulyColwquQHTGZ4kRwM49xCdTEsCDprDYqopmMoPXcwvjFz69f_a9S-qT8jNhFGN_WmdoUlq02J0BSLnD-IfKNAQe5w2D6SKCYH4LLZnSSKpQrJUFosqYmxOsk34Z80enm-f4kiJhzqYt9Qwa6n70J3bF-6vXCjZdu3l5iI5CLc7QcaicPmfiOQBGu_EyFploqsW7fmqfNhJ92_W0jL_yQvgZaBtMeZH23BmVpYQGdNeBhRauBj4qaHpTkPHSUPBw26atNtq5yWOs0j6gIL_hhHljLqqvMmI3vw0B3deVxqy2MvgU40wkYYfETwaBaIVTH5OtO60EBULwN7PBCYDVOT2ZskBZnQCp29IZqam1GwZHDBHEVbw9djRXl9ZwKOUHa9mv_dKHJAB_cMtpAzOF0H6fnyzLr1kZEd-hfHUY-ZF1mrEPgUBKC5swYTfgYpBpgWjnlxMKva9tC1iHAwKSyRcsRc7BnSzBJv9ZU8UhzrhIlJ1ILGjjJQcUwicfVIokN9X79fxllkkqQ&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + # sign_in(driver, config) + self.logger.info("Signed in successful") + get_title(driver, config, "interface_2 · Streamlit") + if driver.title == 'interface_2 · Streamlit': + self.logger.info("Interface 2 page opened successfully") + assert True + else: + self.logger.info("Interface 2 page not opened successfully") + assert False + + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 2") + @allure.sub_suite("Tests for Show Result button") + @allure.title("Verify the 'show result' button functionality") + @allure.feature('Interface 2') + @allure.story("Verify the 'show result' button functionality") + @allure.severity(allure.severity_level.CRITICAL) + @allure.testcase("TC-008") + def test_verify_show_results_button(self, driver, config): + self.logger.info("Verify the 'show result' button functionality") + driver.get(config[ + 'url_interface_2'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P91FtoYFvR20dqHG0dEKQhDe1BftWl3mQWsfh9s8UJttZdIVkp4cYIkmKKhTtdGruEzTbeZjcCH6mii-K8QH5QDmQ9chVv-P5lGlTOPig_9AZ_6ZZEty4XWPFPJzseHk4JsvCk36kgebUZvfT2X2MfMEsRi-TnOC2CWhhlurm0a8mCR7WzDWHLzPHpFAwcd-GS7V3N8NUri6LDskw8E1HiOtMSs0SwwZCGw2A7GZV59MrYvNxi8YyousqNRLhdOg56PrzlhLk5l-hgm9ZX9NrKYmlNmb3LYFrxd8zgWQ5fdulyColwquQHTGZ4kRwM49xCdTEsCDprDYqopmMoPXcwvjFz69f_a9S-qT8jNhFGN_WmdoUlq02J0BSLnD-IfKNAQe5w2D6SKCYH4LLZnSSKpQrJUFosqYmxOsk34Z80enm-f4kiJhzqYt9Qwa6n70J3bF-6vXCjZdu3l5iI5CLc7QcaicPmfiOQBGu_EyFploqsW7fmqfNhJ92_W0jL_yQvgZaBtMeZH23BmVpYQGdNeBhRauBj4qaHpTkPHSUPBw26atNtq5yWOs0j6gIL_hhHljLqqvMmI3vw0B3deVxqy2MvgU40wkYYfETwaBaIVTH5OtO60EBULwN7PBCYDVOT2ZskBZnQCp29IZqam1GwZHDBHEVbw9djRXl9ZwKOUHa9mv_dKHJAB_cMtpAzOF0H6fnyzLr1kZEd-hfHUY-ZF1mrEPgUBKC5swYTfgYpBpgWjnlxMKva9tC1iHAwKSyRcsRc7BnSzBJv9ZU8UhzrhIlJ1ILGjjJQcUwicfVIokN9X79fxllkkqQ&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + with allure.step("Signing in"): + # sign_in(driver, config) + self.logger.info("Signed in successful") + get_title(driver, config, "interface_2 · Streamlit") + with allure.step("Selecting Client"): + interface_2 = Interface_2(driver, config) + interface_2.select_client("Centene") + with allure.step("Selecting Batch"): + interface_2.select_batch() + with allure.step("Selecting Contract"): + interface_2.select_contract() + with allure.step("Selecting field Group"): + interface_2.select_field_group() + with allure.step("Click on 'Show Result' Button"): + interface_2.click_show_results() + interface_2.check_table_contain() + + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 2") + @allure.sub_suite("Tests for Show Result button without Contract") + @allure.title("Verify the 'show result' button functionality without selecting contracts") + @allure.feature('Interface 2') + @allure.story("Verify the 'show result' button functionality without selecting contracts") + @allure.severity(allure.severity_level.CRITICAL) + def test_verify_show_results_button_without_contract(self, driver, config): + self.logger.info("Verify the 'show result' button functionality without selecting contracts") + driver.get(config[ + 'url_interface_2'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P91FtoYFvR20dqHG0dEKQhDe1BftWl3mQWsfh9s8UJttZdIVkp4cYIkmKKhTtdGruEzTbeZjcCH6mii-K8QH5QDmQ9chVv-P5lGlTOPig_9AZ_6ZZEty4XWPFPJzseHk4JsvCk36kgebUZvfT2X2MfMEsRi-TnOC2CWhhlurm0a8mCR7WzDWHLzPHpFAwcd-GS7V3N8NUri6LDskw8E1HiOtMSs0SwwZCGw2A7GZV59MrYvNxi8YyousqNRLhdOg56PrzlhLk5l-hgm9ZX9NrKYmlNmb3LYFrxd8zgWQ5fdulyColwquQHTGZ4kRwM49xCdTEsCDprDYqopmMoPXcwvjFz69f_a9S-qT8jNhFGN_WmdoUlq02J0BSLnD-IfKNAQe5w2D6SKCYH4LLZnSSKpQrJUFosqYmxOsk34Z80enm-f4kiJhzqYt9Qwa6n70J3bF-6vXCjZdu3l5iI5CLc7QcaicPmfiOQBGu_EyFploqsW7fmqfNhJ92_W0jL_yQvgZaBtMeZH23BmVpYQGdNeBhRauBj4qaHpTkPHSUPBw26atNtq5yWOs0j6gIL_hhHljLqqvMmI3vw0B3deVxqy2MvgU40wkYYfETwaBaIVTH5OtO60EBULwN7PBCYDVOT2ZskBZnQCp29IZqam1GwZHDBHEVbw9djRXl9ZwKOUHa9mv_dKHJAB_cMtpAzOF0H6fnyzLr1kZEd-hfHUY-ZF1mrEPgUBKC5swYTfgYpBpgWjnlxMKva9tC1iHAwKSyRcsRc7BnSzBJv9ZU8UhzrhIlJ1ILGjjJQcUwicfVIokN9X79fxllkkqQ&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + with allure.step("Signing in"): + # sign_in(driver, config) + self.logger.info("Signed in successful") + get_title(driver, config, "interface_2 · Streamlit") + with allure.step("Selecting Client"): + interface_2 = Interface_2(driver, config) + interface_2.select_client("Centene") + with allure.step("Selecting Batch"): + interface_2.select_batch() + with allure.step("Selecting field Group"): + interface_2.select_field_group() + with allure.step("Click on 'Show Result' Button"): + interface_2.click_show_results() + assert interface_2.check_error_message() == "Please select Contract" + + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 2") + @allure.sub_suite("Tests for Show Result button without Field Groups") + @allure.title("Verify the 'show result' button functionality without selecting field groups") + @allure.feature('Interface 2') + @allure.story("Verify the 'show result' button functionality without selecting field groups") + @allure.severity(allure.severity_level.CRITICAL) + def test_verify_show_results_button_without_field_group(self, driver, config): + self.logger.info("Verify the 'show result' button functionality without selecting field groups") + driver.get(config[ + 'url_interface_2'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P91FtoYFvR20dqHG0dEKQhDe1BftWl3mQWsfh9s8UJttZdIVkp4cYIkmKKhTtdGruEzTbeZjcCH6mii-K8QH5QDmQ9chVv-P5lGlTOPig_9AZ_6ZZEty4XWPFPJzseHk4JsvCk36kgebUZvfT2X2MfMEsRi-TnOC2CWhhlurm0a8mCR7WzDWHLzPHpFAwcd-GS7V3N8NUri6LDskw8E1HiOtMSs0SwwZCGw2A7GZV59MrYvNxi8YyousqNRLhdOg56PrzlhLk5l-hgm9ZX9NrKYmlNmb3LYFrxd8zgWQ5fdulyColwquQHTGZ4kRwM49xCdTEsCDprDYqopmMoPXcwvjFz69f_a9S-qT8jNhFGN_WmdoUlq02J0BSLnD-IfKNAQe5w2D6SKCYH4LLZnSSKpQrJUFosqYmxOsk34Z80enm-f4kiJhzqYt9Qwa6n70J3bF-6vXCjZdu3l5iI5CLc7QcaicPmfiOQBGu_EyFploqsW7fmqfNhJ92_W0jL_yQvgZaBtMeZH23BmVpYQGdNeBhRauBj4qaHpTkPHSUPBw26atNtq5yWOs0j6gIL_hhHljLqqvMmI3vw0B3deVxqy2MvgU40wkYYfETwaBaIVTH5OtO60EBULwN7PBCYDVOT2ZskBZnQCp29IZqam1GwZHDBHEVbw9djRXl9ZwKOUHa9mv_dKHJAB_cMtpAzOF0H6fnyzLr1kZEd-hfHUY-ZF1mrEPgUBKC5swYTfgYpBpgWjnlxMKva9tC1iHAwKSyRcsRc7BnSzBJv9ZU8UhzrhIlJ1ILGjjJQcUwicfVIokN9X79fxllkkqQ&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + with allure.step("Signing in"): + # sign_in(driver, config) + self.logger.info("Signed in successful") + get_title(driver, config, "interface_2 · Streamlit") + with allure.step("Selecting Client"): + interface_2 = Interface_2(driver, config) + interface_2.select_client("Centene") + with allure.step("Selecting Batch"): + interface_2.select_batch() + with allure.step("Selecting Contract"): + interface_2.select_contract() + with allure.step("Click on 'Show Result' Button"): + interface_2.click_show_results() + assert interface_2.check_error_message() == "Please select a Field Group" + + @allure.parent_suite("Tests for web interface") + @allure.suite("Tests for Interface 2") + @allure.sub_suite("Tests for Kickoff Database Integration") + @allure.title("Verifying Kickoff Database Integration Functionality") + @allure.feature('Interface 2') + @allure.story('Verifying Kickoff Database Integration Functionality') + @allure.severity(allure.severity_level.CRITICAL) + def test_verify_Kickoff_Database_Integration(self, driver, config): + self.logger.info("Verifying Kickoff Database Integration Functionality") + driver.get(config[ + 'url_interface_2'] + "?code=0.AVsA57e_zrnCv0-sKQYbnoaPz5D--u_XfqNDqwMZoL4vF1hbAN8.AgABBAIAAAApTwJmzXqdR4BN2miheQMYAgDs_wUA9P91FtoYFvR20dqHG0dEKQhDe1BftWl3mQWsfh9s8UJttZdIVkp4cYIkmKKhTtdGruEzTbeZjcCH6mii-K8QH5QDmQ9chVv-P5lGlTOPig_9AZ_6ZZEty4XWPFPJzseHk4JsvCk36kgebUZvfT2X2MfMEsRi-TnOC2CWhhlurm0a8mCR7WzDWHLzPHpFAwcd-GS7V3N8NUri6LDskw8E1HiOtMSs0SwwZCGw2A7GZV59MrYvNxi8YyousqNRLhdOg56PrzlhLk5l-hgm9ZX9NrKYmlNmb3LYFrxd8zgWQ5fdulyColwquQHTGZ4kRwM49xCdTEsCDprDYqopmMoPXcwvjFz69f_a9S-qT8jNhFGN_WmdoUlq02J0BSLnD-IfKNAQe5w2D6SKCYH4LLZnSSKpQrJUFosqYmxOsk34Z80enm-f4kiJhzqYt9Qwa6n70J3bF-6vXCjZdu3l5iI5CLc7QcaicPmfiOQBGu_EyFploqsW7fmqfNhJ92_W0jL_yQvgZaBtMeZH23BmVpYQGdNeBhRauBj4qaHpTkPHSUPBw26atNtq5yWOs0j6gIL_hhHljLqqvMmI3vw0B3deVxqy2MvgU40wkYYfETwaBaIVTH5OtO60EBULwN7PBCYDVOT2ZskBZnQCp29IZqam1GwZHDBHEVbw9djRXl9ZwKOUHa9mv_dKHJAB_cMtpAzOF0H6fnyzLr1kZEd-hfHUY-ZF1mrEPgUBKC5swYTfgYpBpgWjnlxMKva9tC1iHAwKSyRcsRc7BnSzBJv9ZU8UhzrhIlJ1ILGjjJQcUwicfVIokN9X79fxllkkqQ&session_state=7515cdc9-6fd7-4e93-b526-f0a3c23401fd#") + with allure.step("Selecting Client"): + # sign_in(driver, config) + self.logger.info("Signed in successful") + get_title(driver, config, "interface_2 · Streamlit") + with allure.step("Selecting Client"): + interface_2 = Interface_2(driver, config) + interface_2.select_client("Centene") + with allure.step("Selecting Batch"): + interface_2.select_batch() + with allure.step("Selecting Contract"): + interface_2.select_contract() + with allure.step("Selecting field Group"): + interface_2.select_field_group() + with allure.step("Click on 'Show Result' Button"): + interface_2.click_show_results() + interface_2.check_table_contain() + with allure.step("Click on 'Kickoff Database Integration' Button"): + # interface_2.click_kickoff_database_integration_btn() + pass + ###Verify with database### diff --git a/Doczy.AI_Automation/utils/CustomException.py b/Doczy.AI_Automation/utils/CustomException.py new file mode 100644 index 0000000..04d55ae --- /dev/null +++ b/Doczy.AI_Automation/utils/CustomException.py @@ -0,0 +1,42 @@ +from selenium.common import TimeoutException + + +class CustomError(Exception): + """Base class for custom exceptions""" + def __init__(self, message): + super().__init__(message) + self.message = message + + +class InvalidInputError(CustomError): + """Exception raised for invalid inputs""" + def __init__(self, value): + super().__init__(f"Invalid input: {value}") + self.value = value + + +class DatabaseConnectionError(CustomError): + """Exception raised for database connection errors""" + def __init__(self, db_url): + super().__init__(f"Database connection failed: {db_url}") + self.db_url = db_url + + +class NoYamlFile(FileNotFoundError): + def __init__(self, yaml_file_path, yaml_file_name): + super().__init__(f"Please create YAML file at location={yaml_file_path} with filename={yaml_file_name}") + self.yaml_file_path = yaml_file_path + self.yaml_file_name = yaml_file_name + + +class NoElementFound(Exception): + def __init__(self, xpath, timeout): + super().__init__(f"Element with \"{xpath}\" XPATH is not located in {timeout} second. Try re-run the testcase") + self.xpath = xpath + self.timeout = timeout + +class TitleNotFound(Exception): + def __init__(self, title, timeout): + super().__init__(f"Web Page with \"{title}\" title is not loaded in {timeout} second.") + self.title = title + self.timeout = timeout \ No newline at end of file diff --git a/Doczy.AI_Automation/utils/element_related_methods.py b/Doczy.AI_Automation/utils/element_related_methods.py index e77268c..e1bce3e 100644 --- a/Doczy.AI_Automation/utils/element_related_methods.py +++ b/Doczy.AI_Automation/utils/element_related_methods.py @@ -1,29 +1,51 @@ +from selenium.common import TimeoutException from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as ec - -def get_clickable_element(driver, By, element_id): - return WebDriverWait(driver, timeout=50).until( - ec.element_to_be_clickable((By, element_id)) - ) +from tests.conftest import config +from utils.CustomException import NoElementFound, TitleNotFound -def get_element(driver, By, element_id): - return WebDriverWait(driver, timeout=50).until( - ec.visibility_of_element_located((By, element_id)) - ) +def get_clickable_element(driver, config, By, element_id): + + try: + element = WebDriverWait(driver, timeout=config['timeout']).until( + ec.element_to_be_clickable((By, element_id)) + ) + except TimeoutException: + # print("NoElement") + raise NoElementFound(element_id, config['timeout']) + return element -def get_invisible_element(driver, By, element_id): - return WebDriverWait(driver, timeout=50).until( - ec.presence_of_element_located((By, element_id)) - ) +def get_element(driver, config, By, element_id): + try: + return WebDriverWait(driver, timeout=config['timeout']).until( + ec.visibility_of_element_located((By, element_id)) + ) + except TimeoutException: + # print("NoElement") + raise NoElementFound(element_id, config['timeout']) -def get_title(driver, title): - return WebDriverWait(driver, timeout=50).until( - ec.title_contains(title) - ) +def get_invisible_element(driver, config, By, element_id): + try: + return WebDriverWait(driver, timeout=config['timeout']).until( + ec.presence_of_element_located((By, element_id)) + ) + except TimeoutException: + # print("NoElement") + raise NoElementFound(element_id, config['timeout']) + + +def get_title(driver, config, title): + try: + return WebDriverWait(driver, timeout=config['timeout']).until( + ec.title_contains(title) + ) + except TimeoutException: + # print("NoElement") + raise TitleNotFound(title, config['timeout']) diff --git a/Doczy.AI_Automation/utils/reader.py b/Doczy.AI_Automation/utils/reader.py index 6defd16..31be075 100644 --- a/Doczy.AI_Automation/utils/reader.py +++ b/Doczy.AI_Automation/utils/reader.py @@ -1,6 +1,30 @@ import yaml +import pandas as pd +import os + +from utils.CustomException import NoYamlFile -def read_yaml(file_path): - with open (file_path, 'r') as file: - return yaml.safe_load(file) +def read_yaml(file_path, file_name): + try: + with open(file_path+file_name, 'r') as file: + return yaml.safe_load(file) + except Exception as e: + raise NoYamlFile(file_path, file_name) + + +def read_excel(file_path, sheet_name, col_name): + df = pd.read_excel(file_path, usecols=col_name, sheet_name=sheet_name) + if len(col_name) == 1: + data = [val[0] for val in df.values] + else: + data = [tuple(row) for row in df.values] + return data + + +def read_files(folder_path): + file_paths = [] + for root, dirs, files in os.walk(folder_path): + for file in files: + file_paths.append(os.path.join(root, file)) + return file_paths diff --git a/Doczy.AI_Automation/utils/report.py b/Doczy.AI_Automation/utils/report.py index 8d338fa..e3dc61d 100644 --- a/Doczy.AI_Automation/utils/report.py +++ b/Doczy.AI_Automation/utils/report.py @@ -16,6 +16,3 @@ def pytest_runtest_makereport(item, call): # """Set the title of the HTML report dynamically.""" # current_datetime = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S") # report.title = f"Test Report {current_datetime}" - -def pytest_html_report_title(report): - report.title = "My very own title!" \ No newline at end of file