diff --git a/allure-report.tar.gz b/allure-report.tar.gz index 28aa826b9..8145aeeed 100644 Binary files a/allure-report.tar.gz and b/allure-report.tar.gz differ diff --git a/data/behaviors.csv b/data/behaviors.csv index a31a2cf8f..c2c21d525 100644 --- a/data/behaviors.csv +++ b/data/behaviors.csv @@ -1,6 +1,6 @@ "Epic","Feature","Story","FAILED","BROKEN","PASSED","SKIPPED","UNKNOWN" "","Find a patient","","16","0","0","0","0" -"","Logout Feature","","1","0","0","0","0" +"","Add Batches to vaccine","","1","0","0","0","0" "","Login Feature","","6","0","0","0","0" "","Add vaccine to site","","2","0","0","0","0" -"","Add Batches to vaccine","","1","0","0","0","0" +"","Logout Feature","","1","0","0","0","0" diff --git a/data/behaviors.json b/data/behaviors.json index 989001d1b..1f4413189 100644 --- a/data/behaviors.json +++ b/data/behaviors.json @@ -5,13 +5,13 @@ "name" : "Add Batches to vaccine", "children" : [ { "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", - "uid" : "948e990045434de2", + "uid" : "e3401ea00bd0843c", "parentUid" : "5b1c929fa6f58ac88a5cf0cec0914bfc", "status" : "failed", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "flaky" : false, "newFailed" : false, @@ -26,13 +26,13 @@ "name" : "Add vaccine to site", "children" : [ { "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", - "uid" : "bbc242fb8e369a80", + "uid" : "1e6e9cb1fff0b312", "parentUid" : "89454da568829ba0e3b824d512d0be96", "status" : "failed", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "flaky" : false, "newFailed" : false, @@ -43,13 +43,13 @@ "parameters" : [ "NEELIMA HOUSE", "Flu", "Fluenz Tetra - LAIV" ] }, { "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", - "uid" : "9b1718d8794758dd", + "uid" : "8d10668af26e33dc", "parentUid" : "89454da568829ba0e3b824d512d0be96", "status" : "failed", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "flaky" : false, "newFailed" : false, @@ -64,13 +64,13 @@ "name" : "Find a patient", "children" : [ { "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", - "uid" : "45bfe683b38d0492", + "uid" : "b87bf117266ef07e", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -81,13 +81,13 @@ "parameters" : [ "1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW", "23/6/1946", "Bill GARTON", "9693632109" ] }, { "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", - "uid" : "2bd9a9ec7042a35c", + "uid" : "afa2a7f4cb240c49", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "flaky" : false, "newFailed" : false, @@ -98,13 +98,13 @@ "parameters" : [ "Ifyoucan113, GDA11 UCL6, KT17 1NA", "9/3/2018", "COMFORT Jones", "9449304424" ] }, { "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", - "uid" : "df0f8348a085018e", + "uid" : "89c2680de5bf3def", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -115,13 +115,13 @@ "parameters" : [ "39 Barton Road, RG10 9DF", "27/3/2001", "Reynolds Ryan", "9449306494" ] }, { "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", - "uid" : "6922ac45246da27e", + "uid" : "8b876a9eef0cdf63", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "flaky" : false, "newFailed" : false, @@ -132,13 +132,13 @@ "parameters" : [ "Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN", "13/2/2020", "abxxyz Patel", "9449305552" ] }, { "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", - "uid" : "d29791f87c4d62f5", + "uid" : "4a260f7861780518", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "flaky" : false, "newFailed" : false, @@ -149,13 +149,13 @@ "parameters" : [ "10 BROOK STREET, LANCASTER, LA1 1SL", "20160130", "SOLOMON DAZLEY", "9469997956" ] }, { "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", - "uid" : "bb477fbb333e9116", + "uid" : "4a0bb1c2182db8f6", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "flaky" : false, "newFailed" : false, @@ -166,13 +166,13 @@ "parameters" : [ "KT21 1LJ", "20110509", "Not found", "9449306621" ] }, { "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", - "uid" : "9538b5082dbdb7d2", + "uid" : "bb1ba58f4c87730", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -183,13 +183,13 @@ "parameters" : [ "1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ", "20151209", "JANNETTE ARD", "9470006739" ] }, { "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", - "uid" : "755d4b911ec79921", + "uid" : "1b9395fedbdcf652", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "flaky" : false, "newFailed" : false, @@ -200,13 +200,13 @@ "parameters" : [ "1 DAISY BANK, LANCASTER, LA1 3JW", "20150305", "JONNY CONOPO", "9469998626" ] }, { "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", - "uid" : "f9f633369c731400", + "uid" : "c3a2fe424cd16ed1", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "flaky" : false, "newFailed" : false, @@ -217,13 +217,13 @@ "parameters" : [ "123 Main Vyt, AB12 3CE", "20/5/1990", "Briar Anderton", "9449306613" ] }, { "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", - "uid" : "bdb9bca637b6c930", + "uid" : "a52e78e82e1f0b84", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -234,13 +234,13 @@ "parameters" : [ "BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN", "20150527", "KATEE TUZZIO", "9470011902" ] }, { "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", - "uid" : "439b792ac4fe86c3", + "uid" : "154d2f52ceb5ab7", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -251,13 +251,13 @@ "parameters" : [ "10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG", "20150706", "JOJO LANE", "9470004272" ] }, { "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", - "uid" : "1bbb0271523a0d78", + "uid" : "429388dd51d212bc", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "flaky" : false, "newFailed" : false, @@ -268,13 +268,13 @@ "parameters" : [ "4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ", "03/03/2020", "Srinivasarao Patel", "9449306605" ] }, { "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", - "uid" : "d6bfed2d66b6b082", + "uid" : "5772a62b0355a544", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "flaky" : false, "newFailed" : false, @@ -285,13 +285,13 @@ "parameters" : [ "50 ST. GEORGES QUAY, LANCASTER, LA1 1SA", "20151217", "SYBIL PELLING", "9470032640" ] }, { "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", - "uid" : "37b0a40448b62cb0", + "uid" : "21c6bb28542d5ad3", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -302,13 +302,13 @@ "parameters" : [ "CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ", "20150222", "TABBY FERN", "9470006143" ] }, { "name" : "Search without entering patient details", - "uid" : "9073f671283bd8d9", + "uid" : "9b5d98653eddcc5f", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "flaky" : false, "newFailed" : false, @@ -319,13 +319,13 @@ "parameters" : [ ] }, { "name" : "Search without entering nhs number", - "uid" : "e17870f578a72fae", + "uid" : "a20f48e7521bc311", "parentUid" : "dad0fa9c36821039b506dc73dbb5bf72", "status" : "failed", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "flaky" : false, "newFailed" : false, @@ -340,13 +340,13 @@ "name" : "Login Feature", "children" : [ { "name" : "Sign in should fail based on credentials provided [None-password-fail]", - "uid" : "f7bf20508c434fed", + "uid" : "8f41996f1f5a5b70", "parentUid" : "07ccdc9b95bf3f4817e5955bf1854cdd", "status" : "failed", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "flaky" : false, "newFailed" : false, @@ -357,13 +357,13 @@ "parameters" : [ "None", "password", "fail" ] }, { "name" : "Login button is visible", - "uid" : "61f836cdbc836f15", + "uid" : "9fedb29016ae726e", "parentUid" : "07ccdc9b95bf3f4817e5955bf1854cdd", "status" : "failed", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "flaky" : false, "newFailed" : false, @@ -373,14 +373,14 @@ "retriesStatusChange" : false, "parameters" : [ ] }, { - "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", - "uid" : "11373fb37287004b", + "name" : "NHS sign in page should be visible", + "uid" : "4d7408061c0bcae", "parentUid" : "07ccdc9b95bf3f4817e5955bf1854cdd", "status" : "failed", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "flaky" : false, "newFailed" : false, @@ -388,16 +388,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "invalid_email_address", "password", "fail" ] + "parameters" : [ ] }, { - "name" : "NHS sign in page should be visible", - "uid" : "c037df325798ad41", + "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", + "uid" : "719e9150413b793c", "parentUid" : "07ccdc9b95bf3f4817e5955bf1854cdd", "status" : "failed", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "flaky" : false, "newFailed" : false, @@ -405,16 +405,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ ] + "parameters" : [ "invalid_email_address", "password", "fail" ] }, { - "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", - "uid" : "3328a6204e080d29", + "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", + "uid" : "5dc484ed8f9b7484", "parentUid" : "07ccdc9b95bf3f4817e5955bf1854cdd", "status" : "failed", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "flaky" : false, "newFailed" : false, @@ -422,16 +422,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] + "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] }, { - "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", - "uid" : "f9692d744a2d6f61", + "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", + "uid" : "b2e7887fd5b870", "parentUid" : "07ccdc9b95bf3f4817e5955bf1854cdd", "status" : "failed", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "flaky" : false, "newFailed" : false, @@ -439,20 +439,20 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] + "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] } ], "uid" : "07ccdc9b95bf3f4817e5955bf1854cdd" }, { "name" : "Logout Feature", "children" : [ { "name" : "NHS sign in page should be visible", - "uid" : "fe944a977277f876", + "uid" : "689bec097321e1a", "parentUid" : "7ea9cf86cfcd32a8ccd0d7d669dec4ee", "status" : "failed", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "flaky" : false, "newFailed" : false, diff --git a/data/categories.json b/data/categories.json index fa281752b..dee3300ff 100644 --- a/data/categories.json +++ b/data/categories.json @@ -7,13 +7,13 @@ "name" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "children" : [ { "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", - "uid" : "948e990045434de2", + "uid" : "e3401ea00bd0843c", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "flaky" : false, "newFailed" : false, @@ -24,13 +24,13 @@ "parameters" : [ "SD7YY2", "24", "today+90", "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] }, { "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", - "uid" : "bbc242fb8e369a80", + "uid" : "1e6e9cb1fff0b312", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "flaky" : false, "newFailed" : false, @@ -41,13 +41,13 @@ "parameters" : [ "NEELIMA HOUSE", "Flu", "Fluenz Tetra - LAIV" ] }, { "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", - "uid" : "45bfe683b38d0492", + "uid" : "b87bf117266ef07e", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -58,13 +58,13 @@ "parameters" : [ "1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW", "23/6/1946", "Bill GARTON", "9693632109" ] }, { "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", - "uid" : "2bd9a9ec7042a35c", + "uid" : "afa2a7f4cb240c49", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "flaky" : false, "newFailed" : false, @@ -75,13 +75,13 @@ "parameters" : [ "Ifyoucan113, GDA11 UCL6, KT17 1NA", "9/3/2018", "COMFORT Jones", "9449304424" ] }, { "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", - "uid" : "df0f8348a085018e", + "uid" : "89c2680de5bf3def", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -92,13 +92,13 @@ "parameters" : [ "39 Barton Road, RG10 9DF", "27/3/2001", "Reynolds Ryan", "9449306494" ] }, { "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", - "uid" : "6922ac45246da27e", + "uid" : "8b876a9eef0cdf63", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "flaky" : false, "newFailed" : false, @@ -109,13 +109,13 @@ "parameters" : [ "Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN", "13/2/2020", "abxxyz Patel", "9449305552" ] }, { "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", - "uid" : "9b1718d8794758dd", + "uid" : "8d10668af26e33dc", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "flaky" : false, "newFailed" : false, @@ -126,13 +126,13 @@ "parameters" : [ "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] }, { "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", - "uid" : "d29791f87c4d62f5", + "uid" : "4a260f7861780518", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "flaky" : false, "newFailed" : false, @@ -143,13 +143,13 @@ "parameters" : [ "10 BROOK STREET, LANCASTER, LA1 1SL", "20160130", "SOLOMON DAZLEY", "9469997956" ] }, { "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", - "uid" : "bb477fbb333e9116", + "uid" : "4a0bb1c2182db8f6", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "flaky" : false, "newFailed" : false, @@ -160,13 +160,13 @@ "parameters" : [ "KT21 1LJ", "20110509", "Not found", "9449306621" ] }, { "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", - "uid" : "9538b5082dbdb7d2", + "uid" : "bb1ba58f4c87730", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -177,13 +177,13 @@ "parameters" : [ "1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ", "20151209", "JANNETTE ARD", "9470006739" ] }, { "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", - "uid" : "755d4b911ec79921", + "uid" : "1b9395fedbdcf652", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "flaky" : false, "newFailed" : false, @@ -194,13 +194,13 @@ "parameters" : [ "1 DAISY BANK, LANCASTER, LA1 3JW", "20150305", "JONNY CONOPO", "9469998626" ] }, { "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", - "uid" : "f9f633369c731400", + "uid" : "c3a2fe424cd16ed1", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "flaky" : false, "newFailed" : false, @@ -211,13 +211,13 @@ "parameters" : [ "123 Main Vyt, AB12 3CE", "20/5/1990", "Briar Anderton", "9449306613" ] }, { "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", - "uid" : "bdb9bca637b6c930", + "uid" : "a52e78e82e1f0b84", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -228,13 +228,13 @@ "parameters" : [ "BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN", "20150527", "KATEE TUZZIO", "9470011902" ] }, { "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", - "uid" : "439b792ac4fe86c3", + "uid" : "154d2f52ceb5ab7", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -245,13 +245,13 @@ "parameters" : [ "10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG", "20150706", "JOJO LANE", "9470004272" ] }, { "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", - "uid" : "1bbb0271523a0d78", + "uid" : "429388dd51d212bc", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "flaky" : false, "newFailed" : false, @@ -262,13 +262,13 @@ "parameters" : [ "4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ", "03/03/2020", "Srinivasarao Patel", "9449306605" ] }, { "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", - "uid" : "d6bfed2d66b6b082", + "uid" : "5772a62b0355a544", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "flaky" : false, "newFailed" : false, @@ -279,13 +279,13 @@ "parameters" : [ "50 ST. GEORGES QUAY, LANCASTER, LA1 1SA", "20151217", "SYBIL PELLING", "9470032640" ] }, { "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", - "uid" : "37b0a40448b62cb0", + "uid" : "21c6bb28542d5ad3", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -296,13 +296,13 @@ "parameters" : [ "CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ", "20150222", "TABBY FERN", "9470006143" ] }, { "name" : "Search without entering patient details", - "uid" : "9073f671283bd8d9", + "uid" : "9b5d98653eddcc5f", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "flaky" : false, "newFailed" : false, @@ -313,13 +313,13 @@ "parameters" : [ ] }, { "name" : "Search without entering nhs number", - "uid" : "e17870f578a72fae", + "uid" : "a20f48e7521bc311", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "flaky" : false, "newFailed" : false, @@ -330,13 +330,13 @@ "parameters" : [ ] }, { "name" : "Sign in should fail based on credentials provided [None-password-fail]", - "uid" : "f7bf20508c434fed", + "uid" : "8f41996f1f5a5b70", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "flaky" : false, "newFailed" : false, @@ -347,13 +347,13 @@ "parameters" : [ "None", "password", "fail" ] }, { "name" : "NHS sign in page should be visible", - "uid" : "fe944a977277f876", + "uid" : "689bec097321e1a", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "flaky" : false, "newFailed" : false, @@ -363,14 +363,14 @@ "retriesStatusChange" : false, "parameters" : [ ] }, { - "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", - "uid" : "11373fb37287004b", + "name" : "NHS sign in page should be visible", + "uid" : "4d7408061c0bcae", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "flaky" : false, "newFailed" : false, @@ -378,16 +378,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "invalid_email_address", "password", "fail" ] + "parameters" : [ ] }, { - "name" : "NHS sign in page should be visible", - "uid" : "c037df325798ad41", + "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", + "uid" : "719e9150413b793c", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "flaky" : false, "newFailed" : false, @@ -395,16 +395,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ ] + "parameters" : [ "invalid_email_address", "password", "fail" ] }, { - "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", - "uid" : "3328a6204e080d29", + "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", + "uid" : "5dc484ed8f9b7484", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "flaky" : false, "newFailed" : false, @@ -412,16 +412,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] + "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] }, { - "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", - "uid" : "f9692d744a2d6f61", + "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", + "uid" : "b2e7887fd5b870", "parentUid" : "16f9155b6fa3e6858fa143ce5db8ac95", "status" : "failed", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "flaky" : false, "newFailed" : false, @@ -429,20 +429,20 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] + "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] } ], "uid" : "16f9155b6fa3e6858fa143ce5db8ac95" }, { "name" : "AssertionError: Login button is not visible\nassert False", "children" : [ { "name" : "Login button is visible", - "uid" : "61f836cdbc836f15", + "uid" : "9fedb29016ae726e", "parentUid" : "94581fa1acf8d2c73ce0b58af90d7203", "status" : "failed", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "flaky" : false, "newFailed" : false, diff --git a/data/packages.json b/data/packages.json index ab9ac539a..b54982727 100644 --- a/data/packages.json +++ b/data/packages.json @@ -3,13 +3,13 @@ "name" : "packages", "children" : [ { "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", - "uid" : "948e990045434de2", + "uid" : "e3401ea00bd0843c", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "flaky" : false, "newFailed" : false, @@ -20,13 +20,13 @@ "parameters" : [ "SD7YY2", "24", "today+90", "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] }, { "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", - "uid" : "bbc242fb8e369a80", + "uid" : "1e6e9cb1fff0b312", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "flaky" : false, "newFailed" : false, @@ -37,13 +37,13 @@ "parameters" : [ "NEELIMA HOUSE", "Flu", "Fluenz Tetra - LAIV" ] }, { "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", - "uid" : "45bfe683b38d0492", + "uid" : "b87bf117266ef07e", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -54,13 +54,13 @@ "parameters" : [ "1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW", "23/6/1946", "Bill GARTON", "9693632109" ] }, { "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", - "uid" : "2bd9a9ec7042a35c", + "uid" : "afa2a7f4cb240c49", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "flaky" : false, "newFailed" : false, @@ -71,13 +71,13 @@ "parameters" : [ "Ifyoucan113, GDA11 UCL6, KT17 1NA", "9/3/2018", "COMFORT Jones", "9449304424" ] }, { "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", - "uid" : "df0f8348a085018e", + "uid" : "89c2680de5bf3def", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -88,13 +88,13 @@ "parameters" : [ "39 Barton Road, RG10 9DF", "27/3/2001", "Reynolds Ryan", "9449306494" ] }, { "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", - "uid" : "6922ac45246da27e", + "uid" : "8b876a9eef0cdf63", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "flaky" : false, "newFailed" : false, @@ -105,13 +105,13 @@ "parameters" : [ "Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN", "13/2/2020", "abxxyz Patel", "9449305552" ] }, { "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", - "uid" : "9b1718d8794758dd", + "uid" : "8d10668af26e33dc", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "flaky" : false, "newFailed" : false, @@ -122,13 +122,13 @@ "parameters" : [ "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] }, { "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", - "uid" : "d29791f87c4d62f5", + "uid" : "4a260f7861780518", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "flaky" : false, "newFailed" : false, @@ -139,13 +139,13 @@ "parameters" : [ "10 BROOK STREET, LANCASTER, LA1 1SL", "20160130", "SOLOMON DAZLEY", "9469997956" ] }, { "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", - "uid" : "bb477fbb333e9116", + "uid" : "4a0bb1c2182db8f6", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "flaky" : false, "newFailed" : false, @@ -156,13 +156,13 @@ "parameters" : [ "KT21 1LJ", "20110509", "Not found", "9449306621" ] }, { "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", - "uid" : "9538b5082dbdb7d2", + "uid" : "bb1ba58f4c87730", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -173,13 +173,13 @@ "parameters" : [ "1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ", "20151209", "JANNETTE ARD", "9470006739" ] }, { "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", - "uid" : "755d4b911ec79921", + "uid" : "1b9395fedbdcf652", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "flaky" : false, "newFailed" : false, @@ -190,13 +190,13 @@ "parameters" : [ "1 DAISY BANK, LANCASTER, LA1 3JW", "20150305", "JONNY CONOPO", "9469998626" ] }, { "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", - "uid" : "f9f633369c731400", + "uid" : "c3a2fe424cd16ed1", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "flaky" : false, "newFailed" : false, @@ -207,13 +207,13 @@ "parameters" : [ "123 Main Vyt, AB12 3CE", "20/5/1990", "Briar Anderton", "9449306613" ] }, { "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", - "uid" : "bdb9bca637b6c930", + "uid" : "a52e78e82e1f0b84", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -224,13 +224,13 @@ "parameters" : [ "BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN", "20150527", "KATEE TUZZIO", "9470011902" ] }, { "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", - "uid" : "439b792ac4fe86c3", + "uid" : "154d2f52ceb5ab7", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -241,13 +241,13 @@ "parameters" : [ "10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG", "20150706", "JOJO LANE", "9470004272" ] }, { "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", - "uid" : "1bbb0271523a0d78", + "uid" : "429388dd51d212bc", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "flaky" : false, "newFailed" : false, @@ -258,13 +258,13 @@ "parameters" : [ "4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ", "03/03/2020", "Srinivasarao Patel", "9449306605" ] }, { "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", - "uid" : "d6bfed2d66b6b082", + "uid" : "5772a62b0355a544", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "flaky" : false, "newFailed" : false, @@ -275,13 +275,13 @@ "parameters" : [ "50 ST. GEORGES QUAY, LANCASTER, LA1 1SA", "20151217", "SYBIL PELLING", "9470032640" ] }, { "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", - "uid" : "37b0a40448b62cb0", + "uid" : "21c6bb28542d5ad3", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -292,13 +292,13 @@ "parameters" : [ "CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ", "20150222", "TABBY FERN", "9470006143" ] }, { "name" : "Search without entering patient details", - "uid" : "9073f671283bd8d9", + "uid" : "9b5d98653eddcc5f", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "flaky" : false, "newFailed" : false, @@ -309,13 +309,13 @@ "parameters" : [ ] }, { "name" : "Search without entering nhs number", - "uid" : "e17870f578a72fae", + "uid" : "a20f48e7521bc311", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "flaky" : false, "newFailed" : false, @@ -326,13 +326,13 @@ "parameters" : [ ] }, { "name" : "Sign in should fail based on credentials provided [None-password-fail]", - "uid" : "f7bf20508c434fed", + "uid" : "8f41996f1f5a5b70", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "flaky" : false, "newFailed" : false, @@ -343,13 +343,13 @@ "parameters" : [ "None", "password", "fail" ] }, { "name" : "Login button is visible", - "uid" : "61f836cdbc836f15", + "uid" : "9fedb29016ae726e", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "flaky" : false, "newFailed" : false, @@ -360,13 +360,13 @@ "parameters" : [ ] }, { "name" : "NHS sign in page should be visible", - "uid" : "fe944a977277f876", + "uid" : "689bec097321e1a", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "flaky" : false, "newFailed" : false, @@ -376,14 +376,14 @@ "retriesStatusChange" : false, "parameters" : [ ] }, { - "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", - "uid" : "11373fb37287004b", + "name" : "NHS sign in page should be visible", + "uid" : "4d7408061c0bcae", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "flaky" : false, "newFailed" : false, @@ -391,16 +391,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "invalid_email_address", "password", "fail" ] + "parameters" : [ ] }, { - "name" : "NHS sign in page should be visible", - "uid" : "c037df325798ad41", + "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", + "uid" : "719e9150413b793c", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "flaky" : false, "newFailed" : false, @@ -408,16 +408,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ ] + "parameters" : [ "invalid_email_address", "password", "fail" ] }, { - "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", - "uid" : "3328a6204e080d29", + "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", + "uid" : "5dc484ed8f9b7484", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "flaky" : false, "newFailed" : false, @@ -425,16 +425,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] + "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] }, { - "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", - "uid" : "f9692d744a2d6f61", + "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", + "uid" : "b2e7887fd5b870", "parentUid" : "83edc06c07f9ae9e47eb6dd1b683e4e2", "status" : "failed", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "flaky" : false, "newFailed" : false, @@ -442,6 +442,6 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] + "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] } ] } \ No newline at end of file diff --git a/data/suites.csv b/data/suites.csv index 0dc1e1209..4d0ce33f3 100644 --- a/data/suites.csv +++ b/data/suites.csv @@ -1,27 +1,27 @@ "Status","Start Time","Stop Time","Duration in ms","Parent Suite","Suite","Sub Suite","Test Class","Test Method","Name","Description" -"failed","Tue Jun 25 07:18:06 UTC 2024","Tue Jun 25 07:18:36 UTC 2024","30227","","","","","","Search without entering nhs number","" -"failed","Tue Jun 25 07:18:36 UTC 2024","Tue Jun 25 07:19:06 UTC 2024","30214","","","","","","NHS sign in page should be visible","" -"failed","Tue Jun 25 07:16:36 UTC 2024","Tue Jun 25 07:17:06 UTC 2024","30239","","","","","","Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]","" -"failed","Tue Jun 25 07:18:06 UTC 2024","Tue Jun 25 07:18:37 UTC 2024","30199","","","","","","Sign in should fail based on credentials provided [None-password-fail]","" -"failed","Tue Jun 25 07:19:08 UTC 2024","Tue Jun 25 07:19:38 UTC 2024","30204","","","","","","Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]","" -"failed","Tue Jun 25 07:17:05 UTC 2024","Tue Jun 25 07:17:35 UTC 2024","30221","","","","","","Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]","" -"failed","Tue Jun 25 07:15:35 UTC 2024","Tue Jun 25 07:16:05 UTC 2024","30217","","","","","","Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]","" -"failed","Tue Jun 25 07:19:07 UTC 2024","Tue Jun 25 07:19:37 UTC 2024","30195","","","","","","Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]","" -"failed","Tue Jun 25 07:17:36 UTC 2024","Tue Jun 25 07:18:06 UTC 2024","30227","","","","","","Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]","" -"failed","Tue Jun 25 07:11:00 UTC 2024","Tue Jun 25 07:11:31 UTC 2024","30284","","","","","","Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]","" -"failed","Tue Jun 25 07:07:57 UTC 2024","Tue Jun 25 07:08:27 UTC 2024","30382","","","","","","Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]","" -"failed","Tue Jun 25 07:18:37 UTC 2024","Tue Jun 25 07:19:07 UTC 2024","30198","","","","","","NHS sign in page should be visible","" -"failed","Tue Jun 25 07:17:06 UTC 2024","Tue Jun 25 07:17:36 UTC 2024","30224","","","","","","Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]","" -"failed","Tue Jun 25 07:17:37 UTC 2024","Tue Jun 25 07:18:07 UTC 2024","30216","","","","","","Search without entering patient details","" -"failed","Tue Jun 25 07:16:05 UTC 2024","Tue Jun 25 07:16:35 UTC 2024","30213","","","","","","Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]","" -"failed","Tue Jun 25 07:18:37 UTC 2024","Tue Jun 25 07:19:07 UTC 2024","30190","","","","","","Sign in should fail based on credentials provided [invalid_email_address-password-fail]","" -"failed","Tue Jun 25 07:16:34 UTC 2024","Tue Jun 25 07:17:04 UTC 2024","30236","","","","","","Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]","" -"failed","Tue Jun 25 07:15:34 UTC 2024","Tue Jun 25 07:16:04 UTC 2024","30221","","","","","","Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]","" -"failed","Tue Jun 25 07:17:06 UTC 2024","Tue Jun 25 07:17:36 UTC 2024","30230","","","","","","Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]","" -"failed","Tue Jun 25 07:17:35 UTC 2024","Tue Jun 25 07:18:05 UTC 2024","30219","","","","","","Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]","" -"failed","Tue Jun 25 07:16:35 UTC 2024","Tue Jun 25 07:17:05 UTC 2024","30229","","","","","","Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]","" -"failed","Tue Jun 25 07:14:34 UTC 2024","Tue Jun 25 07:15:04 UTC 2024","30228","","","","","","Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]","" -"failed","Tue Jun 25 07:16:05 UTC 2024","Tue Jun 25 07:16:35 UTC 2024","30232","","","","","","Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]","" -"failed","Tue Jun 25 07:18:07 UTC 2024","Tue Jun 25 07:18:37 UTC 2024","30206","","","","","","Login button is visible","" -"failed","Tue Jun 25 07:16:04 UTC 2024","Tue Jun 25 07:16:34 UTC 2024","30248","","","","","","Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]","" -"failed","Tue Jun 25 07:15:04 UTC 2024","Tue Jun 25 07:15:35 UTC 2024","30221","","","","","","Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]","" +"failed","Wed Jun 26 07:16:01 UTC 2024","Wed Jun 26 07:16:31 UTC 2024","30328","","","","","","Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]","" +"failed","Wed Jun 26 07:17:02 UTC 2024","Wed Jun 26 07:17:32 UTC 2024","30358","","","","","","Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]","" +"failed","Wed Jun 26 07:17:02 UTC 2024","Wed Jun 26 07:17:32 UTC 2024","30295","","","","","","Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]","" +"failed","Wed Jun 26 07:15:30 UTC 2024","Wed Jun 26 07:16:00 UTC 2024","30336","","","","","","Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]","" +"failed","Wed Jun 26 07:15:30 UTC 2024","Wed Jun 26 07:16:00 UTC 2024","30358","","","","","","Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]","" +"failed","Wed Jun 26 07:07:50 UTC 2024","Wed Jun 26 07:08:21 UTC 2024","30476","","","","","","Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]","" +"failed","Wed Jun 26 07:16:31 UTC 2024","Wed Jun 26 07:17:01 UTC 2024","30371","","","","","","Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]","" +"failed","Wed Jun 26 07:18:03 UTC 2024","Wed Jun 26 07:18:34 UTC 2024","30254","","","","","","Login button is visible","" +"failed","Wed Jun 26 07:16:31 UTC 2024","Wed Jun 26 07:17:02 UTC 2024","30305","","","","","","Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]","" +"failed","Wed Jun 26 07:16:59 UTC 2024","Wed Jun 26 07:17:30 UTC 2024","30233","","","","","","Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]","" +"failed","Wed Jun 26 07:15:58 UTC 2024","Wed Jun 26 07:16:29 UTC 2024","30290","","","","","","Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]","" +"failed","Wed Jun 26 07:17:30 UTC 2024","Wed Jun 26 07:18:00 UTC 2024","30235","","","","","","Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]","" +"failed","Wed Jun 26 07:10:55 UTC 2024","Wed Jun 26 07:11:25 UTC 2024","30430","","","","","","Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]","" +"failed","Wed Jun 26 07:16:29 UTC 2024","Wed Jun 26 07:16:59 UTC 2024","30233","","","","","","Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]","" +"failed","Wed Jun 26 07:18:03 UTC 2024","Wed Jun 26 07:18:33 UTC 2024","30365","","","","","","Sign in should fail based on credentials provided [None-password-fail]","" +"failed","Wed Jun 26 07:17:32 UTC 2024","Wed Jun 26 07:18:03 UTC 2024","30338","","","","","","Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]","" +"failed","Wed Jun 26 07:19:04 UTC 2024","Wed Jun 26 07:19:35 UTC 2024","30335","","","","","","Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]","" +"failed","Wed Jun 26 07:18:34 UTC 2024","Wed Jun 26 07:19:04 UTC 2024","30286","","","","","","Sign in should fail based on credentials provided [invalid_email_address-password-fail]","" +"failed","Wed Jun 26 07:18:31 UTC 2024","Wed Jun 26 07:19:01 UTC 2024","30227","","","","","","NHS sign in page should be visible","" +"failed","Wed Jun 26 07:17:33 UTC 2024","Wed Jun 26 07:18:03 UTC 2024","30324","","","","","","Search without entering patient details","" +"failed","Wed Jun 26 07:18:00 UTC 2024","Wed Jun 26 07:18:30 UTC 2024","30216","","","","","","Search without entering nhs number","" +"failed","Wed Jun 26 07:18:34 UTC 2024","Wed Jun 26 07:19:04 UTC 2024","30313","","","","","","NHS sign in page should be visible","" +"failed","Wed Jun 26 07:14:29 UTC 2024","Wed Jun 26 07:14:59 UTC 2024","30338","","","","","","Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]","" +"failed","Wed Jun 26 07:16:00 UTC 2024","Wed Jun 26 07:16:31 UTC 2024","30352","","","","","","Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]","" +"failed","Wed Jun 26 07:14:59 UTC 2024","Wed Jun 26 07:15:30 UTC 2024","30333","","","","","","Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]","" +"failed","Wed Jun 26 07:19:04 UTC 2024","Wed Jun 26 07:19:35 UTC 2024","30304","","","","","","Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]","" diff --git a/data/suites.json b/data/suites.json index 7cb879dac..b0cccce2a 100644 --- a/data/suites.json +++ b/data/suites.json @@ -3,13 +3,13 @@ "name" : "suites", "children" : [ { "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", - "uid" : "948e990045434de2", + "uid" : "e3401ea00bd0843c", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "flaky" : false, "newFailed" : false, @@ -20,13 +20,13 @@ "parameters" : [ "SD7YY2", "24", "today+90", "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] }, { "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", - "uid" : "bbc242fb8e369a80", + "uid" : "1e6e9cb1fff0b312", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "flaky" : false, "newFailed" : false, @@ -37,13 +37,13 @@ "parameters" : [ "NEELIMA HOUSE", "Flu", "Fluenz Tetra - LAIV" ] }, { "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", - "uid" : "45bfe683b38d0492", + "uid" : "b87bf117266ef07e", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -54,13 +54,13 @@ "parameters" : [ "1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW", "23/6/1946", "Bill GARTON", "9693632109" ] }, { "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", - "uid" : "2bd9a9ec7042a35c", + "uid" : "afa2a7f4cb240c49", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "flaky" : false, "newFailed" : false, @@ -71,13 +71,13 @@ "parameters" : [ "Ifyoucan113, GDA11 UCL6, KT17 1NA", "9/3/2018", "COMFORT Jones", "9449304424" ] }, { "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", - "uid" : "df0f8348a085018e", + "uid" : "89c2680de5bf3def", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -88,13 +88,13 @@ "parameters" : [ "39 Barton Road, RG10 9DF", "27/3/2001", "Reynolds Ryan", "9449306494" ] }, { "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", - "uid" : "6922ac45246da27e", + "uid" : "8b876a9eef0cdf63", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "flaky" : false, "newFailed" : false, @@ -105,13 +105,13 @@ "parameters" : [ "Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN", "13/2/2020", "abxxyz Patel", "9449305552" ] }, { "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", - "uid" : "9b1718d8794758dd", + "uid" : "8d10668af26e33dc", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "flaky" : false, "newFailed" : false, @@ -122,13 +122,13 @@ "parameters" : [ "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] }, { "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", - "uid" : "d29791f87c4d62f5", + "uid" : "4a260f7861780518", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "flaky" : false, "newFailed" : false, @@ -139,13 +139,13 @@ "parameters" : [ "10 BROOK STREET, LANCASTER, LA1 1SL", "20160130", "SOLOMON DAZLEY", "9469997956" ] }, { "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", - "uid" : "bb477fbb333e9116", + "uid" : "4a0bb1c2182db8f6", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "flaky" : false, "newFailed" : false, @@ -156,13 +156,13 @@ "parameters" : [ "KT21 1LJ", "20110509", "Not found", "9449306621" ] }, { "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", - "uid" : "9538b5082dbdb7d2", + "uid" : "bb1ba58f4c87730", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -173,13 +173,13 @@ "parameters" : [ "1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ", "20151209", "JANNETTE ARD", "9470006739" ] }, { "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", - "uid" : "755d4b911ec79921", + "uid" : "1b9395fedbdcf652", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "flaky" : false, "newFailed" : false, @@ -190,13 +190,13 @@ "parameters" : [ "1 DAISY BANK, LANCASTER, LA1 3JW", "20150305", "JONNY CONOPO", "9469998626" ] }, { "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", - "uid" : "f9f633369c731400", + "uid" : "c3a2fe424cd16ed1", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "flaky" : false, "newFailed" : false, @@ -207,13 +207,13 @@ "parameters" : [ "123 Main Vyt, AB12 3CE", "20/5/1990", "Briar Anderton", "9449306613" ] }, { "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", - "uid" : "bdb9bca637b6c930", + "uid" : "a52e78e82e1f0b84", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -224,13 +224,13 @@ "parameters" : [ "BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN", "20150527", "KATEE TUZZIO", "9470011902" ] }, { "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", - "uid" : "439b792ac4fe86c3", + "uid" : "154d2f52ceb5ab7", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -241,13 +241,13 @@ "parameters" : [ "10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG", "20150706", "JOJO LANE", "9470004272" ] }, { "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", - "uid" : "1bbb0271523a0d78", + "uid" : "429388dd51d212bc", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "flaky" : false, "newFailed" : false, @@ -258,13 +258,13 @@ "parameters" : [ "4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ", "03/03/2020", "Srinivasarao Patel", "9449306605" ] }, { "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", - "uid" : "d6bfed2d66b6b082", + "uid" : "5772a62b0355a544", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "flaky" : false, "newFailed" : false, @@ -275,13 +275,13 @@ "parameters" : [ "50 ST. GEORGES QUAY, LANCASTER, LA1 1SA", "20151217", "SYBIL PELLING", "9470032640" ] }, { "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", - "uid" : "37b0a40448b62cb0", + "uid" : "21c6bb28542d5ad3", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -292,13 +292,13 @@ "parameters" : [ "CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ", "20150222", "TABBY FERN", "9470006143" ] }, { "name" : "Search without entering patient details", - "uid" : "9073f671283bd8d9", + "uid" : "9b5d98653eddcc5f", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "flaky" : false, "newFailed" : false, @@ -309,13 +309,13 @@ "parameters" : [ ] }, { "name" : "Search without entering nhs number", - "uid" : "e17870f578a72fae", + "uid" : "a20f48e7521bc311", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "flaky" : false, "newFailed" : false, @@ -326,13 +326,13 @@ "parameters" : [ ] }, { "name" : "Sign in should fail based on credentials provided [None-password-fail]", - "uid" : "f7bf20508c434fed", + "uid" : "8f41996f1f5a5b70", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "flaky" : false, "newFailed" : false, @@ -343,13 +343,13 @@ "parameters" : [ "None", "password", "fail" ] }, { "name" : "Login button is visible", - "uid" : "61f836cdbc836f15", + "uid" : "9fedb29016ae726e", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "flaky" : false, "newFailed" : false, @@ -360,13 +360,13 @@ "parameters" : [ ] }, { "name" : "NHS sign in page should be visible", - "uid" : "fe944a977277f876", + "uid" : "689bec097321e1a", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "flaky" : false, "newFailed" : false, @@ -376,14 +376,14 @@ "retriesStatusChange" : false, "parameters" : [ ] }, { - "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", - "uid" : "11373fb37287004b", + "name" : "NHS sign in page should be visible", + "uid" : "4d7408061c0bcae", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "flaky" : false, "newFailed" : false, @@ -391,16 +391,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "invalid_email_address", "password", "fail" ] + "parameters" : [ ] }, { - "name" : "NHS sign in page should be visible", - "uid" : "c037df325798ad41", + "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", + "uid" : "719e9150413b793c", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "flaky" : false, "newFailed" : false, @@ -408,16 +408,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ ] + "parameters" : [ "invalid_email_address", "password", "fail" ] }, { - "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", - "uid" : "3328a6204e080d29", + "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", + "uid" : "5dc484ed8f9b7484", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "flaky" : false, "newFailed" : false, @@ -425,16 +425,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] + "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] }, { - "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", - "uid" : "f9692d744a2d6f61", + "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", + "uid" : "b2e7887fd5b870", "parentUid" : "98d3104e051c652961429bf95fa0b5d6", "status" : "failed", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "flaky" : false, "newFailed" : false, @@ -442,6 +442,6 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] + "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] } ] } \ No newline at end of file diff --git a/data/test-cases/439b792ac4fe86c3.json b/data/test-cases/154d2f52ceb5ab7.json similarity index 94% rename from data/test-cases/439b792ac4fe86c3.json rename to data/test-cases/154d2f52ceb5ab7.json index 60b601474..30fdda6d9 100644 --- a/data/test-cases/439b792ac4fe86c3.json +++ b/data/test-cases/154d2f52ceb5ab7.json @@ -1,16 +1,16 @@ { - "uid" : "439b792ac4fe86c3", + "uid" : "154d2f52ceb5ab7", "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "ed6666debf11d945777849a6e8dc2c31", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cd807c0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fac26fc0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cd807c0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fac26fc0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299826015, - "stop" : 1719299856244, - "duration" : 30229 + "start" : 1719386222311, + "stop" : 1719386252668, + "duration" : 30357 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "439b792ac4fe86c3.json", + "source" : "154d2f52ceb5ab7.json", "parameterValues" : [ "10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG", "20150706", "JOJO LANE", "9470004272" ] } \ No newline at end of file diff --git a/data/test-cases/755d4b911ec79921.json b/data/test-cases/1b9395fedbdcf652.json similarity index 94% rename from data/test-cases/755d4b911ec79921.json rename to data/test-cases/1b9395fedbdcf652.json index 11afe3281..c7845d510 100644 --- a/data/test-cases/755d4b911ec79921.json +++ b/data/test-cases/1b9395fedbdcf652.json @@ -1,16 +1,16 @@ { - "uid" : "755d4b911ec79921", + "uid" : "1b9395fedbdcf652", "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "f312e1d375b46f243b4eeb052610663a", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cf4b880>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbd35580>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cf4b880>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbd35580>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "755d4b911ec79921.json", + "source" : "1b9395fedbdcf652.json", "parameterValues" : [ "1 DAISY BANK, LANCASTER, LA1 3JW", "20150305", "JONNY CONOPO", "9469998626" ] } \ No newline at end of file diff --git a/data/test-cases/bbc242fb8e369a80.json b/data/test-cases/1e6e9cb1fff0b312.json similarity index 94% rename from data/test-cases/bbc242fb8e369a80.json rename to data/test-cases/1e6e9cb1fff0b312.json index 06506f4ab..51f353604 100644 --- a/data/test-cases/bbc242fb8e369a80.json +++ b/data/test-cases/1e6e9cb1fff0b312.json @@ -1,16 +1,16 @@ { - "uid" : "bbc242fb8e369a80", + "uid" : "1e6e9cb1fff0b312", "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", "fullName" : "/app/features/add_vaccines.feature:Vaccine already added to site warning should appear", "historyId" : "a8aa27b0635eae8880b4ff47f75d8f73", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cf49580>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbd798a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cf49580>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbd798a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the RAVS home page", "time" : { - "start" : 1719299460934, - "stop" : 1719299491217, - "duration" : 30283 + "start" : 1719385855055, + "stop" : 1719385885484, + "duration" : 30429 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -90,6 +90,6 @@ } ], "tags" : [ ] }, - "source" : "bbc242fb8e369a80.json", + "source" : "1e6e9cb1fff0b312.json", "parameterValues" : [ "NEELIMA HOUSE", "Flu", "Fluenz Tetra - LAIV" ] } \ No newline at end of file diff --git a/data/test-cases/37b0a40448b62cb0.json b/data/test-cases/21c6bb28542d5ad3.json similarity index 94% rename from data/test-cases/37b0a40448b62cb0.json rename to data/test-cases/21c6bb28542d5ad3.json index 4bd4b8b3d..703ac5162 100644 --- a/data/test-cases/37b0a40448b62cb0.json +++ b/data/test-cases/21c6bb28542d5ad3.json @@ -1,16 +1,16 @@ { - "uid" : "37b0a40448b62cb0", + "uid" : "21c6bb28542d5ad3", "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "d3c8a128e42732e8c43697d4afeb3b03", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cd81300>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbdaad40>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cd81300>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbdaad40>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299856463, - "stop" : 1719299886689, - "duration" : 30226 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "37b0a40448b62cb0.json", + "source" : "21c6bb28542d5ad3.json", "parameterValues" : [ "CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ", "20150222", "TABBY FERN", "9470006143" ] } \ No newline at end of file diff --git a/data/test-cases/1bbb0271523a0d78.json b/data/test-cases/429388dd51d212bc.json similarity index 94% rename from data/test-cases/1bbb0271523a0d78.json rename to data/test-cases/429388dd51d212bc.json index c148debb6..7236d09f4 100644 --- a/data/test-cases/1bbb0271523a0d78.json +++ b/data/test-cases/429388dd51d212bc.json @@ -1,16 +1,16 @@ { - "uid" : "1bbb0271523a0d78", + "uid" : "429388dd51d212bc", "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "f9f8414ec380c45b71eb3763bdeb20b1", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fde9b66a340>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd354b80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fde9b66a340>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd354b80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386222438, + "stop" : 1719386252732, + "duration" : 30294 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "1bbb0271523a0d78.json", + "source" : "429388dd51d212bc.json", "parameterValues" : [ "4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ", "03/03/2020", "Srinivasarao Patel", "9449306605" ] } \ No newline at end of file diff --git a/data/test-cases/bb477fbb333e9116.json b/data/test-cases/4a0bb1c2182db8f6.json similarity index 94% rename from data/test-cases/bb477fbb333e9116.json rename to data/test-cases/4a0bb1c2182db8f6.json index 403e3016a..7253914c5 100644 --- a/data/test-cases/bb477fbb333e9116.json +++ b/data/test-cases/4a0bb1c2182db8f6.json @@ -1,16 +1,16 @@ { - "uid" : "bb477fbb333e9116", + "uid" : "4a0bb1c2182db8f6", "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "0fd4673960ee87b956d33755840cb9e9", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03ae020>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abe4ea660>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03ae020>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abe4ea660>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "bb477fbb333e9116.json", + "source" : "4a0bb1c2182db8f6.json", "parameterValues" : [ "KT21 1LJ", "20110509", "Not found", "9449306621" ] } \ No newline at end of file diff --git a/data/test-cases/d29791f87c4d62f5.json b/data/test-cases/4a260f7861780518.json similarity index 94% rename from data/test-cases/d29791f87c4d62f5.json rename to data/test-cases/4a260f7861780518.json index ebd4dea62..829742d58 100644 --- a/data/test-cases/d29791f87c4d62f5.json +++ b/data/test-cases/4a260f7861780518.json @@ -1,16 +1,16 @@ { - "uid" : "d29791f87c4d62f5", + "uid" : "4a260f7861780518", "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "bf067cabd4515f88e1c3ee93869bc864", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3ce313a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbd7bd80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3ce313a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbd7bd80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299765117, - "stop" : 1719299795329, - "duration" : 30212 + "start" : 1719386160984, + "stop" : 1719386191335, + "duration" : 30351 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "d29791f87c4d62f5.json", + "source" : "4a260f7861780518.json", "parameterValues" : [ "10 BROOK STREET, LANCASTER, LA1 1SL", "20160130", "SOLOMON DAZLEY", "9469997956" ] } \ No newline at end of file diff --git a/data/test-cases/c037df325798ad41.json b/data/test-cases/4d7408061c0bcae.json similarity index 92% rename from data/test-cases/c037df325798ad41.json rename to data/test-cases/4d7408061c0bcae.json index 6ba252540..ca91f5d8e 100644 --- a/data/test-cases/c037df325798ad41.json +++ b/data/test-cases/4d7408061c0bcae.json @@ -1,16 +1,16 @@ { - "uid" : "c037df325798ad41", + "uid" : "4d7408061c0bcae", "name" : "NHS sign in page should be visible", "fullName" : "features/login.feature:NHS sign in page should be visible", "historyId" : "af06b7202b34fb810ed33c32dfaf440e", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03ae8e0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd3562a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03ae8e0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd3562a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I access the ravs web app", "time" : { - "start" : 1719299917789, - "stop" : 1719299917883, - "duration" : 94 + "start" : 1719386314133, + "stop" : 1719386314315, + "duration" : 182 }, "status" : "passed", "steps" : [ ], @@ -40,9 +40,9 @@ }, { "name" : "When I click on the log in button", "time" : { - "start" : 1719299917884, - "stop" : 1719299947986, - "duration" : 30102 + "start" : 1719386314323, + "stop" : 1719386344446, + "duration" : 30123 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -65,10 +65,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -96,6 +96,6 @@ } ], "tags" : [ ] }, - "source" : "c037df325798ad41.json", + "source" : "4d7408061c0bcae.json", "parameterValues" : [ ] } \ No newline at end of file diff --git a/data/test-cases/d6bfed2d66b6b082.json b/data/test-cases/5772a62b0355a544.json similarity index 94% rename from data/test-cases/d6bfed2d66b6b082.json rename to data/test-cases/5772a62b0355a544.json index 3fc4502ae..1b2cb4386 100644 --- a/data/test-cases/d6bfed2d66b6b082.json +++ b/data/test-cases/5772a62b0355a544.json @@ -1,16 +1,16 @@ { - "uid" : "d6bfed2d66b6b082", + "uid" : "5772a62b0355a544", "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "494c3ac089981262ce3f05b1ca057109", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f1400565f80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4df7420>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f1400565f80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4df7420>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386250314, + "stop" : 1719386280548, + "duration" : 30234 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1035-MainThread" + "value" : "1040-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "d6bfed2d66b6b082.json", + "source" : "5772a62b0355a544.json", "parameterValues" : [ "50 ST. GEORGES QUAY, LANCASTER, LA1 1SA", "20151217", "SYBIL PELLING", "9470032640" ] } \ No newline at end of file diff --git a/data/test-cases/f9692d744a2d6f61.json b/data/test-cases/5dc484ed8f9b7484.json similarity index 92% rename from data/test-cases/f9692d744a2d6f61.json rename to data/test-cases/5dc484ed8f9b7484.json index 62ecc1724..6a8cfb55e 100644 --- a/data/test-cases/f9692d744a2d6f61.json +++ b/data/test-cases/5dc484ed8f9b7484.json @@ -1,16 +1,16 @@ { - "uid" : "f9692d744a2d6f61", + "uid" : "5dc484ed8f9b7484", "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", "fullName" : "features/login.feature:Sign in should fail based on credentials provided", "historyId" : "70461446af9e11e5bb03662f019284bf", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea0389300>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd3b14e0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea0389300>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd3b14e0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I access the ravs web app", "time" : { - "start" : 1719299948165, - "stop" : 1719299948263, - "duration" : 98 + "start" : 1719386344704, + "stop" : 1719386344872, + "duration" : 168 }, "status" : "passed", "steps" : [ ], @@ -40,9 +40,9 @@ }, { "name" : "When I click on the log in button", "time" : { - "start" : 1719299948263, - "stop" : 1719299978369, - "duration" : 30106 + "start" : 1719386344872, + "stop" : 1719386375008, + "duration" : 30136 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -65,10 +65,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -105,6 +105,6 @@ } ], "tags" : [ ] }, - "source" : "f9692d744a2d6f61.json", + "source" : "5dc484ed8f9b7484.json", "parameterValues" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] } \ No newline at end of file diff --git a/data/test-cases/fe944a977277f876.json b/data/test-cases/689bec097321e1a.json similarity index 94% rename from data/test-cases/fe944a977277f876.json rename to data/test-cases/689bec097321e1a.json index 082fd63d4..1dd79d1bc 100644 --- a/data/test-cases/fe944a977277f876.json +++ b/data/test-cases/689bec097321e1a.json @@ -1,16 +1,16 @@ { - "uid" : "fe944a977277f876", + "uid" : "689bec097321e1a", "name" : "NHS sign in page should be visible", "fullName" : "features/logout.feature:NHS sign in page should be visible", "historyId" : "807ba16b9c51dae553be51c09f89547b", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f140023ab60>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4ce8900>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f140023ab60>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4ce8900>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am logged into the RAVS app", "time" : { - "start" : 1719299916541, - "stop" : 1719299946754, - "duration" : 30213 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1035-MainThread" + "value" : "1040-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -81,6 +81,6 @@ } ], "tags" : [ ] }, - "source" : "fe944a977277f876.json", + "source" : "689bec097321e1a.json", "parameterValues" : [ ] } \ No newline at end of file diff --git a/data/test-cases/11373fb37287004b.json b/data/test-cases/719e9150413b793c.json similarity index 93% rename from data/test-cases/11373fb37287004b.json rename to data/test-cases/719e9150413b793c.json index f6f432577..f76e006e2 100644 --- a/data/test-cases/11373fb37287004b.json +++ b/data/test-cases/719e9150413b793c.json @@ -1,16 +1,16 @@ { - "uid" : "11373fb37287004b", + "uid" : "719e9150413b793c", "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", "fullName" : "features/login.feature:Sign in should fail based on credentials provided", "historyId" : "9bbc09a5764effa3cdb4a84fde10f425", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cd82520>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbd35580>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cd82520>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbd35580>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I access the ravs web app", "time" : { - "start" : 1719299917279, - "stop" : 1719299917377, - "duration" : 98 + "start" : 1719386314180, + "stop" : 1719386314328, + "duration" : 148 }, "status" : "passed", "steps" : [ ], @@ -40,9 +40,9 @@ }, { "name" : "When I click on the log in button", "time" : { - "start" : 1719299917377, - "stop" : 1719299947469, - "duration" : 30092 + "start" : 1719386314328, + "stop" : 1719386344466, + "duration" : 30138 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -65,10 +65,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -105,6 +105,6 @@ } ], "tags" : [ ] }, - "source" : "11373fb37287004b.json", + "source" : "719e9150413b793c.json", "parameterValues" : [ "invalid_email_address", "password", "fail" ] } \ No newline at end of file diff --git a/data/test-cases/df0f8348a085018e.json b/data/test-cases/89c2680de5bf3def.json similarity index 94% rename from data/test-cases/df0f8348a085018e.json rename to data/test-cases/89c2680de5bf3def.json index bdedb6d1d..28ba9b1d4 100644 --- a/data/test-cases/df0f8348a085018e.json +++ b/data/test-cases/89c2680de5bf3def.json @@ -1,16 +1,16 @@ { - "uid" : "df0f8348a085018e", + "uid" : "89c2680de5bf3def", "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "9a957ce315d0094ef5802b47d59d1469", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3ce31f80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fac26700>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3ce31f80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fac26700>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299734691, - "stop" : 1719299764911, - "duration" : 30220 + "start" : 1719386130295, + "stop" : 1719386160652, + "duration" : 30357 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "df0f8348a085018e.json", + "source" : "89c2680de5bf3def.json", "parameterValues" : [ "39 Barton Road, RG10 9DF", "27/3/2001", "Reynolds Ryan", "9449306494" ] } \ No newline at end of file diff --git a/data/test-cases/6922ac45246da27e.json b/data/test-cases/8b876a9eef0cdf63.json similarity index 94% rename from data/test-cases/6922ac45246da27e.json rename to data/test-cases/8b876a9eef0cdf63.json index fbdef8495..57ad870bc 100644 --- a/data/test-cases/6922ac45246da27e.json +++ b/data/test-cases/8b876a9eef0cdf63.json @@ -1,16 +1,16 @@ { - "uid" : "6922ac45246da27e", + "uid" : "8b876a9eef0cdf63", "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "e279c7253beea83548eeffb274f11393", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03af1a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abe4eaac0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03af1a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abe4eaac0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299735261, - "stop" : 1719299765477, - "duration" : 30216 + "start" : 1719386130347, + "stop" : 1719386160682, + "duration" : 30335 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "6922ac45246da27e.json", + "source" : "8b876a9eef0cdf63.json", "parameterValues" : [ "Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN", "13/2/2020", "abxxyz Patel", "9449305552" ] } \ No newline at end of file diff --git a/data/test-cases/9b1718d8794758dd.json b/data/test-cases/8d10668af26e33dc.json similarity index 94% rename from data/test-cases/9b1718d8794758dd.json rename to data/test-cases/8d10668af26e33dc.json index f0b237000..d1e46f29d 100644 --- a/data/test-cases/9b1718d8794758dd.json +++ b/data/test-cases/8d10668af26e33dc.json @@ -1,16 +1,16 @@ { - "uid" : "9b1718d8794758dd", + "uid" : "8d10668af26e33dc", "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", "fullName" : "/app/features/add_vaccines.feature:Vaccine already added to site warning should appear", "historyId" : "9f1089f9bc7885117e14e2eaf82891e5", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f14005cbd80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4df7d80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f14005cbd80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4df7d80>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the RAVS home page", "time" : { - "start" : 1719299764248, - "stop" : 1719299794495, - "duration" : 30247 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1035-MainThread" + "value" : "1040-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -90,6 +90,6 @@ } ], "tags" : [ ] }, - "source" : "9b1718d8794758dd.json", + "source" : "8d10668af26e33dc.json", "parameterValues" : [ "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] } \ No newline at end of file diff --git a/data/test-cases/f7bf20508c434fed.json b/data/test-cases/8f41996f1f5a5b70.json similarity index 93% rename from data/test-cases/f7bf20508c434fed.json rename to data/test-cases/8f41996f1f5a5b70.json index ec534040e..c57b4daa1 100644 --- a/data/test-cases/f7bf20508c434fed.json +++ b/data/test-cases/8f41996f1f5a5b70.json @@ -1,16 +1,16 @@ { - "uid" : "f7bf20508c434fed", + "uid" : "8f41996f1f5a5b70", "name" : "Sign in should fail based on credentials provided [None-password-fail]", "fullName" : "features/login.feature:Sign in should fail based on credentials provided", "historyId" : "d2c24c8abd1adc5c5727ab0f09b7aa74", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cd96d40>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fac274c0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3cd96d40>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fac274c0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I access the ravs web app", "time" : { - "start" : 1719299886889, - "stop" : 1719299886981, - "duration" : 92 + "start" : 1719386283612, + "stop" : 1719386283822, + "duration" : 210 }, "status" : "passed", "steps" : [ ], @@ -40,9 +40,9 @@ }, { "name" : "When I click on the log in button", "time" : { - "start" : 1719299886982, - "stop" : 1719299917088, - "duration" : 30106 + "start" : 1719386283823, + "stop" : 1719386313977, + "duration" : 30154 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -65,10 +65,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -105,6 +105,6 @@ } ], "tags" : [ ] }, - "source" : "f7bf20508c434fed.json", + "source" : "8f41996f1f5a5b70.json", "parameterValues" : [ "None", "password", "fail" ] } \ No newline at end of file diff --git a/data/test-cases/9073f671283bd8d9.json b/data/test-cases/9b5d98653eddcc5f.json similarity index 94% rename from data/test-cases/9073f671283bd8d9.json rename to data/test-cases/9b5d98653eddcc5f.json index 065bd15ad..869a1dc53 100644 --- a/data/test-cases/9073f671283bd8d9.json +++ b/data/test-cases/9b5d98653eddcc5f.json @@ -1,16 +1,16 @@ { - "uid" : "9073f671283bd8d9", + "uid" : "9b5d98653eddcc5f", "name" : "Search without entering patient details", "fullName" : "/app/features/find_a_patient.feature:Search without entering patient details", "historyId" : "6d3ecbed8a34389c2d17a31baab210b7", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fde9b66a660>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd356020>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fde9b66a660>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd356020>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by pds details page", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -81,6 +81,6 @@ } ], "tags" : [ ] }, - "source" : "9073f671283bd8d9.json", + "source" : "9b5d98653eddcc5f.json", "parameterValues" : [ ] } \ No newline at end of file diff --git a/data/test-cases/61f836cdbc836f15.json b/data/test-cases/9fedb29016ae726e.json similarity index 89% rename from data/test-cases/61f836cdbc836f15.json rename to data/test-cases/9fedb29016ae726e.json index 790037c4c..74fb64d8b 100644 --- a/data/test-cases/61f836cdbc836f15.json +++ b/data/test-cases/9fedb29016ae726e.json @@ -1,16 +1,16 @@ { - "uid" : "61f836cdbc836f15", + "uid" : "9fedb29016ae726e", "name" : "Login button is visible", "fullName" : "features/login.feature:Login button is visible", "historyId" : "67f72350cbea9a3eebab3adfe5536260", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "status" : "failed", "statusMessage" : "AssertionError: Login button is not visible\nassert False", - "statusTrace" : "fixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n @then(\"the login button should be visible\")\n def then_the_login_button_should_be_visible():\n attach_screenshot(\"login_should_be_visible\")\n if check_login_button_exists():\n assert True, \"Login button is visible\"\n else:\n> assert False, \"Login button is not visible\"\nE AssertionError: Login button is not visible\nE assert False\n\ntests/test_login_steps.py:40: AssertionError", + "statusTrace" : "fixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n @then(\"the login button should be visible\")\n def then_the_login_button_should_be_visible():\n attach_screenshot(\"login_should_be_visible\")\n if check_login_button_exists():\n assert True, \"Login button is visible\"\n else:\n> assert False, \"Login button is not visible\"\nE AssertionError: Login button is not visible\nE assert False\n\ntests/test_login_steps.py:40: AssertionError", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "AssertionError: Login button is not visible\nassert False", - "statusTrace" : "fixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n @then(\"the login button should be visible\")\n def then_the_login_button_should_be_visible():\n attach_screenshot(\"login_should_be_visible\")\n if check_login_button_exists():\n assert True, \"Login button is visible\"\n else:\n> assert False, \"Login button is not visible\"\nE AssertionError: Login button is not visible\nE assert False\n\ntests/test_login_steps.py:40: AssertionError", + "statusTrace" : "fixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n @then(\"the login button should be visible\")\n def then_the_login_button_should_be_visible():\n attach_screenshot(\"login_should_be_visible\")\n if check_login_button_exists():\n assert True, \"Login button is visible\"\n else:\n> assert False, \"Login button is not visible\"\nE AssertionError: Login button is not visible\nE assert False\n\ntests/test_login_steps.py:40: AssertionError", "steps" : [ { "name" : "Given I access the ravs web app", "time" : { - "start" : 1719299887545, - "stop" : 1719299887640, - "duration" : 95 + "start" : 1719386283842, + "stop" : 1719386283974, + "duration" : 132 }, "status" : "passed", "steps" : [ ], @@ -40,20 +40,20 @@ }, { "name" : "Then the login button should be visible", "time" : { - "start" : 1719299887641, - "stop" : 1719299917751, - "duration" : 30110 + "start" : 1719386283975, + "stop" : 1719386314096, + "duration" : 30121 }, "status" : "failed", "statusMessage" : "Login button is not visible\nassert False", "statusTrace" : "AssertionError: Login button is not visible\nassert False\n", "steps" : [ ], "attachments" : [ { - "uid" : "e80fde4e80fb0d3e", + "uid" : "a91704781e83af33", "name" : "CHROME_126.0.6478.126_login_should_be_visible_", - "source" : "e80fde4e80fb0d3e.png", + "source" : "a91704781e83af33.png", "type" : "image/png", - "size" : 51142 + "size" : 51093 } ], "parameters" : [ ], "stepsCount" : 0, @@ -71,10 +71,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -102,6 +102,6 @@ } ], "tags" : [ ] }, - "source" : "61f836cdbc836f15.json", + "source" : "9fedb29016ae726e.json", "parameterValues" : [ ] } \ No newline at end of file diff --git a/data/test-cases/e17870f578a72fae.json b/data/test-cases/a20f48e7521bc311.json similarity index 94% rename from data/test-cases/e17870f578a72fae.json rename to data/test-cases/a20f48e7521bc311.json index cd3cc2e63..861bf33b2 100644 --- a/data/test-cases/e17870f578a72fae.json +++ b/data/test-cases/a20f48e7521bc311.json @@ -1,16 +1,16 @@ { - "uid" : "e17870f578a72fae", + "uid" : "a20f48e7521bc311", "name" : "Search without entering nhs number", "fullName" : "/app/features/find_a_patient.feature:Search without entering nhs number", "historyId" : "3ddec8c203f0667b07e4030542c38fb6", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f1400567600>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4ddff60>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f1400567600>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4ddff60>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299886097, - "stop" : 1719299916323, - "duration" : 30226 + "start" : 1719386280781, + "stop" : 1719386310996, + "duration" : 30215 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1035-MainThread" + "value" : "1040-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -81,6 +81,6 @@ } ], "tags" : [ ] }, - "source" : "e17870f578a72fae.json", + "source" : "a20f48e7521bc311.json", "parameterValues" : [ ] } \ No newline at end of file diff --git a/data/test-cases/bdb9bca637b6c930.json b/data/test-cases/a52e78e82e1f0b84.json similarity index 94% rename from data/test-cases/bdb9bca637b6c930.json rename to data/test-cases/a52e78e82e1f0b84.json index 8b70f11a2..6e77b2f64 100644 --- a/data/test-cases/bdb9bca637b6c930.json +++ b/data/test-cases/a52e78e82e1f0b84.json @@ -1,16 +1,16 @@ { - "uid" : "bdb9bca637b6c930", + "uid" : "a52e78e82e1f0b84", "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "39e35f59117b399bcac760d4cb0a7898", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f1400566c00>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4ddc860>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f1400566c00>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4ddc860>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299825206, - "stop" : 1719299855426, - "duration" : 30220 + "start" : 1719386219868, + "stop" : 1719386250100, + "duration" : 30232 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1035-MainThread" + "value" : "1040-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "bdb9bca637b6c930.json", + "source" : "a52e78e82e1f0b84.json", "parameterValues" : [ "BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN", "20150527", "KATEE TUZZIO", "9470011902" ] } \ No newline at end of file diff --git a/data/test-cases/2bd9a9ec7042a35c.json b/data/test-cases/afa2a7f4cb240c49.json similarity index 94% rename from data/test-cases/2bd9a9ec7042a35c.json rename to data/test-cases/afa2a7f4cb240c49.json index 8e92016f9..664946139 100644 --- a/data/test-cases/2bd9a9ec7042a35c.json +++ b/data/test-cases/afa2a7f4cb240c49.json @@ -1,16 +1,16 @@ { - "uid" : "2bd9a9ec7042a35c", + "uid" : "afa2a7f4cb240c49", "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "0e31fa71df3dd626c3358a1251b219f9", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03ac040>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd3d2020>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03ac040>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd3d2020>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "2bd9a9ec7042a35c.json", + "source" : "afa2a7f4cb240c49.json", "parameterValues" : [ "Ifyoucan113, GDA11 UCL6, KT17 1NA", "9/3/2018", "COMFORT Jones", "9449304424" ] } \ No newline at end of file diff --git a/data/test-cases/3328a6204e080d29.json b/data/test-cases/b2e7887fd5b870.json similarity index 93% rename from data/test-cases/3328a6204e080d29.json rename to data/test-cases/b2e7887fd5b870.json index 1ce0d39c8..c71c3c97c 100644 --- a/data/test-cases/3328a6204e080d29.json +++ b/data/test-cases/b2e7887fd5b870.json @@ -1,16 +1,16 @@ { - "uid" : "3328a6204e080d29", + "uid" : "b2e7887fd5b870", "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", "fullName" : "features/login.feature:Sign in should fail based on credentials provided", "historyId" : "68040a02b1a5a5e06a52aaeb8659d0c2", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3ce1c2c0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbdaa660>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3ce1c2c0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f42fbdaa660>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\nfixturefunc = \nrequest = >\nkwargs = {}\n\n def call_fixture_func(\n fixturefunc: \"_FixtureFunc[FixtureValue]\", request: FixtureRequest, kwargs\n ) -> FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f\"{request.fixturename} did not yield a value\") from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n> fixture_result = fixturefunc(**kwargs)\n\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ntests/test_login_steps.py:44: in step_click_login_button\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I access the ravs web app", "time" : { - "start" : 1719299947640, - "stop" : 1719299947733, - "duration" : 93 + "start" : 1719386344717, + "stop" : 1719386344906, + "duration" : 189 }, "status" : "passed", "steps" : [ ], @@ -40,9 +40,9 @@ }, { "name" : "When I click on the log in button", "time" : { - "start" : 1719299947733, - "stop" : 1719299977835, - "duration" : 30102 + "start" : 1719386344907, + "stop" : 1719386375051, + "duration" : 30144 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -65,10 +65,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1034-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -105,6 +105,6 @@ } ], "tags" : [ ] }, - "source" : "3328a6204e080d29.json", + "source" : "b2e7887fd5b870.json", "parameterValues" : [ "long_email_address@nhs.net", "password", "fail" ] } \ No newline at end of file diff --git a/data/test-cases/45bfe683b38d0492.json b/data/test-cases/b87bf117266ef07e.json similarity index 94% rename from data/test-cases/45bfe683b38d0492.json rename to data/test-cases/b87bf117266ef07e.json index 0877ccd42..b3e6a9d3b 100644 --- a/data/test-cases/45bfe683b38d0492.json +++ b/data/test-cases/b87bf117266ef07e.json @@ -1,16 +1,16 @@ { - "uid" : "45bfe683b38d0492", + "uid" : "b87bf117266ef07e", "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "3dd254990a059240e17f4aa430bdb6b0", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03e3f60>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd3fa660>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03e3f60>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abd3fa660>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299674354, - "stop" : 1719299704581, - "duration" : 30227 + "start" : 1719386069078, + "stop" : 1719386099415, + "duration" : 30337 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "45bfe683b38d0492.json", + "source" : "b87bf117266ef07e.json", "parameterValues" : [ "1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW", "23/6/1946", "Bill GARTON", "9693632109" ] } \ No newline at end of file diff --git a/data/test-cases/9538b5082dbdb7d2.json b/data/test-cases/bb1ba58f4c87730.json similarity index 94% rename from data/test-cases/9538b5082dbdb7d2.json rename to data/test-cases/bb1ba58f4c87730.json index d4aebac6e..b857e3fb0 100644 --- a/data/test-cases/9538b5082dbdb7d2.json +++ b/data/test-cases/bb1ba58f4c87730.json @@ -1,16 +1,16 @@ { - "uid" : "9538b5082dbdb7d2", + "uid" : "bb1ba58f4c87730", "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "0362be85d3aacb3fe420746bb928507b", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f14005ca020>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4df76a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f14005ca020>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fb1b4df76a0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1035-MainThread" + "value" : "1040-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "9538b5082dbdb7d2.json", + "source" : "bb1ba58f4c87730.json", "parameterValues" : [ "1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ", "20151209", "JANNETTE ARD", "9470006739" ] } \ No newline at end of file diff --git a/data/test-cases/f9f633369c731400.json b/data/test-cases/c3a2fe424cd16ed1.json similarity index 94% rename from data/test-cases/f9f633369c731400.json rename to data/test-cases/c3a2fe424cd16ed1.json index af032d022..b892a1623 100644 --- a/data/test-cases/f9f633369c731400.json +++ b/data/test-cases/c3a2fe424cd16ed1.json @@ -1,16 +1,16 @@ { - "uid" : "f9f633369c731400", + "uid" : "c3a2fe424cd16ed1", "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", "fullName" : "/app/features/find_a_patient.feature:Search by NHS number", "historyId" : "1e1b190bf4f506920c67da326754621a", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03aec00>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abe4ebba0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7fdea03aec00>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abe4ebba0>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the find a patient by nhs number page", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1032-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -93,6 +93,6 @@ } ], "tags" : [ ] }, - "source" : "f9f633369c731400.json", + "source" : "c3a2fe424cd16ed1.json", "parameterValues" : [ "123 Main Vyt, AB12 3CE", "20/5/1990", "Briar Anderton", "9449306613" ] } \ No newline at end of file diff --git a/data/test-cases/948e990045434de2.json b/data/test-cases/e3401ea00bd0843c.json similarity index 94% rename from data/test-cases/948e990045434de2.json rename to data/test-cases/e3401ea00bd0843c.json index 2aab0d439..8a5a9743d 100644 --- a/data/test-cases/948e990045434de2.json +++ b/data/test-cases/e3401ea00bd0843c.json @@ -1,16 +1,16 @@ { - "uid" : "948e990045434de2", + "uid" : "e3401ea00bd0843c", "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", "fullName" : "/app/features/add_batches.feature:Add batch to vaccine", "historyId" : "816e0df01dffb1a7ed09998f81df379e", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3d2c7e20>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abe8bf420>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "flaky" : false, "newFailed" : false, "newBroken" : false, @@ -21,13 +21,13 @@ "testStage" : { "status" : "failed", "statusMessage" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", - "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7efe3d2c7e20>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", + "statusTrace" : "self = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n> self.page.wait_for_selector(selector)\n\nhelpers/playwrightHelper.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/playwright/sync_api/_generated.py:7834: in wait_for_selector\n self._sync(\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_page.py:392: in wait_for_selector\n return await self._main_frame.wait_for_selector(**locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_frame.py:323: in wait_for_selector\n await self._channel.send(\"waitForSelector\", locals_to_params(locals()))\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:59: in send\n return await self._connection.wrap_api_call(\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncb = . at 0x7f0abe8bf420>\nis_internal = False\n\n async def wrap_api_call(\n self, cb: Callable[[], Any], is_internal: bool = False\n ) -> Any:\n if self._api_zone.get():\n return await cb()\n task = asyncio.current_task(self._loop)\n st: List[inspect.FrameInfo] = getattr(task, \"__pw_stack__\", inspect.stack())\n parsed_st = _extract_stack_trace_information_from_stack(st, is_internal)\n self._api_zone.set(parsed_st)\n try:\n return await cb()\n except Exception as error:\n> raise rewrite_error(error, f\"{parsed_st['apiName']}: {error}\") from None\nE playwright._impl._errors.TimeoutError: Page.wait_for_selector: Timeout 30000ms exceeded.\nE Call log:\nE waiting for locator(\"//button[text()='Log In']\") to be visible\n\n.tox/py311/lib/python3.11/site-packages/playwright/_impl/_connection.py:514: TimeoutError\n\nDuring handling of the above exception, another exception occurred:\n\n.0 = \n\n> kwargs = {arg: kwargs[arg] if arg in kwargs else request.getfixturevalue(arg) for arg in args}\n\n.tox/py311/lib/python3.11/site-packages/pytest_bdd/scenario.py:205: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:521: in getfixturevalue\n fixturedef = self._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1038: in execute\n fixturedef = request._get_active_fixturedef(argname)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:606: in _get_active_fixturedef\n fixturedef.execute(request=subrequest)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1076: in execute\n result = ihook.pytest_fixture_setup(fixturedef=self, request=request)\n.tox/py311/lib/python3.11/site-packages/pluggy/_hooks.py:513: in __call__\n return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/pluggy/_manager.py:120: in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n.tox/py311/lib/python3.11/site-packages/_pytest/setuponly.py:36: in pytest_fixture_setup\n return (yield)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:1125: in pytest_fixture_setup\n result = call_fixture_func(fixturefunc, request, kwargs)\n.tox/py311/lib/python3.11/site-packages/_pytest/fixtures.py:887: in call_fixture_func\n fixture_result = fixturefunc(**kwargs)\nconftest.py:85: in navigate_and_login\n click_login_button()\npages/login_page.py:14: in click_login_button\n find_element_and_perform_action(LOGIN_BUTTON_ELEMENT, \"click\")\ninit_helpers.py:143: in find_element_and_perform_action\n return playwright_helper_instance.find_element_and_perform_action(element, action, inputValue)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nselector = \"//button[text()='Log In']\", action = 'click', inputValue = None\n\n def find_element_and_perform_action(self, selector, action, inputValue=None):\n self.wait_for_page_to_load()\n selector_filename = \"\".join(c if c.isalnum() else \"_\" for c in selector)\n self.capture_screenshot(selector_filename)\n try:\n self.page.wait_for_selector(selector)\n element=self.page.locator(selector)\n self.page.set_viewport_size({\"width\": 1500, \"height\":1500})\n element.scroll_into_view_if_needed()\n if action.lower() == \"click\":\n if element.is_enabled() and element.is_visible():\n element.click()\n print(f\"Clicked the {selector} successfully.\")\n else:\n print(f\"Element with {selector} is not enabled.\")\n elif action.lower() == \"input_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.fill(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"type_text\":\n text = element.text_content()\n if text != '':\n element.clear()\n element.type(inputValue)\n print(f\"Entered text into the {selector} successfully.\")\n elif action.lower() == \"get_text\":\n text = element.text_content()\n print(f\"Text from the {selector}: {text}\")\n return text\n elif action.lower() == \"select_option\":\n element.select_option(inputValue)\n print(f\"Selected option with value '{inputValue}' from the {selector} successfully.\")\n elif action.lower() == \"click_checkbox\":\n if not element.is_checked():\n element.check()\n print(f\"{selector} checkbox checked successfully.\")\n else:\n print(f\"{selector} checkbox is already checked.\")\n else:\n print(f\"Unsupported action: {action}\")\n except Exception as e:\n print(f\"Exception: {e}. Element not found: {selector}\")\n> raise ElementNotFoundException(f\"Element not found: {selector}\")\nE helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']\n\nhelpers/playwrightHelper.py:222: ElementNotFoundException", "steps" : [ { "name" : "Given I am on the RAVS home page", "time" : { - "start" : 1719299277480, - "stop" : 1719299307861, - "duration" : 30381 + "start" : 1719385670604, + "stop" : 1719385701079, + "duration" : 30475 }, "status" : "failed", "statusMessage" : "Element not found: //button[text()='Log In']", @@ -50,10 +50,10 @@ "afterStages" : [ ], "labels" : [ { "name" : "host", - "value" : "741cdf86761d" + "value" : "c4ac2ee6c3f9" }, { "name" : "thread", - "value" : "1038-MainThread" + "value" : "1037-MainThread" }, { "name" : "framework", "value" : "pytest-bdd" @@ -99,6 +99,6 @@ } ], "tags" : [ ] }, - "source" : "948e990045434de2.json", + "source" : "e3401ea00bd0843c.json", "parameterValues" : [ "SD7YY2", "24", "today+90", "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] } \ No newline at end of file diff --git a/data/timeline.json b/data/timeline.json index 43b7766ce..65b4cb142 100644 --- a/data/timeline.json +++ b/data/timeline.json @@ -2,18 +2,18 @@ "uid" : "ab17fc5a4eb3bca4b216b548c7f9fcbc", "name" : "timeline", "children" : [ { - "name" : "741cdf86761d", + "name" : "c4ac2ee6c3f9", "children" : [ { - "name" : "1038-MainThread", + "name" : "1034-MainThread", "children" : [ { - "name" : "Sign in should fail based on credentials provided [None-password-fail]", - "uid" : "f7bf20508c434fed", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", + "uid" : "154d2f52ceb5ab7", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -21,16 +21,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "None", "password", "fail" ] + "parameters" : [ "10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG", "20150706", "JOJO LANE", "9470004272" ] }, { - "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", - "uid" : "3328a6204e080d29", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", + "uid" : "21c6bb28542d5ad3", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -38,16 +38,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] + "parameters" : [ "CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ", "20150222", "TABBY FERN", "9470006143" ] }, { - "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", - "uid" : "948e990045434de2", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", + "uid" : "b2e7887fd5b870", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "flaky" : false, "newFailed" : false, @@ -55,16 +55,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "SD7YY2", "24", "today+90", "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] + "parameters" : [ "long_email_address@nhs.net", "password", "fail" ] }, { - "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", - "uid" : "37b0a40448b62cb0", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", + "uid" : "1e6e9cb1fff0b312", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "flaky" : false, "newFailed" : false, @@ -72,16 +72,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ", "20150222", "TABBY FERN", "9470006143" ] + "parameters" : [ "NEELIMA HOUSE", "Flu", "Fluenz Tetra - LAIV" ] }, { "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", - "uid" : "d29791f87c4d62f5", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "uid" : "4a260f7861780518", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "flaky" : false, "newFailed" : false, @@ -91,14 +91,14 @@ "retriesStatusChange" : false, "parameters" : [ "10 BROOK STREET, LANCASTER, LA1 1SL", "20160130", "SOLOMON DAZLEY", "9469997956" ] }, { - "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", - "uid" : "bbc242fb8e369a80", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", + "uid" : "719e9150413b793c", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "flaky" : false, "newFailed" : false, @@ -106,16 +106,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "NEELIMA HOUSE", "Flu", "Fluenz Tetra - LAIV" ] + "parameters" : [ "invalid_email_address", "password", "fail" ] }, { "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", - "uid" : "df0f8348a085018e", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "uid" : "89c2680de5bf3def", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "flaky" : false, "newFailed" : false, @@ -125,14 +125,14 @@ "retriesStatusChange" : false, "parameters" : [ "39 Barton Road, RG10 9DF", "27/3/2001", "Reynolds Ryan", "9449306494" ] }, { - "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", - "uid" : "11373fb37287004b", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "name" : "Sign in should fail based on credentials provided [None-password-fail]", + "uid" : "8f41996f1f5a5b70", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "flaky" : false, "newFailed" : false, @@ -140,16 +140,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "invalid_email_address", "password", "fail" ] + "parameters" : [ "None", "password", "fail" ] }, { "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", - "uid" : "755d4b911ec79921", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + "uid" : "1b9395fedbdcf652", + "parentUid" : "f7d2fb7882bd66ee5f3d2a439748dff1", "status" : "failed", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "flaky" : false, "newFailed" : false, @@ -158,15 +158,19 @@ "retriesCount" : 0, "retriesStatusChange" : false, "parameters" : [ "1 DAISY BANK, LANCASTER, LA1 3JW", "20150305", "JONNY CONOPO", "9469998626" ] - }, { - "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", - "uid" : "439b792ac4fe86c3", - "parentUid" : "baa1a271ac4e29eb9f84025fb0db2b3e", + } ], + "uid" : "f7d2fb7882bd66ee5f3d2a439748dff1" + }, { + "name" : "1037-MainThread", + "children" : [ { + "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", + "uid" : "429388dd51d212bc", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "flaky" : false, "newFailed" : false, @@ -174,20 +178,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG", "20150706", "JOJO LANE", "9470004272" ] - } ], - "uid" : "baa1a271ac4e29eb9f84025fb0db2b3e" - }, { - "name" : "1032-MainThread", - "children" : [ { - "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", - "uid" : "2bd9a9ec7042a35c", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "parameters" : [ "4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ", "03/03/2020", "Srinivasarao Patel", "9449306605" ] + }, { + "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", + "uid" : "4a0bb1c2182db8f6", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "flaky" : false, "newFailed" : false, @@ -195,16 +195,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "Ifyoucan113, GDA11 UCL6, KT17 1NA", "9/3/2018", "COMFORT Jones", "9449304424" ] + "parameters" : [ "KT21 1LJ", "20110509", "Not found", "9449306621" ] }, { - "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", - "uid" : "f9f633369c731400", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", + "uid" : "e3401ea00bd0843c", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "flaky" : false, "newFailed" : false, @@ -212,16 +212,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "123 Main Vyt, AB12 3CE", "20/5/1990", "Briar Anderton", "9449306613" ] + "parameters" : [ "SD7YY2", "24", "today+90", "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] }, { - "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", - "uid" : "6922ac45246da27e", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", + "uid" : "b87bf117266ef07e", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "flaky" : false, "newFailed" : false, @@ -229,16 +229,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN", "13/2/2020", "abxxyz Patel", "9449305552" ] + "parameters" : [ "1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW", "23/6/1946", "Bill GARTON", "9693632109" ] }, { - "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", - "uid" : "f9692d744a2d6f61", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "name" : "Login button is visible", + "uid" : "9fedb29016ae726e", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "flaky" : false, "newFailed" : false, @@ -246,16 +246,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] + "parameters" : [ ] }, { - "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", - "uid" : "1bbb0271523a0d78", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", + "uid" : "8b876a9eef0cdf63", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "flaky" : false, "newFailed" : false, @@ -263,16 +263,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ", "03/03/2020", "Srinivasarao Patel", "9449306605" ] + "parameters" : [ "Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN", "13/2/2020", "abxxyz Patel", "9449305552" ] }, { "name" : "Search without entering patient details", - "uid" : "9073f671283bd8d9", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "uid" : "9b5d98653eddcc5f", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "flaky" : false, "newFailed" : false, @@ -282,14 +282,14 @@ "retriesStatusChange" : false, "parameters" : [ ] }, { - "name" : "NHS sign in page should be visible", - "uid" : "c037df325798ad41", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", + "uid" : "afa2a7f4cb240c49", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "flaky" : false, "newFailed" : false, @@ -297,16 +297,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ ] + "parameters" : [ "Ifyoucan113, GDA11 UCL6, KT17 1NA", "9/3/2018", "COMFORT Jones", "9449304424" ] }, { - "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", - "uid" : "bb477fbb333e9116", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "name" : "NHS sign in page should be visible", + "uid" : "4d7408061c0bcae", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "flaky" : false, "newFailed" : false, @@ -314,16 +314,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "KT21 1LJ", "20110509", "Not found", "9449306621" ] + "parameters" : [ ] }, { - "name" : "Login button is visible", - "uid" : "61f836cdbc836f15", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", + "uid" : "5dc484ed8f9b7484", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "flaky" : false, "newFailed" : false, @@ -331,16 +331,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ ] + "parameters" : [ "neelima.guntupalli1@nhs.net-valid", "pass", "pass" ] }, { - "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", - "uid" : "45bfe683b38d0492", - "parentUid" : "88ca8564c6e3d5684643022d905600d8", + "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", + "uid" : "c3a2fe424cd16ed1", + "parentUid" : "0b92159d8dbb4e443a48425d610b1678", "status" : "failed", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "flaky" : false, "newFailed" : false, @@ -348,20 +348,20 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW", "23/6/1946", "Bill GARTON", "9693632109" ] + "parameters" : [ "123 Main Vyt, AB12 3CE", "20/5/1990", "Briar Anderton", "9449306613" ] } ], - "uid" : "88ca8564c6e3d5684643022d905600d8" + "uid" : "0b92159d8dbb4e443a48425d610b1678" }, { - "name" : "1035-MainThread", + "name" : "1040-MainThread", "children" : [ { - "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", - "uid" : "bdb9bca637b6c930", - "parentUid" : "b3af9dde7db6b26da3e827702adc4a6f", + "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", + "uid" : "5772a62b0355a544", + "parentUid" : "1b9d3f0ec113b682fefc9bec618cff11", "status" : "failed", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "flaky" : false, "newFailed" : false, @@ -369,16 +369,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN", "20150527", "KATEE TUZZIO", "9470011902" ] + "parameters" : [ "50 ST. GEORGES QUAY, LANCASTER, LA1 1SA", "20151217", "SYBIL PELLING", "9470032640" ] }, { - "name" : "Search without entering nhs number", - "uid" : "e17870f578a72fae", - "parentUid" : "b3af9dde7db6b26da3e827702adc4a6f", + "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", + "uid" : "bb1ba58f4c87730", + "parentUid" : "1b9d3f0ec113b682fefc9bec618cff11", "status" : "failed", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -386,16 +386,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ ] + "parameters" : [ "1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ", "20151209", "JANNETTE ARD", "9470006739" ] }, { - "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", - "uid" : "9538b5082dbdb7d2", - "parentUid" : "b3af9dde7db6b26da3e827702adc4a6f", + "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", + "uid" : "8d10668af26e33dc", + "parentUid" : "1b9d3f0ec113b682fefc9bec618cff11", "status" : "failed", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "flaky" : false, "newFailed" : false, @@ -403,16 +403,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ", "20151209", "JANNETTE ARD", "9470006739" ] + "parameters" : [ "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] }, { - "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", - "uid" : "d6bfed2d66b6b082", - "parentUid" : "b3af9dde7db6b26da3e827702adc4a6f", + "name" : "NHS sign in page should be visible", + "uid" : "689bec097321e1a", + "parentUid" : "1b9d3f0ec113b682fefc9bec618cff11", "status" : "failed", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "flaky" : false, "newFailed" : false, @@ -420,16 +420,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "50 ST. GEORGES QUAY, LANCASTER, LA1 1SA", "20151217", "SYBIL PELLING", "9470032640" ] + "parameters" : [ ] }, { - "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", - "uid" : "9b1718d8794758dd", - "parentUid" : "b3af9dde7db6b26da3e827702adc4a6f", + "name" : "Search without entering nhs number", + "uid" : "a20f48e7521bc311", + "parentUid" : "1b9d3f0ec113b682fefc9bec618cff11", "status" : "failed", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "flaky" : false, "newFailed" : false, @@ -437,16 +437,16 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ "NEELIMA HOUSE", "COVID-19", "Comirnaty Original/Omicron BA.4-5" ] + "parameters" : [ ] }, { - "name" : "NHS sign in page should be visible", - "uid" : "fe944a977277f876", - "parentUid" : "b3af9dde7db6b26da3e827702adc4a6f", + "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", + "uid" : "a52e78e82e1f0b84", + "parentUid" : "1b9d3f0ec113b682fefc9bec618cff11", "status" : "failed", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "flaky" : false, "newFailed" : false, @@ -454,10 +454,10 @@ "newBroken" : false, "retriesCount" : 0, "retriesStatusChange" : false, - "parameters" : [ ] + "parameters" : [ "BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN", "20150527", "KATEE TUZZIO", "9470011902" ] } ], - "uid" : "b3af9dde7db6b26da3e827702adc4a6f" + "uid" : "1b9d3f0ec113b682fefc9bec618cff11" } ], - "uid" : "14459870fb426428a2a1c94f4211b935" + "uid" : "815531e8cb2b1bea5ba1723d3828fc6d" } ] } \ No newline at end of file diff --git a/export/influxDbData.txt b/export/influxDbData.txt index 8ebc55742..0575cfc77 100644 --- a/export/influxDbData.txt +++ b/export/influxDbData.txt @@ -1,12 +1,12 @@ -launch_status failed=26 1719300193000000000 -launch_status broken=0 1719300193000000000 -launch_status passed=0 1719300193000000000 -launch_status skipped=0 1719300193000000000 -launch_status unknown=0 1719300193000000000 -launch_time duration=700890 1719300193000000000 -launch_time min_duration=30190 1719300193000000000 -launch_time max_duration=30382 1719300193000000000 -launch_time sum_duration=785920 1719300193000000000 -launch_problems product_defects=26 1719300193000000000 -launch_retries retries=0 1719300193000000000 -launch_retries run=26 1719300193000000000 +launch_status failed=26 1719386591000000000 +launch_status broken=0 1719386591000000000 +launch_status passed=0 1719386591000000000 +launch_status skipped=0 1719386591000000000 +launch_status unknown=0 1719386591000000000 +launch_time duration=704448 1719386591000000000 +launch_time min_duration=30216 1719386591000000000 +launch_time max_duration=30476 1719386591000000000 +launch_time sum_duration=788233 1719386591000000000 +launch_problems product_defects=26 1719386591000000000 +launch_retries retries=0 1719386591000000000 +launch_retries run=26 1719386591000000000 diff --git a/export/prometheusData.txt b/export/prometheusData.txt index 01303a4e5..6b662b2d3 100644 --- a/export/prometheusData.txt +++ b/export/prometheusData.txt @@ -3,10 +3,10 @@ launch_status_broken 0 launch_status_passed 0 launch_status_skipped 0 launch_status_unknown 0 -launch_time_duration 700890 -launch_time_min_duration 30190 -launch_time_max_duration 30382 -launch_time_sum_duration 785920 +launch_time_duration 704448 +launch_time_min_duration 30216 +launch_time_max_duration 30476 +launch_time_sum_duration 788233 launch_problems_product_defects 26 launch_retries_retries 0 launch_retries_run 26 diff --git a/history/duration-trend.json b/history/duration-trend.json index e9cb468ae..8e741e01d 100644 --- a/history/duration-trend.json +++ b/history/duration-trend.json @@ -1,5 +1,5 @@ [ { "data" : { - "duration" : 700890 + "duration" : 704448 } } ] \ No newline at end of file diff --git a/history/history.json b/history/history.json index ed2cd86fc..e1e46d59a 100644 --- a/history/history.json +++ b/history/history.json @@ -9,13 +9,13 @@ "total" : 1 }, "items" : [ { - "uid" : "bbc242fb8e369a80", + "uid" : "1e6e9cb1fff0b312", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 } } ] }, @@ -29,13 +29,13 @@ "total" : 1 }, "items" : [ { - "uid" : "37b0a40448b62cb0", + "uid" : "21c6bb28542d5ad3", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 } } ] }, @@ -49,13 +49,13 @@ "total" : 1 }, "items" : [ { - "uid" : "bdb9bca637b6c930", + "uid" : "a52e78e82e1f0b84", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 } } ] }, @@ -69,13 +69,13 @@ "total" : 1 }, "items" : [ { - "uid" : "1bbb0271523a0d78", + "uid" : "429388dd51d212bc", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 } } ] }, @@ -89,13 +89,13 @@ "total" : 1 }, "items" : [ { - "uid" : "d29791f87c4d62f5", + "uid" : "4a260f7861780518", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 } } ] }, @@ -109,17 +109,17 @@ "total" : 1 }, "items" : [ { - "uid" : "439b792ac4fe86c3", + "uid" : "154d2f52ceb5ab7", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 } } ] }, - "1e1b190bf4f506920c67da326754621a" : { + "816e0df01dffb1a7ed09998f81df379e" : { "statistic" : { "failed" : 1, "broken" : 0, @@ -129,17 +129,17 @@ "total" : 1 }, "items" : [ { - "uid" : "f9f633369c731400", + "uid" : "e3401ea00bd0843c", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 } } ] }, - "816e0df01dffb1a7ed09998f81df379e" : { + "1e1b190bf4f506920c67da326754621a" : { "statistic" : { "failed" : 1, "broken" : 0, @@ -149,13 +149,13 @@ "total" : 1 }, "items" : [ { - "uid" : "948e990045434de2", + "uid" : "c3a2fe424cd16ed1", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 } } ] }, @@ -169,13 +169,13 @@ "total" : 1 }, "items" : [ { - "uid" : "bb477fbb333e9116", + "uid" : "4a0bb1c2182db8f6", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 } } ] }, @@ -189,13 +189,13 @@ "total" : 1 }, "items" : [ { - "uid" : "f9692d744a2d6f61", + "uid" : "5dc484ed8f9b7484", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 } } ] }, @@ -209,13 +209,13 @@ "total" : 1 }, "items" : [ { - "uid" : "e17870f578a72fae", + "uid" : "a20f48e7521bc311", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 } } ] }, @@ -229,13 +229,13 @@ "total" : 1 }, "items" : [ { - "uid" : "9073f671283bd8d9", + "uid" : "9b5d98653eddcc5f", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 } } ] }, @@ -249,13 +249,13 @@ "total" : 1 }, "items" : [ { - "uid" : "3328a6204e080d29", + "uid" : "b2e7887fd5b870", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 } } ] }, @@ -269,13 +269,13 @@ "total" : 1 }, "items" : [ { - "uid" : "6922ac45246da27e", + "uid" : "8b876a9eef0cdf63", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 } } ] }, @@ -289,13 +289,13 @@ "total" : 1 }, "items" : [ { - "uid" : "d6bfed2d66b6b082", + "uid" : "5772a62b0355a544", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 } } ] }, @@ -309,13 +309,13 @@ "total" : 1 }, "items" : [ { - "uid" : "9b1718d8794758dd", + "uid" : "8d10668af26e33dc", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 } } ] }, @@ -329,13 +329,13 @@ "total" : 1 }, "items" : [ { - "uid" : "61f836cdbc836f15", + "uid" : "9fedb29016ae726e", "status" : "failed", "statusDetails" : "AssertionError: Login button is not visible\nassert False", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 } } ] }, @@ -349,13 +349,13 @@ "total" : 1 }, "items" : [ { - "uid" : "45bfe683b38d0492", + "uid" : "b87bf117266ef07e", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 } } ] }, @@ -369,13 +369,13 @@ "total" : 1 }, "items" : [ { - "uid" : "c037df325798ad41", + "uid" : "4d7408061c0bcae", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 } } ] }, @@ -389,13 +389,13 @@ "total" : 1 }, "items" : [ { - "uid" : "f7bf20508c434fed", + "uid" : "8f41996f1f5a5b70", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 } } ] }, @@ -409,17 +409,17 @@ "total" : 1 }, "items" : [ { - "uid" : "fe944a977277f876", + "uid" : "689bec097321e1a", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 } } ] }, - "9bbc09a5764effa3cdb4a84fde10f425" : { + "9a957ce315d0094ef5802b47d59d1469" : { "statistic" : { "failed" : 1, "broken" : 0, @@ -429,17 +429,17 @@ "total" : 1 }, "items" : [ { - "uid" : "11373fb37287004b", + "uid" : "89c2680de5bf3def", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 } } ] }, - "0362be85d3aacb3fe420746bb928507b" : { + "9bbc09a5764effa3cdb4a84fde10f425" : { "statistic" : { "failed" : 1, "broken" : 0, @@ -449,17 +449,17 @@ "total" : 1 }, "items" : [ { - "uid" : "9538b5082dbdb7d2", + "uid" : "719e9150413b793c", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 } } ] }, - "9a957ce315d0094ef5802b47d59d1469" : { + "0362be85d3aacb3fe420746bb928507b" : { "statistic" : { "failed" : 1, "broken" : 0, @@ -469,13 +469,13 @@ "total" : 1 }, "items" : [ { - "uid" : "df0f8348a085018e", + "uid" : "bb1ba58f4c87730", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 } } ] }, @@ -489,13 +489,13 @@ "total" : 1 }, "items" : [ { - "uid" : "755d4b911ec79921", + "uid" : "1b9395fedbdcf652", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 } } ] }, @@ -509,13 +509,13 @@ "total" : 1 }, "items" : [ { - "uid" : "2bd9a9ec7042a35c", + "uid" : "afa2a7f4cb240c49", "status" : "failed", "statusDetails" : "helpers.playwrightHelper.ElementNotFoundException: Element not found: //button[text()='Log In']", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 } } ] } diff --git a/widgets/duration-trend.json b/widgets/duration-trend.json index e9cb468ae..8e741e01d 100644 --- a/widgets/duration-trend.json +++ b/widgets/duration-trend.json @@ -1,5 +1,5 @@ [ { "data" : { - "duration" : 700890 + "duration" : 704448 } } ] \ No newline at end of file diff --git a/widgets/duration.json b/widgets/duration.json index b04d5ceb4..d4c322ed7 100644 --- a/widgets/duration.json +++ b/widgets/duration.json @@ -1,260 +1,260 @@ [ { - "uid" : "e17870f578a72fae", - "name" : "Search without entering nhs number", + "uid" : "4a0bb1c2182db8f6", + "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "fe944a977277f876", - "name" : "NHS sign in page should be visible", + "uid" : "154d2f52ceb5ab7", + "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f9f633369c731400", - "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", + "uid" : "429388dd51d212bc", + "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f7bf20508c434fed", - "name" : "Sign in should fail based on credentials provided [None-password-fail]", + "uid" : "8b876a9eef0cdf63", + "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f9692d744a2d6f61", - "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", + "uid" : "89c2680de5bf3def", + "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bdb9bca637b6c930", - "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", + "uid" : "e3401ea00bd0843c", + "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "6922ac45246da27e", - "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", + "uid" : "1b9395fedbdcf652", + "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "3328a6204e080d29", - "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", + "uid" : "9fedb29016ae726e", + "name" : "Login button is visible", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "37b0a40448b62cb0", - "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", + "uid" : "c3a2fe424cd16ed1", + "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bbc242fb8e369a80", - "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", + "uid" : "a52e78e82e1f0b84", + "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "948e990045434de2", - "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", + "uid" : "8d10668af26e33dc", + "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "c037df325798ad41", - "name" : "NHS sign in page should be visible", + "uid" : "5772a62b0355a544", + "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "1bbb0271523a0d78", - "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", + "uid" : "1e6e9cb1fff0b312", + "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "9073f671283bd8d9", - "name" : "Search without entering patient details", + "uid" : "bb1ba58f4c87730", + "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "d29791f87c4d62f5", - "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", + "uid" : "8f41996f1f5a5b70", + "name" : "Sign in should fail based on credentials provided [None-password-fail]", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "11373fb37287004b", - "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", + "uid" : "21c6bb28542d5ad3", + "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "9538b5082dbdb7d2", - "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", + "uid" : "b2e7887fd5b870", + "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "df0f8348a085018e", - "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", + "uid" : "719e9150413b793c", + "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "439b792ac4fe86c3", - "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", + "uid" : "689bec097321e1a", + "name" : "NHS sign in page should be visible", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "d6bfed2d66b6b082", - "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", + "uid" : "9b5d98653eddcc5f", + "name" : "Search without entering patient details", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "755d4b911ec79921", - "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", + "uid" : "a20f48e7521bc311", + "name" : "Search without entering nhs number", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "45bfe683b38d0492", - "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", + "uid" : "4d7408061c0bcae", + "name" : "NHS sign in page should be visible", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bb477fbb333e9116", - "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", + "uid" : "b87bf117266ef07e", + "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "61f836cdbc836f15", - "name" : "Login button is visible", + "uid" : "4a260f7861780518", + "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "9b1718d8794758dd", - "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", + "uid" : "afa2a7f4cb240c49", + "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "2bd9a9ec7042a35c", - "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", + "uid" : "5dc484ed8f9b7484", + "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "status" : "failed", "severity" : "normal" diff --git a/widgets/severity.json b/widgets/severity.json index 7c155dafb..e3667b0f4 100644 --- a/widgets/severity.json +++ b/widgets/severity.json @@ -1,260 +1,260 @@ [ { - "uid" : "9073f671283bd8d9", - "name" : "Search without entering patient details", + "uid" : "b87bf117266ef07e", + "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "6922ac45246da27e", - "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", + "uid" : "8f41996f1f5a5b70", + "name" : "Sign in should fail based on credentials provided [None-password-fail]", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "439b792ac4fe86c3", - "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", + "uid" : "5dc484ed8f9b7484", + "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "df0f8348a085018e", - "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", + "uid" : "afa2a7f4cb240c49", + "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "9538b5082dbdb7d2", - "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", + "uid" : "c3a2fe424cd16ed1", + "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "d29791f87c4d62f5", - "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", + "uid" : "9b5d98653eddcc5f", + "name" : "Search without entering patient details", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "3328a6204e080d29", - "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", + "uid" : "4d7408061c0bcae", + "name" : "NHS sign in page should be visible", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "948e990045434de2", - "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", + "uid" : "8b876a9eef0cdf63", + "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "e17870f578a72fae", - "name" : "Search without entering nhs number", + "uid" : "e3401ea00bd0843c", + "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bbc242fb8e369a80", - "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", + "uid" : "9fedb29016ae726e", + "name" : "Login button is visible", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "37b0a40448b62cb0", - "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", + "uid" : "8d10668af26e33dc", + "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "1bbb0271523a0d78", - "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", + "uid" : "bb1ba58f4c87730", + "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bdb9bca637b6c930", - "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", + "uid" : "719e9150413b793c", + "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f9692d744a2d6f61", - "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", + "uid" : "1e6e9cb1fff0b312", + "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f7bf20508c434fed", - "name" : "Sign in should fail based on credentials provided [None-password-fail]", + "uid" : "89c2680de5bf3def", + "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f9f633369c731400", - "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", + "uid" : "a52e78e82e1f0b84", + "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "11373fb37287004b", - "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", + "uid" : "21c6bb28542d5ad3", + "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "45bfe683b38d0492", - "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", + "uid" : "429388dd51d212bc", + "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "2bd9a9ec7042a35c", - "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", + "uid" : "4a260f7861780518", + "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "755d4b911ec79921", - "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", + "uid" : "b2e7887fd5b870", + "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "d6bfed2d66b6b082", - "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", + "uid" : "4a0bb1c2182db8f6", + "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "fe944a977277f876", - "name" : "NHS sign in page should be visible", + "uid" : "5772a62b0355a544", + "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "c037df325798ad41", - "name" : "NHS sign in page should be visible", + "uid" : "a20f48e7521bc311", + "name" : "Search without entering nhs number", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "9b1718d8794758dd", - "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", + "uid" : "1b9395fedbdcf652", + "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bb477fbb333e9116", - "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", + "uid" : "689bec097321e1a", + "name" : "NHS sign in page should be visible", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "61f836cdbc836f15", - "name" : "Login button is visible", + "uid" : "154d2f52ceb5ab7", + "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "status" : "failed", "severity" : "normal" diff --git a/widgets/status-chart.json b/widgets/status-chart.json index b04d5ceb4..d4c322ed7 100644 --- a/widgets/status-chart.json +++ b/widgets/status-chart.json @@ -1,260 +1,260 @@ [ { - "uid" : "e17870f578a72fae", - "name" : "Search without entering nhs number", + "uid" : "4a0bb1c2182db8f6", + "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", "time" : { - "start" : 1719299886096, - "stop" : 1719299916323, - "duration" : 30227 + "start" : 1719386161074, + "stop" : 1719386191402, + "duration" : 30328 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "fe944a977277f876", - "name" : "NHS sign in page should be visible", + "uid" : "154d2f52ceb5ab7", + "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", "time" : { - "start" : 1719299916540, - "stop" : 1719299946754, - "duration" : 30214 + "start" : 1719386222310, + "stop" : 1719386252668, + "duration" : 30358 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f9f633369c731400", - "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", + "uid" : "429388dd51d212bc", + "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", "time" : { - "start" : 1719299796222, - "stop" : 1719299826461, - "duration" : 30239 + "start" : 1719386222437, + "stop" : 1719386252732, + "duration" : 30295 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f7bf20508c434fed", - "name" : "Sign in should fail based on credentials provided [None-password-fail]", + "uid" : "8b876a9eef0cdf63", + "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", "time" : { - "start" : 1719299886889, - "stop" : 1719299917088, - "duration" : 30199 + "start" : 1719386130346, + "stop" : 1719386160682, + "duration" : 30336 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "f9692d744a2d6f61", - "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", + "uid" : "89c2680de5bf3def", + "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", "time" : { - "start" : 1719299948165, - "stop" : 1719299978369, - "duration" : 30204 + "start" : 1719386130294, + "stop" : 1719386160652, + "duration" : 30358 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bdb9bca637b6c930", - "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", + "uid" : "e3401ea00bd0843c", + "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", "time" : { - "start" : 1719299825206, - "stop" : 1719299855427, - "duration" : 30221 + "start" : 1719385670603, + "stop" : 1719385701079, + "duration" : 30476 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "6922ac45246da27e", - "name" : "Search by NHS number [9449305552-abxxyz Patel-13/2/2020-Caretakers Flat, Line2121, Line323, HYDERABAD, Country, EN2 6SN]", + "uid" : "1b9395fedbdcf652", + "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", "time" : { - "start" : 1719299735260, - "stop" : 1719299765477, - "duration" : 30217 + "start" : 1719386191628, + "stop" : 1719386221999, + "duration" : 30371 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "3328a6204e080d29", - "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", + "uid" : "9fedb29016ae726e", + "name" : "Login button is visible", "time" : { - "start" : 1719299947640, - "stop" : 1719299977835, - "duration" : 30195 + "start" : 1719386283842, + "stop" : 1719386314096, + "duration" : 30254 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "37b0a40448b62cb0", - "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", + "uid" : "c3a2fe424cd16ed1", + "name" : "Search by NHS number [9449306613-Briar Anderton-20/5/1990-123 Main Vyt, AB12 3CE]", "time" : { - "start" : 1719299856462, - "stop" : 1719299886689, - "duration" : 30227 + "start" : 1719386191779, + "stop" : 1719386222084, + "duration" : 30305 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bbc242fb8e369a80", - "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", + "uid" : "a52e78e82e1f0b84", + "name" : "Search by NHS number [9470011902-KATEE TUZZIO-20150527-BRIDGE END HOUSE, PARK ROAD, MILNTHORPE, CUMBRIA, LA7 7AN]", "time" : { - "start" : 1719299460934, - "stop" : 1719299491218, - "duration" : 30284 + "start" : 1719386219867, + "stop" : 1719386250100, + "duration" : 30233 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "948e990045434de2", - "name" : "Add batch to vaccine [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5-SD7YY2-24-today+90]", + "uid" : "8d10668af26e33dc", + "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", "time" : { - "start" : 1719299277479, - "stop" : 1719299307861, - "duration" : 30382 + "start" : 1719386158873, + "stop" : 1719386189163, + "duration" : 30290 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "c037df325798ad41", - "name" : "NHS sign in page should be visible", + "uid" : "5772a62b0355a544", + "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", "time" : { - "start" : 1719299917789, - "stop" : 1719299947987, - "duration" : 30198 + "start" : 1719386250313, + "stop" : 1719386280548, + "duration" : 30235 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "1bbb0271523a0d78", - "name" : "Search by NHS number [9449306605-Srinivasarao Patel-03/03/2020-4 Calicut Lane2, Line 2, Line 3, SLOUGH, Berkshire, KT21 1EJ]", + "uid" : "1e6e9cb1fff0b312", + "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-Flu-Fluenz Tetra - LAIV]", "time" : { - "start" : 1719299826685, - "stop" : 1719299856909, - "duration" : 30224 + "start" : 1719385855054, + "stop" : 1719385885484, + "duration" : 30430 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "9073f671283bd8d9", - "name" : "Search without entering patient details", + "uid" : "bb1ba58f4c87730", + "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", "time" : { - "start" : 1719299857126, - "stop" : 1719299887342, - "duration" : 30216 + "start" : 1719386189417, + "stop" : 1719386219650, + "duration" : 30233 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "d29791f87c4d62f5", - "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", + "uid" : "8f41996f1f5a5b70", + "name" : "Sign in should fail based on credentials provided [None-password-fail]", "time" : { - "start" : 1719299765116, - "stop" : 1719299795329, - "duration" : 30213 + "start" : 1719386283612, + "stop" : 1719386313977, + "duration" : 30365 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "11373fb37287004b", - "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", + "uid" : "21c6bb28542d5ad3", + "name" : "Search by NHS number [9470006143-TABBY FERN-20150222-CLEAR BECK HOUSE, TATHAM, LANCASTER, LA2 8PJ]", "time" : { - "start" : 1719299917279, - "stop" : 1719299947469, - "duration" : 30190 + "start" : 1719386252978, + "stop" : 1719386283316, + "duration" : 30338 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "9538b5082dbdb7d2", - "name" : "Search by NHS number [9470006739-JANNETTE ARD-20151209-1 ST. MARTINS COURT, CONISTON, CUMBRIA, LA21 8HZ]", + "uid" : "b2e7887fd5b870", + "name" : "Sign in should fail based on credentials provided [long_email_address@nhs.net-password-fail]", "time" : { - "start" : 1719299794739, - "stop" : 1719299824975, - "duration" : 30236 + "start" : 1719386344716, + "stop" : 1719386375051, + "duration" : 30335 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "df0f8348a085018e", - "name" : "Search by NHS number [9449306494-Reynolds Ryan-27/3/2001-39 Barton Road, RG10 9DF]", + "uid" : "719e9150413b793c", + "name" : "Sign in should fail based on credentials provided [invalid_email_address-password-fail]", "time" : { - "start" : 1719299734690, - "stop" : 1719299764911, - "duration" : 30221 + "start" : 1719386314180, + "stop" : 1719386344466, + "duration" : 30286 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "439b792ac4fe86c3", - "name" : "Search by NHS number [9470004272-JOJO LANE-20150706-10 RAKESMOOR LANE, BARROW-IN-FURNESS, LA14 4LG]", + "uid" : "689bec097321e1a", + "name" : "NHS sign in page should be visible", "time" : { - "start" : 1719299826014, - "stop" : 1719299856244, - "duration" : 30230 + "start" : 1719386311217, + "stop" : 1719386341444, + "duration" : 30227 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "d6bfed2d66b6b082", - "name" : "Search by NHS number [9470032640-SYBIL PELLING-20151217-50 ST. GEORGES QUAY, LANCASTER, LA1 1SA]", + "uid" : "9b5d98653eddcc5f", + "name" : "Search without entering patient details", "time" : { - "start" : 1719299855638, - "stop" : 1719299885857, - "duration" : 30219 + "start" : 1719386253064, + "stop" : 1719386283388, + "duration" : 30324 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "755d4b911ec79921", - "name" : "Search by NHS number [9469998626-JONNY CONOPO-20150305-1 DAISY BANK, LANCASTER, LA1 3JW]", + "uid" : "a20f48e7521bc311", + "name" : "Search without entering nhs number", "time" : { - "start" : 1719299795565, - "stop" : 1719299825794, - "duration" : 30229 + "start" : 1719386280780, + "stop" : 1719386310996, + "duration" : 30216 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "45bfe683b38d0492", - "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", + "uid" : "4d7408061c0bcae", + "name" : "NHS sign in page should be visible", "time" : { - "start" : 1719299674353, - "stop" : 1719299704581, - "duration" : 30228 + "start" : 1719386314133, + "stop" : 1719386344446, + "duration" : 30313 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "bb477fbb333e9116", - "name" : "Search by NHS number [9449306621-Not found-20110509-KT21 1LJ]", + "uid" : "b87bf117266ef07e", + "name" : "Search by NHS number [9693632109-Bill GARTON-23/6/1946-1 MOUNT AVENUE, BARTON-UPON-HUMBER, S HUMBERSIDE, DN18 5DW]", "time" : { - "start" : 1719299765695, - "stop" : 1719299795927, - "duration" : 30232 + "start" : 1719386069077, + "stop" : 1719386099415, + "duration" : 30338 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "61f836cdbc836f15", - "name" : "Login button is visible", + "uid" : "4a260f7861780518", + "name" : "Search by NHS number [9469997956-SOLOMON DAZLEY-20160130-10 BROOK STREET, LANCASTER, LA1 1SL]", "time" : { - "start" : 1719299887545, - "stop" : 1719299917751, - "duration" : 30206 + "start" : 1719386160983, + "stop" : 1719386191335, + "duration" : 30352 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "9b1718d8794758dd", - "name" : "Vaccine already added to site warning should appear [NEELIMA HOUSE-COVID-19-Comirnaty Original/Omicron BA.4-5]", + "uid" : "afa2a7f4cb240c49", + "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", "time" : { - "start" : 1719299764247, - "stop" : 1719299794495, - "duration" : 30248 + "start" : 1719386099691, + "stop" : 1719386130024, + "duration" : 30333 }, "status" : "failed", "severity" : "normal" }, { - "uid" : "2bd9a9ec7042a35c", - "name" : "Search by NHS number [9449304424-COMFORT Jones-9/3/2018-Ifyoucan113, GDA11 UCL6, KT17 1NA]", + "uid" : "5dc484ed8f9b7484", + "name" : "Sign in should fail based on credentials provided [neelima.guntupalli1@nhs.net-valid-pass-pass]", "time" : { - "start" : 1719299704810, - "stop" : 1719299735031, - "duration" : 30221 + "start" : 1719386344704, + "stop" : 1719386375008, + "duration" : 30304 }, "status" : "failed", "severity" : "normal" diff --git a/widgets/summary.json b/widgets/summary.json index 63a850059..c54f296b8 100644 --- a/widgets/summary.json +++ b/widgets/summary.json @@ -10,11 +10,11 @@ "total" : 26 }, "time" : { - "start" : 1719299277479, - "stop" : 1719299978369, - "duration" : 700890, - "minDuration" : 30190, - "maxDuration" : 30382, - "sumDuration" : 785920 + "start" : 1719385670603, + "stop" : 1719386375051, + "duration" : 704448, + "minDuration" : 30216, + "maxDuration" : 30476, + "sumDuration" : 788233 } } \ No newline at end of file