Best JavaScript code snippet using qawolf
UiAlert.jsx
Source:UiAlert.jsx
1import React from "react";2import {3 Alert,4 Col,5 Row,6 Card,7 CardBody,8 CardTitle,9 CardSubtitle,10 UncontrolledAlert,11 Container,12} from "reactstrap";13import { Link } from "react-router-dom";14//Import Breadcrumb15import Breadcrumbs from "../../components/Common/Breadcrumb";16const UiAlert = () => {17 //meta title18 document.title = "Alert | Skote - Vite React Admin & Dashboard Template";19 return (20 <React.Fragment>21 <div className="page-content">22 <Container fluid={true}>23 <Breadcrumbs title="UI Elements" breadcrumbItem="Alerts" />24 <Row>25 <Col lg={6}>26 <Card>27 <CardBody>28 <CardTitle className="mb-2">Default Alerts </CardTitle>29 <CardSubtitle className="mb-4">30 Alerts are available for any length of31 text, as well as an optional dismiss button. For proper styling, use one32 of the four <strong>required</strong> contextual classes (e.g., <code33 >.alert-success</code>). For inline dismissal, use the alerts jQuery plugin.34 </CardSubtitle>35 <div >36 <Alert color="primary">37 A simple primary alertâcheck it out!38 </Alert>39 <Alert color="secondary" role="alert">40 A simple secondary alertâcheck it out!41 </Alert>42 <Alert color="success" role="alert">43 A simple success alertâcheck it out!44 </Alert>45 <Alert color="danger" role="alert">46 A simple danger alertâcheck it out!47 </Alert>48 <Alert color="warning" role="alert">49 A simple warning alertâcheck it out!50 </Alert>51 <Alert color="info" className="mb-0" role="alert">52 A simple info alertâcheck it out!53 </Alert>54 </div>55 </CardBody>56 </Card>57 </Col>58 <Col lg={6}>59 <Card>60 <CardBody>61 <CardTitle className="mb-2">Link color </CardTitle>62 <CardSubtitle className="mb-4">63 Use the{" "}64 <code className="highlighter-rouge">.alert-link</code>{" "}65 utility className to quickly provide matching colored links66 within any alert.67 </CardSubtitle>68 <div >69 <Alert color="primary">70 A simple primary alert with{" "}71 <Link to="#" className="alert-link">72 an example link73 </Link>74 . Give it a click if you like.75 </Alert>76 <Alert color="secondary">77 A simple secondary alert with{" "}78 <Link to="#" className="alert-link">79 an example link80 </Link>81 . Give it a click if you like.82 </Alert>83 <Alert color="success">84 A simple success alert with{" "}85 <Link to="#" className="alert-link">86 an example link87 </Link>88 . Give it a click if you like.89 </Alert>90 <Alert color="danger">91 A simple danger alert with{" "}92 <Link to="#" className="alert-link">93 an example link94 </Link>95 . Give it a click if you like.96 </Alert>97 <Alert color="warning">98 A simple warning alert with{" "}99 <Link to="#" className="alert-link">100 an example link101 </Link>102 . Give it a click if you like.103 </Alert>104 <Alert color="info" className="mb-0">105 A simple info alert with{" "}106 <Link to="#" className="alert-link">107 an example link108 </Link>109 . Give it a click if you like.110 </Alert>111 </div>112 </CardBody>113 </Card>114 </Col>115 </Row>116 <Row>117 <Col lg={6}>118 <Card>119 <CardBody>120 <CardTitle className="mb-2">Dismissing </CardTitle>121 <CardSubtitle className="mb-4">122 Add a dismiss button and the <code>.alert-dismissible</code> class, which adds extra padding123 to the right of the alert and positions the <code>.btn-close</code> button.124 </CardSubtitle>125 <div >126 <UncontrolledAlert color="primary">127 A simple primary alertâcheck it out!128 </UncontrolledAlert>129 <UncontrolledAlert color="secondary" role="alert">130 A simple secondary alertâcheck it out!131 </UncontrolledAlert>132 <UncontrolledAlert color="success" role="alert">133 A simple success alertâcheck it out!134 </UncontrolledAlert>135 <UncontrolledAlert color="danger" role="alert">136 A simple danger alertâcheck it out!137 </UncontrolledAlert>138 <UncontrolledAlert color="warning" role="alert">139 A simple warning alertâcheck it out!140 </UncontrolledAlert>141 <UncontrolledAlert142 color="info"143 className="mb-0"144 role="alert"145 >146 A simple info alertâcheck it out!147 </UncontrolledAlert>148 </div>149 </CardBody>150 </Card>151 </Col>152 <Col lg={6}>153 <Card>154 <CardBody>155 <CardTitle className="mb-4">With Icon </CardTitle>156 <div >157 <UncontrolledAlert158 color="primary"159 className="alert-dismissible fade show"160 role="alert"161 >162 <i className="mdi mdi-bullseye-arrow me-2"></i>A simple163 primary alertâcheck it out!164 </UncontrolledAlert>165 <UncontrolledAlert166 color="secondary"167 className="alert-dismissible fade show"168 role="alert"169 >170 <i className="mdi mdi-grease-pencil me-2"></i>A simple171 secondary alertâcheck it out!172 </UncontrolledAlert>173 <UncontrolledAlert174 color="success"175 className="alert-dismissible fade show"176 role="alert"177 >178 <i className="mdi mdi-check-all me-2"></i>A simple success179 alertâcheck it out!180 </UncontrolledAlert>181 <UncontrolledAlert182 color="danger"183 className="alert-dismissible fade show"184 role="alert"185 >186 <i className="mdi mdi-block-helper me-2"></i>A simple187 danger alertâcheck it out!188 </UncontrolledAlert>189 <UncontrolledAlert190 color="warning"191 className="alert-dismissible fade show"192 role="alert"193 >194 <i className="mdi mdi-alert-outline me-2"></i>A simple195 warning alertâcheck it out!196 </UncontrolledAlert>197 <UncontrolledAlert198 color="info"199 className="alert-dismissible fade show mb-0"200 role="alert"201 >202 <i className="mdi mdi-alert-circle-outline me-2"></i>A203 simple info alertâcheck it out!204 </UncontrolledAlert>205 </div>206 </CardBody>207 </Card>208 </Col>209 </Row>210 <Row>211 <Col xl={6}>212 <Card>213 <CardBody>214 <h4 className="card-title">Additional content</h4>215 <p className="card-title-desc">Alerts can also contain additional HTML elements like headings, paragraphs and dividers.</p>216 <div >217 <Alert className="alert-success" role="alert">218 <h4 className="alert-heading">Well done!</h4>219 <p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so220 that you can see how spacing within an alert works with this kind of content.</p>221 <hr />222 <p className="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>223 </Alert>224 </div>225 </CardBody>226 </Card>227 </Col>228 </Row>229 </Container>230 </div>231 </React.Fragment>232 );233};...
test_modal_dialogs.py
Source:test_modal_dialogs.py
...13 Alert(self.marionette).text14 return True15 except errors.NoAlertPresentException:16 return False17 def wait_for_alert(self, timeout=None):18 Wait(self.marionette, timeout=timeout).until(19 lambda _: self.alert_present())20 def wait_for_alert_closed(self, timeout=None):21 Wait(self.marionette, timeout=timeout).until(22 lambda _: not self.alert_present())23class TestTabModalAlerts(BaseAlertTestCase):24 def setUp(self):25 super(TestTabModalAlerts, self).setUp()26 self.assertTrue(self.marionette.get_pref("prompts.tab_modal.enabled",27 "Tab modal alerts should be enabled by default."))28 self.marionette.navigate(self.marionette.absolute_url("test_tab_modal_dialogs.html"))29 def tearDown(self):30 self.marionette.execute_script("window.onbeforeunload = null;")31 # Ensure to close a possible remaining tab modal dialog32 try:33 alert = self.marionette.switch_to_alert()34 alert.dismiss()35 self.wait_for_alert_closed()36 except:37 pass38 super(TestTabModalAlerts, self).tearDown()39 def test_no_alert_raises(self):40 with self.assertRaises(errors.NoAlertPresentException):41 Alert(self.marionette).accept()42 with self.assertRaises(errors.NoAlertPresentException):43 Alert(self.marionette).dismiss()44 def test_alert_accept(self):45 self.marionette.find_element(By.ID, "tab-modal-alert").click()46 self.wait_for_alert()47 alert = self.marionette.switch_to_alert()48 alert.accept()49 def test_alert_dismiss(self):50 self.marionette.find_element(By.ID, "tab-modal-alert").click()51 self.wait_for_alert()52 alert = self.marionette.switch_to_alert()53 alert.dismiss()54 def test_confirm_accept(self):55 self.marionette.find_element(By.ID, "tab-modal-confirm").click()56 self.wait_for_alert()57 alert = self.marionette.switch_to_alert()58 alert.accept()59 self.wait_for_condition(60 lambda mn: mn.find_element(By.ID, "confirm-result").text == "true")61 def test_confirm_dismiss(self):62 self.marionette.find_element(By.ID, "tab-modal-confirm").click()63 self.wait_for_alert()64 alert = self.marionette.switch_to_alert()65 alert.dismiss()66 self.wait_for_condition(67 lambda mn: mn.find_element(By.ID, "confirm-result").text == "false")68 def test_prompt_accept(self):69 self.marionette.find_element(By.ID, "tab-modal-prompt").click()70 self.wait_for_alert()71 alert = self.marionette.switch_to_alert()72 alert.accept()73 self.wait_for_condition(74 lambda mn: mn.find_element(By.ID, "prompt-result").text == "")75 def test_prompt_dismiss(self):76 self.marionette.find_element(By.ID, "tab-modal-prompt").click()77 self.wait_for_alert()78 alert = self.marionette.switch_to_alert()79 alert.dismiss()80 self.wait_for_condition(81 lambda mn: mn.find_element(By.ID, "prompt-result").text == "null")82 def test_alert_opened_before_session_starts(self):83 self.marionette.find_element(By.ID, "tab-modal-alert").click()84 self.wait_for_alert()85 # Restart the session to ensure we still find the formerly left-open dialog.86 self.marionette.delete_session()87 self.marionette.start_session()88 alert = self.marionette.switch_to_alert()89 alert.dismiss()90 def test_alert_text(self):91 with self.assertRaises(errors.NoAlertPresentException):92 alert = self.marionette.switch_to_alert()93 alert.text94 self.marionette.find_element(By.ID, "tab-modal-alert").click()95 self.wait_for_alert()96 alert = self.marionette.switch_to_alert()97 self.assertEqual(alert.text, "Marionette alert")98 alert.accept()99 def test_prompt_text(self):100 with self.assertRaises(errors.NoAlertPresentException):101 alert = self.marionette.switch_to_alert()102 alert.text103 self.marionette.find_element(By.ID, "tab-modal-prompt").click()104 self.wait_for_alert()105 alert = self.marionette.switch_to_alert()106 self.assertEqual(alert.text, "Marionette prompt")107 alert.accept()108 def test_confirm_text(self):109 with self.assertRaises(errors.NoAlertPresentException):110 alert = self.marionette.switch_to_alert()111 alert.text112 self.marionette.find_element(By.ID, "tab-modal-confirm").click()113 self.wait_for_alert()114 alert = self.marionette.switch_to_alert()115 self.assertEqual(alert.text, "Marionette confirm")116 alert.accept()117 def test_set_text_throws(self):118 with self.assertRaises(errors.NoAlertPresentException):119 Alert(self.marionette).send_keys("Foo")120 self.marionette.find_element(By.ID, "tab-modal-alert").click()121 self.wait_for_alert()122 alert = self.marionette.switch_to_alert()123 with self.assertRaises(errors.ElementNotInteractableException):124 alert.send_keys("Foo")125 alert.accept()126 def test_set_text_accept(self):127 self.marionette.find_element(By.ID, "tab-modal-prompt").click()128 self.wait_for_alert()129 alert = self.marionette.switch_to_alert()130 alert.send_keys("Some text!")131 alert.accept()132 self.wait_for_condition(133 lambda mn: mn.find_element(By.ID, "prompt-result").text == "Some text!")134 def test_set_text_dismiss(self):135 self.marionette.find_element(By.ID, "tab-modal-prompt").click()136 self.wait_for_alert()137 alert = self.marionette.switch_to_alert()138 alert.send_keys("Some text!")139 alert.dismiss()140 self.wait_for_condition(141 lambda mn: mn.find_element(By.ID, "prompt-result").text == "null")142 def test_onbeforeunload_dismiss(self):143 start_url = self.marionette.get_url()144 self.marionette.find_element(By.ID, "onbeforeunload-handler").click()145 self.wait_for_condition(146 lambda mn: mn.execute_script("""147 return window.onbeforeunload !== null;148 """))149 self.marionette.navigate("about:blank")150 self.wait_for_alert()151 alert = self.marionette.switch_to_alert()152 self.assertTrue(alert.text.startswith("This page is asking you to confirm"))153 alert.dismiss()154 self.assertTrue(self.marionette.get_url().startswith(start_url))155 def test_onbeforeunload_accept(self):156 self.marionette.find_element(By.ID, "onbeforeunload-handler").click()157 self.wait_for_condition(158 lambda mn: mn.execute_script("""159 return window.onbeforeunload !== null;160 """))161 self.marionette.navigate("about:blank")162 self.wait_for_alert()163 alert = self.marionette.switch_to_alert()164 self.assertTrue(alert.text.startswith("This page is asking you to confirm"))165 alert.accept()166 self.wait_for_condition(lambda mn: mn.get_url() == "about:blank")167 def test_unrelated_command_when_alert_present(self):168 self.marionette.find_element(By.ID, "tab-modal-alert").click()169 self.wait_for_alert()170 with self.assertRaises(errors.UnexpectedAlertOpen):171 self.marionette.find_element(By.ID, "click-result")172class TestModalAlerts(BaseAlertTestCase):173 def setUp(self):174 super(TestModalAlerts, self).setUp()175 def tearDown(self):176 # Ensure to close a possible remaining modal dialog177 self.close_all_windows()178 super(TestModalAlerts, self).tearDown()179 def test_http_auth_dismiss(self):180 self.marionette.navigate(self.marionette.absolute_url("http_auth"))181 self.wait_for_alert(timeout=self.marionette.timeout.page_load)182 alert = self.marionette.switch_to_alert()183 alert.dismiss()184 self.wait_for_alert_closed()185 status = Wait(self.marionette, timeout=self.marionette.timeout.page_load).until(186 element_present(By.ID, "status")187 )188 self.assertEqual(status.text, "restricted")189 def test_alert_opened_before_session_starts(self):190 self.marionette.navigate(self.marionette.absolute_url("http_auth"))191 self.wait_for_alert(timeout=self.marionette.timeout.page_load)192 # Restart the session to ensure we still find the formerly left-open dialog.193 self.marionette.delete_session()194 self.marionette.start_session()195 alert = self.marionette.switch_to_alert()196 alert.dismiss()...
alerts.js
Source:alerts.js
1import alertsData from '../lib/alerts/index.jsx';2import {AlertTypes, AlertLevels} from '../lib/alerts/index.jsx';3import extensionData from '../lib/libraries/extensions/index.jsx';4const SHOW_ALERT = 'scratch-gui/alerts/SHOW_ALERT';5const SHOW_EXTENSION_ALERT = 'scratch-gui/alerts/SHOW_EXTENSION_ALERT';6const CLOSE_ALERT = 'scratch-gui/alerts/CLOSE_ALERT';7const CLOSE_ALERTS_WITH_ID = 'scratch-gui/alerts/CLOSE_ALERTS_WITH_ID';8const CLOSE_ALERT_WITH_ID = 'scratch-gui/alerts/CLOSE_ALERT_WITH_ID';9/**10 * Initial state of alerts reducer11 *12 * {bool} visible - whether the alerts are visible13 * {array} alertsList - list of alerts, each with properties:14 * * alertType (required): one of AlertTypes15 * * closeButton (optional): bool indicating that we should show close button16 * * content (optional): react element (a <FormattedMessage />)17 * * extentionId (optional): id string that identifies the extension18 * * iconURL (optional): string19 * * level (required): string, one of AlertLevels20 * * message (optional): string21 * * showReconnect (optional): bool22 */23const initialState = {24 visible: true,25 alertsList: []26};27const filterPopupAlerts = alertsList => (28 alertsList.filter(curAlert => (29 curAlert.alertType === AlertTypes.STANDARD ||30 curAlert.alertType === AlertTypes.EXTENSION31 ))32);33const filterInlineAlerts = alertsList => (34 alertsList.filter(curAlert => (35 curAlert.alertType === AlertTypes.INLINE36 ))37);38const reducer = function (state, action) {39 if (typeof state === 'undefined') state = initialState;40 switch (action.type) {41 case SHOW_ALERT: { // intended to show standard and inline alerts, but not extensions42 const alertId = action.alertId;43 if (alertId) {44 const newAlert = {45 alertId: alertId,46 level: AlertLevels.WARN // default level47 };48 const alertData = alertsData.find(thisAlertData => thisAlertData.alertId === alertId);49 if (alertData) {50 const newList = state.alertsList.filter(curAlert => (51 !alertData.clearList || alertData.clearList.indexOf(curAlert.alertId) === -152 ));53 if (action.data && action.data.message) {54 newAlert.message = action.data.message;55 }56 newAlert.alertType = alertData.alertType || AlertTypes.STANDARD;57 newAlert.closeButton = alertData.closeButton;58 newAlert.content = alertData.content;59 newAlert.iconURL = alertData.iconURL;60 newAlert.iconSpinner = alertData.iconSpinner;61 newAlert.level = alertData.level;62 newAlert.showDownload = alertData.showDownload;63 newAlert.showSaveNow = alertData.showSaveNow;64 newList.push(newAlert);65 return Object.assign({}, state, {66 alertsList: newList67 });68 }69 }70 return state; // if alert not found, show nothing71 }72 case SHOW_EXTENSION_ALERT: {73 const extensionId = action.data.extensionId;74 if (extensionId) {75 const extension = extensionData.find(ext => ext.extensionId === extensionId);76 if (extension) {77 const newList = state.alertsList.slice();78 const newAlert = {79 alertType: AlertTypes.EXTENSION,80 closeButton: true,81 extensionId: extensionId,82 extensionName: extension.name,83 iconURL: extension.connectionSmallIconURL,84 level: AlertLevels.WARN,85 showReconnect: true86 };87 newList.push(newAlert);88 return Object.assign({}, state, {89 alertsList: newList90 });91 }92 }93 return state; // if alert not found, show nothing94 }95 case CLOSE_ALERT_WITH_ID:96 case CLOSE_ALERT: {97 if (action.alertId) {98 action.index = state.alertsList.findIndex(a => a.alertId === action.alertId);99 if (action.index === -1) return state;100 }101 const newList = state.alertsList.slice();102 newList.splice(action.index, 1);103 return Object.assign({}, state, {104 alertsList: newList105 });106 }107 case CLOSE_ALERTS_WITH_ID: {108 return Object.assign({}, state, {109 alertsList: state.alertsList.filter(curAlert => (110 curAlert.alertId !== action.alertId111 ))112 });113 }114 default:115 return state;116 }117};118/**119 * Action creator to close an alert with the given index.120 *121 * @param {object} index - the index of the alert to close.122 * @return {object} - an object to be passed to the reducer.123 */124const closeAlert = function (index) {125 return {126 type: CLOSE_ALERT,127 index128 };129};130/**131 * Action creator to close all alerts with a given ID.132 *133 * @param {string} alertId - id string of the alert to close134 * @return {object} - an object to be passed to the reducer.135 */136const closeAlertsWithId = function (alertId) {137 return {138 type: CLOSE_ALERTS_WITH_ID,139 alertId140 };141};142/**143 * Action creator to close a single alert with a given ID.144 *145 * @param {string} alertId - id string of the alert to close146 * @return {object} - an object to be passed to the reducer.147 */148const closeAlertWithId = function (alertId) {149 return {150 type: CLOSE_ALERT_WITH_ID,151 alertId152 };153};154/**155 * Action creator to show an alert with the given alertId.156 *157 * @param {string} alertId - id string of the alert to show158 * @return {object} - an object to be passed to the reducer.159 */160const showStandardAlert = function (alertId) {161 return {162 type: SHOW_ALERT,163 alertId164 };165};166/**167 * Action creator to show an alert with the given input data.168 *169 * @param {object} data - data for the alert170 * @param {string} data.message - message for the alert171 * @param {string} data.extensionId - extension ID for the alert172 * @return {object} - an object to be passed to the reducer.173 */174const showExtensionAlert = function (data) {175 return {176 type: SHOW_EXTENSION_ALERT,177 data178 };179};180/**181 * Function to dispatch showing an alert, with optional182 * timeout to make it close/go away.183 *184 * @param {object} dispatch - dispatch function185 * @param {string} alertId - the ID of the alert186 */187const showAlertWithTimeout = function (dispatch, alertId) {188 const alertData = alertsData.find(thisAlertData => thisAlertData.alertId === alertId);189 if (alertData) {190 dispatch(showStandardAlert(alertId));191 if (alertData.maxDisplaySecs) {192 setTimeout(() => {193 dispatch(closeAlertsWithId(alertId));194 }, alertData.maxDisplaySecs * 1000);195 }196 }197};198export {199 reducer as default,200 initialState as alertsInitialState,201 closeAlert,202 closeAlertWithId,203 filterInlineAlerts,204 filterPopupAlerts,205 showAlertWithTimeout,206 showExtensionAlert,207 showStandardAlert...
alert.js
Source:alert.js
1// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-2/* This Source Code Form is subject to the terms of the Mozilla Public3 * License, v. 2.0. If a copy of the MPL was not distributed with this4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */5Components.utils.import("resource://gre/modules/Services.jsm");6const Ci = Components.interfaces;7const Cc = Components.classes;8var windowMediator = Cc["@mozilla.org/appshell/window-mediator;1"]9 .getService(Ci.nsIWindowMediator);10// Copied from nsILookAndFeel.h, see comments on eMetric_AlertNotificationOrigin11const NS_ALERT_HORIZONTAL = 1;12const NS_ALERT_LEFT = 2;13const NS_ALERT_TOP = 4;14const WINDOW_MARGIN = 10;15var gOrigin = 0; // Default value: alert from bottom right.16var gReplacedWindow = null;17var gAlertListener = null;18var gAlertTextClickable = false;19var gAlertCookie = "";20var gIsReplaced = false;21function prefillAlertInfo() {22 // unwrap all the args....23 // arguments[0] --> the image src url24 // arguments[1] --> the alert title25 // arguments[2] --> the alert text26 // arguments[3] --> is the text clickable?27 // arguments[4] --> the alert cookie to be passed back to the listener28 // arguments[5] --> the alert origin reported by the look and feel29 // arguments[6] --> bidi30 // arguments[7] --> lang31 // arguments[8] --> replaced alert window (nsIDOMWindow)32 // arguments[9] --> an optional callback listener (nsIObserver)33 switch (window.arguments.length) {34 default:35 case 10:36 gAlertListener = window.arguments[9];37 case 9:38 gReplacedWindow = window.arguments[8];39 case 6:40 gOrigin = window.arguments[5];41 case 5:42 gAlertCookie = window.arguments[4];43 case 4:44 gAlertTextClickable = window.arguments[3];45 if (gAlertTextClickable) {46 document.getElementById('alertNotification').setAttribute('clickable', true);47 document.getElementById('alertTextLabel').setAttribute('clickable', true);48 }49 case 3:50 document.getElementById('alertTextLabel').textContent = window.arguments[2];51 case 2:52 document.getElementById('alertTitleLabel').setAttribute('value', window.arguments[1]);53 case 1:54 if (window.arguments[0]) {55 document.getElementById('alertImage').setAttribute('src', window.arguments[0]);56 }57 case 0:58 break;59 }60}61function onAlertLoad() {62 const ALERT_DURATION_IMMEDIATE = 4000;63 let alertTextBox = document.getElementById("alertTextBox");64 let alertImageBox = document.getElementById("alertImageBox");65 alertImageBox.style.minHeight = alertTextBox.scrollHeight + "px";66 sizeToContent();67 if (gReplacedWindow && !gReplacedWindow.closed) {68 moveWindowToReplace(gReplacedWindow);69 gReplacedWindow.gIsReplaced = true;70 gReplacedWindow.close();71 } else {72 moveWindowToEnd();73 }74 window.addEventListener("XULAlertClose", function() { window.close(); });75 if (Services.prefs.getBoolPref("alerts.disableSlidingEffect")) {76 setTimeout(function() { window.close(); }, ALERT_DURATION_IMMEDIATE);77 return;78 }79 let alertBox = document.getElementById("alertBox");80 alertBox.addEventListener("animationend", function hideAlert(event) {81 if (event.animationName == "alert-animation") {82 alertBox.removeEventListener("animationend", hideAlert, false);83 window.close();84 }85 }, false);86 alertBox.setAttribute("animate", true);87 if (gAlertListener) {88 gAlertListener.observe(null, "alertshow", gAlertCookie);89 }90}91function moveWindowToReplace(aReplacedAlert) {92 let heightDelta = window.outerHeight - aReplacedAlert.outerHeight;93 // Move windows that come after the replaced alert if the height is different.94 if (heightDelta != 0) {95 let windows = windowMediator.getEnumerator('alert:alert');96 while (windows.hasMoreElements()) {97 let alertWindow = windows.getNext();98 // boolean to determine if the alert window is after the replaced alert.99 let alertIsAfter = gOrigin & NS_ALERT_TOP ?100 alertWindow.screenY > aReplacedAlert.screenY :101 aReplacedAlert.screenY > alertWindow.screenY;102 if (alertIsAfter) {103 // The new Y position of the window.104 let adjustedY = gOrigin & NS_ALERT_TOP ?105 alertWindow.screenY + heightDelta :106 alertWindow.screenY - heightDelta;107 alertWindow.moveTo(alertWindow.screenX, adjustedY);108 }109 }110 }111 let adjustedY = gOrigin & NS_ALERT_TOP ? aReplacedAlert.screenY :112 aReplacedAlert.screenY - heightDelta;113 window.moveTo(aReplacedAlert.screenX, adjustedY);114}115function moveWindowToEnd() {116 // Determine position117 let x = gOrigin & NS_ALERT_LEFT ? screen.availLeft :118 screen.availLeft + screen.availWidth - window.outerWidth;119 let y = gOrigin & NS_ALERT_TOP ? screen.availTop :120 screen.availTop + screen.availHeight - window.outerHeight;121 // Position the window at the end of all alerts.122 let windows = windowMediator.getEnumerator('alert:alert');123 while (windows.hasMoreElements()) {124 let alertWindow = windows.getNext();125 if (alertWindow != window) {126 if (gOrigin & NS_ALERT_TOP) {127 y = Math.max(y, alertWindow.screenY + alertWindow.outerHeight);128 } else {129 y = Math.min(y, alertWindow.screenY - window.outerHeight);130 }131 }132 }133 // Offset the alert by WINDOW_MARGIN pixels from the edge of the screen134 y += gOrigin & NS_ALERT_TOP ? WINDOW_MARGIN : -WINDOW_MARGIN;135 x += gOrigin & NS_ALERT_LEFT ? WINDOW_MARGIN : -WINDOW_MARGIN;136 window.moveTo(x, y);137}138function onAlertBeforeUnload() {139 if (!gIsReplaced) {140 // Move other alert windows to fill the gap left by closing alert.141 let heightDelta = window.outerHeight + WINDOW_MARGIN;142 let windows = windowMediator.getEnumerator('alert:alert');143 while (windows.hasMoreElements()) {144 let alertWindow = windows.getNext();145 if (alertWindow != window) {146 if (gOrigin & NS_ALERT_TOP) {147 if (alertWindow.screenY > window.screenY) {148 alertWindow.moveTo(alertWindow.screenX, alertWindow.screenY - heightDelta);149 }150 } else {151 if (window.screenY > alertWindow.screenY) {152 alertWindow.moveTo(alertWindow.screenX, alertWindow.screenY + heightDelta);153 }154 }155 }156 }157 }158 if (gAlertListener) {159 gAlertListener.observe(null, "alertfinished", gAlertCookie);160 }161}162function onAlertClick() {163 if (gAlertListener && gAlertTextClickable) {164 gAlertListener.observe(null, "alertclickcallback", gAlertCookie);165 }166 window.close();...
alert.spec.js
Source:alert.spec.js
1import Alert from '../../src/alert'2import { getTransitionDurationFromElement } from '../../src/util/index'3/** Test helpers */4import { clearFixture, getFixture, jQueryMock } from '../helpers/fixture'5describe('Alert', () => {6 let fixtureEl7 beforeAll(() => {8 fixtureEl = getFixture()9 })10 afterEach(() => {11 clearFixture()12 })13 it('should take care of element either passed as a CSS selector or DOM element', () => {14 fixtureEl.innerHTML = '<div class="alert"></div>'15 const alertEl = fixtureEl.querySelector('.alert')16 const alertBySelector = new Alert('.alert')17 const alertByElement = new Alert(alertEl)18 expect(alertBySelector._element).toEqual(alertEl)19 expect(alertByElement._element).toEqual(alertEl)20 })21 it('should return version', () => {22 expect(typeof Alert.VERSION).toEqual('string')23 })24 describe('DATA_KEY', () => {25 it('should return plugin data key', () => {26 expect(Alert.DATA_KEY).toEqual('bs.alert')27 })28 })29 describe('data-api', () => {30 it('should close an alert without instantiating it manually', () => {31 fixtureEl.innerHTML = [32 '<div class="alert">',33 ' <button type="button" data-bs-dismiss="alert">x</button>',34 '</div>'35 ].join('')36 const button = document.querySelector('button')37 button.click()38 expect(document.querySelectorAll('.alert').length).toEqual(0)39 })40 it('should close an alert without instantiating it manually with the parent selector', () => {41 fixtureEl.innerHTML = [42 '<div class="alert">',43 ' <button type="button" data-bs-target=".alert" data-bs-dismiss="alert">x</button>',44 '</div>'45 ].join('')46 const button = document.querySelector('button')47 button.click()48 expect(document.querySelectorAll('.alert').length).toEqual(0)49 })50 })51 describe('close', () => {52 it('should close an alert', done => {53 const spy = jasmine.createSpy('spy', getTransitionDurationFromElement)54 fixtureEl.innerHTML = '<div class="alert"></div>'55 const alertEl = document.querySelector('.alert')56 const alert = new Alert(alertEl)57 alertEl.addEventListener('closed.bs.alert', () => {58 expect(document.querySelectorAll('.alert').length).toEqual(0)59 expect(spy).not.toHaveBeenCalled()60 done()61 })62 alert.close()63 })64 it('should close alert with fade class', done => {65 fixtureEl.innerHTML = '<div class="alert fade"></div>'66 const alertEl = document.querySelector('.alert')67 const alert = new Alert(alertEl)68 alertEl.addEventListener('transitionend', () => {69 expect().nothing()70 })71 alertEl.addEventListener('closed.bs.alert', () => {72 expect(document.querySelectorAll('.alert').length).toEqual(0)73 done()74 })75 alert.close()76 })77 it('should not remove alert if close event is prevented', done => {78 fixtureEl.innerHTML = '<div class="alert"></div>'79 const getAlert = () => document.querySelector('.alert')80 const alertEl = getAlert()81 const alert = new Alert(alertEl)82 alertEl.addEventListener('close.bs.alert', event => {83 event.preventDefault()84 setTimeout(() => {85 expect(getAlert()).not.toBeNull()86 done()87 }, 10)88 })89 alertEl.addEventListener('closed.bs.alert', () => {90 throw new Error('should not fire closed event')91 })92 alert.close()93 })94 })95 describe('dispose', () => {96 it('should dispose an alert', () => {97 fixtureEl.innerHTML = '<div class="alert"></div>'98 const alertEl = document.querySelector('.alert')99 const alert = new Alert(alertEl)100 expect(Alert.getInstance(alertEl)).not.toBeNull()101 alert.dispose()102 expect(Alert.getInstance(alertEl)).toBeNull()103 })104 })105 describe('jQueryInterface', () => {106 it('should handle config passed and toggle existing alert', () => {107 fixtureEl.innerHTML = '<div class="alert"></div>'108 const alertEl = fixtureEl.querySelector('.alert')109 const alert = new Alert(alertEl)110 spyOn(alert, 'close')111 jQueryMock.fn.alert = Alert.jQueryInterface112 jQueryMock.elements = [alertEl]113 jQueryMock.fn.alert.call(jQueryMock, 'close')114 expect(alert.close).toHaveBeenCalled()115 })116 it('should create new alert instance and call close', () => {117 fixtureEl.innerHTML = '<div class="alert"></div>'118 const alertEl = fixtureEl.querySelector('.alert')119 jQueryMock.fn.alert = Alert.jQueryInterface120 jQueryMock.elements = [alertEl]121 expect(Alert.getInstance(alertEl)).toBeNull()122 jQueryMock.fn.alert.call(jQueryMock, 'close')123 expect(fixtureEl.querySelector('.alert')).toBeNull()124 })125 it('should just create an alert instance without calling close', () => {126 fixtureEl.innerHTML = '<div class="alert"></div>'127 const alertEl = fixtureEl.querySelector('.alert')128 jQueryMock.fn.alert = Alert.jQueryInterface129 jQueryMock.elements = [alertEl]130 jQueryMock.fn.alert.call(jQueryMock)131 expect(Alert.getInstance(alertEl)).not.toBeNull()132 expect(fixtureEl.querySelector('.alert')).not.toBeNull()133 })134 })135 describe('getInstance', () => {136 it('should return alert instance', () => {137 fixtureEl.innerHTML = '<div></div>'138 const div = fixtureEl.querySelector('div')139 const alert = new Alert(div)140 expect(Alert.getInstance(div)).toEqual(alert)141 expect(Alert.getInstance(div)).toBeInstanceOf(Alert)142 })143 it('should return null when there is no alert instance', () => {144 fixtureEl.innerHTML = '<div></div>'145 const div = fixtureEl.querySelector('div')146 expect(Alert.getInstance(div)).toEqual(null)147 })148 })149 describe('getOrCreateInstance', () => {150 it('should return alert instance', () => {151 fixtureEl.innerHTML = '<div></div>'152 const div = fixtureEl.querySelector('div')153 const alert = new Alert(div)154 expect(Alert.getOrCreateInstance(div)).toEqual(alert)155 expect(Alert.getInstance(div)).toEqual(Alert.getOrCreateInstance(div, {}))156 expect(Alert.getOrCreateInstance(div)).toBeInstanceOf(Alert)157 })158 it('should return new instance when there is no alert instance', () => {159 fixtureEl.innerHTML = '<div></div>'160 const div = fixtureEl.querySelector('div')161 expect(Alert.getInstance(div)).toEqual(null)162 expect(Alert.getOrCreateInstance(div)).toBeInstanceOf(Alert)163 })164 })...
alerts_test.py
Source:alerts_test.py
...10 self.wait = wait.WebDriverWait(self.driver, 5, ignored_exceptions = [exceptions.NoAlertPresentException])11 self.driver.get(self.webserver.where_is('modal/res/alerts.html'))12 def tearDown(self):13 try:14 self.driver.switch_to_alert().dismiss()15 except exceptions.NoAlertPresentException:16 pass17 # Alerts18 def test_should_allow_user_to_accept_an_alert(self):19 self.driver.find_element_by_css_selector('#alert').click()20 alert = self.wait.until(lambda x: x.switch_to_alert())21 alert.accept()22 self.driver.current_url23 def test_should_allow_user_to_accept_an_alert_with_no_text(self):24 self.driver.find_element_by_css_selector('#empty-alert').click()25 alert = self.wait.until(lambda x: x.switch_to_alert())26 alert.accept()27 self.driver.current_url28 def test_should_allow_user_to_dismiss_an_alert(self):29 self.driver.find_element_by_css_selector('#alert').click()30 alert = self.wait.until(lambda x: x.switch_to_alert())31 alert.dismiss()32 self.driver.current_url33 def test_should_allow_user_to_get_text_of_an_alert(self):34 self.driver.find_element_by_css_selector('#alert').click()35 alert = self.wait.until(lambda x: x.switch_to_alert())36 value = alert.text37 alert.accept()38 self.assertEquals('cheese', value)39 def test_setting_the_value_of_an_alert_throws(self):40 self.driver.find_element_by_css_selector('#alert').click()41 alert = self.wait.until(lambda x: x.switch_to_alert())42 with self.assertRaises(exceptions.ElementNotVisibleException):43 alert.send_keys('cheese')44 alert.accept()45 def test_alert_should_not_allow_additional_commands_if_dismissed(self):46 self.driver.find_element_by_css_selector('#alert').click()47 alert = self.wait.until(lambda x: x.switch_to_alert())48 alert.accept()49 with self.assertRaises(exceptions.NoAlertPresentException):50 alert.text51 # Prompts52 def test_should_allow_user_to_accept_a_prompt(self):53 self.driver.find_element_by_css_selector('#prompt').click()54 alert = self.wait.until(lambda x: x.switch_to_alert())55 alert.accept()56 self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == '')57 def test_should_allow_user_to_dismiss_a_prompt(self):58 self.driver.find_element_by_css_selector('#prompt').click()59 alert = self.wait.until(lambda x: x.switch_to_alert())60 alert.dismiss()61 self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'null')62 def test_should_allow_user_to_set_the_value_of_a_prompt(self):63 self.driver.find_element_by_css_selector('#prompt').click()64 alert = self.wait.until(lambda x: x.switch_to_alert())65 alert.send_keys('cheese')66 alert.accept()67 self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'cheese')68 def test_should_allow_user_to_get_text_of_a_prompt(self):69 self.driver.find_element_by_css_selector('#prompt').click()70 alert = self.wait.until(lambda x: x.switch_to_alert())71 value = alert.text72 alert.accept()73 self.assertEquals('Enter something', value)74 def test_prompt_should_not_allow_additional_commands_if_dismissed(self):75 self.driver.find_element_by_css_selector('#prompt').click()76 alert = self.wait.until(lambda x: x.switch_to_alert())77 alert.accept()78 with self.assertRaises(exceptions.NoAlertPresentException):79 alert.text80 def test_prompt_should_use_default_value_if_no_keys_sent(self):81 self.driver.find_element_by_css_selector('#prompt-with-default').click()82 alert = self.wait.until(lambda x: x.switch_to_alert())83 alert.accept()84 self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'This is a default value')85 def test_prompt_should_have_null_value_if_dismissed(self):86 self.driver.find_element_by_css_selector('#prompt-with-default').click()87 alert = self.wait.until(lambda x: x.switch_to_alert())88 alert.dismiss()89 self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'null')90 # Confirmations91 def test_should_allow_user_to_accept_a_confirm(self):92 self.driver.find_element_by_css_selector('#confirm').click()93 alert = self.wait.until(lambda x: x.switch_to_alert())94 alert.accept()95 self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'true')96 def test_should_allow_user_to_dismiss_a_confirm(self):97 self.driver.find_element_by_css_selector('#confirm').click()98 alert = self.wait.until(lambda x: x.switch_to_alert())99 alert.dismiss()100 self.wait.until(lambda x: x.find_element_by_css_selector('#text').text == 'false')101 def test_setting_the_value_of_a_confirm_throws(self):102 self.driver.find_element_by_css_selector('#confirm').click()103 alert = self.wait.until(lambda x: x.switch_to_alert())104 with self.assertRaises(exceptions.ElementNotVisibleException):105 alert.send_keys('cheese')106 alert.accept()107 def test_should_allow_user_to_get_text_of_a_confirm(self):108 self.driver.find_element_by_css_selector('#confirm').click()109 alert = self.wait.until(lambda x: x.switch_to_alert())110 value = alert.text111 alert.accept()112 self.assertEquals('cheese', value)113 def test_confirm_should_not_allow_additional_commands_if_dismissed(self):114 self.driver.find_element_by_css_selector('#confirm').click()115 alert = self.wait.until(lambda x: x.switch_to_alert())116 alert.accept()117 with self.assertRaises(exceptions.NoAlertPresentException):118 alert.text119"""120 def test_switch_to_missing_alert_fails(self):121 with self.assertRaises(exceptions.NoAlertPresentException):122 self.driver.switch_to_alert()123"""124if __name__ == '__main__':...
alert.service.ts
Source:alert.service.ts
1import { Injectable, SecurityContext, NgZone } from '@angular/core';2import { DomSanitizer } from '@angular/platform-browser';3import { TranslateService } from '@ngx-translate/core';4import { translationNotFoundMessage } from 'app/config/translation.config';5export type AlertType = 'success' | 'danger' | 'warning' | 'info';6export interface Alert {7 id?: number;8 type: AlertType;9 message?: string;10 translationKey?: string;11 translationParams?: { [key: string]: unknown };12 timeout?: number;13 toast?: boolean;14 position?: string;15 close?: (alerts: Alert[]) => void;16}17@Injectable({18 providedIn: 'root',19})20export class AlertService {21 timeout = 5000;22 toast = false;23 position = 'top right';24 // unique id for each alert. Starts from 0.25 private alertId = 0;26 private alerts: Alert[] = [];27 constructor(private sanitizer: DomSanitizer, private ngZone: NgZone, private translateService: TranslateService) {}28 clear(): void {29 this.alerts = [];30 }31 get(): Alert[] {32 return this.alerts;33 }34 /**35 * Adds alert to alerts array and returns added alert.36 * @param alert Alert to add. If `timeout`, `toast` or `position` is missing then applying default value.37 * If `translateKey` is available then it's translation else `message` is used for showing.38 * @param extAlerts If missing then adding `alert` to `AlertService` internal array and alerts can be retrieved by `get()`.39 * Else adding `alert` to `extAlerts`.40 * @returns Added alert41 */42 addAlert(alert: Alert, extAlerts?: Alert[]): Alert {43 alert.id = this.alertId++;44 if (alert.translationKey) {45 const translatedMessage = this.translateService.instant(alert.translationKey, alert.translationParams);46 // if translation key exists47 if (translatedMessage !== `${translationNotFoundMessage}[${alert.translationKey}]`) {48 alert.message = translatedMessage;49 } else if (!alert.message) {50 alert.message = alert.translationKey;51 }52 }53 alert.message = this.sanitizer.sanitize(SecurityContext.HTML, alert.message ?? '') ?? '';54 alert.timeout = alert.timeout ?? this.timeout;55 alert.toast = alert.toast ?? this.toast;56 alert.position = alert.position ?? this.position;57 alert.close = (alertsArray: Alert[]) => this.closeAlert(alert.id!, alertsArray);58 (extAlerts ?? this.alerts).push(alert);59 if (alert.timeout > 0) {60 // Workaround protractor waiting for setTimeout.61 // Reference https://www.protractortest.org/#/timeouts62 this.ngZone.runOutsideAngular(() => {63 setTimeout(() => {64 this.ngZone.run(() => {65 this.closeAlert(alert.id!, extAlerts ?? this.alerts);66 });67 }, alert.timeout);68 });69 }70 return alert;71 }72 private closeAlert(alertId: number, extAlerts?: Alert[]): void {73 const alerts = extAlerts ?? this.alerts;74 const alertIndex = alerts.map(alert => alert.id).indexOf(alertId);75 // if found alert then remove76 if (alertIndex >= 0) {77 alerts.splice(alertIndex, 1);78 }79 }...
alert.component.ts
Source:alert.component.ts
1import { Component, Input } from '@angular/core';2import { Alert, AlertType } from './alert';3import { AlertService } from './alert.service';4@Component({5 selector: 'app-alert',6 templateUrl: './alert.component.html'7})8export class AlertComponent {9 @Input() timeout = 3000;10 alerts: Alert[] = [];11 constructor(12 private alertService: AlertService13 ) {14 this.alertService.getAlert().subscribe(alert => {15 if(!alert) {16 this.alerts = [];17 return;18 }19 this.alerts.push(alert);20 setTimeout(() => this.removeAlert(alert), this.timeout);21 })22 }23 removeAlert(alertToRemove: Alert) {24 this.alerts = this.alerts.filter(alert => alert != alertToRemove);25 }26 getAlertClass(alert: Alert) {27 if(!alert) return '';28 switch (alert.alertType) {29 case AlertType.DANGER:30 return 'alert alert-danger';31 case AlertType.INFO:32 return 'alert alert-info';33 case AlertType.SUCCESS:34 return 'alert alert-success';35 case AlertType.WARNING:36 return 'alert alert-warning';37 }38 }...
Using AI Code Generation
1const qawolf = require("qawolf");2const selectors = require("../selectors/test");3describe("test", () => {4 let browser;5 beforeAll(async () => {6 browser = await qawolf.launch();7 });8 afterAll(async () => {9 await qawolf.stopVideos();10 await browser.close();11 });12 it("test", async () => {13 const context = await browser.createIncognitoBrowserContext();14 const page = await context.newPage();15 await qawolf.scroll(page, "html", { x: 0, y: 0 });16 await page.click(selectors[0]);17 await page.type(selectors[0], "hello");18 await page.click(selectors[1]);19 await page.type(selectors[1], "hello");20 await page.click(selectors[2]);21 await page.type(selectors[2], "hello");22 await page.click(selectors[3]);23 await page.type(selectors[3], "hello");24 await page.click(selectors[4]);25 await page.type(selectors[4], "hello");26 await page.click(selectors[5]);27 await page.type(selectors[5], "hello");28 await page.click(selectors[6]);29 await page.type(selectors[6], "hello");30 await page.click(selectors[7]);31 await page.type(selectors[7], "hello");32 await page.click(selectors[8]);33 await page.type(selectors[8], "hello");34 await page.click(selectors[9]);35 await page.type(selectors[9], "hello");36 await page.click(selectors[10]);37 await page.type(selectors[10], "hello");38 await page.click(selectors[11]);39 await page.type(selectors[11], "hello");40 await page.click(selectors[12]);41 await page.type(selectors[12], "hello");42 await page.click(selectors[13]);43 await page.type(selectors[13], "hello");44 await page.click(selectors[14]);45 await page.type(selectors[14], "hello");46 await page.click(selectors[15]);47 await page.type(selectors[15], "hello");48 await page.click(selectors[16]);49 await page.type(selectors[16], "hello");50 await page.click(selectors[17]);
Using AI Code Generation
1const qawolf = require("qawolf");2const browser = await qawolf.launch();3await qawolf.create();4const page = await browser.newPage();5await qawolf.alert("hello world");6const { launch } = require("qawolf");7const browser = await launch();8const context = await browser.newContext();9const page = await context.newPage();10const { launch } = require("qawolf");11const browser = await launch();12const context = await browser.newContext();13const page = await context.newPage();14await page.click("text=Google Search");15const { launch } = require("qawolf");16const browser = await launch();17const context = await browser.newContext();18const page = await context.newPage();19await page.click("text=Google Search");20await page.fill("input[name=q]", "hello world");21const { launch } = require("qawolf");22const browser = await launch();23const context = await browser.newContext();24const page = await context.newPage();25await page.click("text=Google Search");26await page.fill("input[name=q]", "hello world");27await page.press("input[name=q]", "Enter");28const { launch } = require("qawolf");29const browser = await launch();30const context = await browser.newContext();31const page = await context.newPage();32await page.click("text=Google Search");33await page.fill("input[name=q]", "hello world");34await page.press("input[name=q]", "Enter");35await page.click("text=Hello world - Wikipedia");36const { launch } = require("qawolf");37const browser = await launch();38const context = await browser.newContext();39const page = await context.newPage();40await page.click("text=Google Search");41await page.fill("input[name=q]", "hello world");42await page.press("input[name=q]", "Enter");43await page.click("text=Hello world -
Using AI Code Generation
1const { alert } = require("@qawolf/browser");2const browser = await qawolf.launch();3const context = await browser.newContext();4const page = await context.newPage();5await page.type("input[name=q]", "test");6await page.click("input[type=submit]");7await page.waitForNavigation();8await page.waitForNavigation();9await page.waitForNavigation();10await page.waitForNavigation();11await page.waitForNavigation();12await page.waitForNavigation();13await page.waitForNavigation();14await page.waitForNavigation();
Using AI Code Generation
1const qawolf = require('qawolf');2qawolf.alert('Hello World!');3{4 "scripts": {5 }6}
Using AI Code Generation
1const qawolf = require("qawolf");2const selectors = require("../selectors/test");3let browser;4let page;5let context;6beforeAll(async () => {7browser = await qawolf.launch();8context = await browser.newContext();9});10beforeEach(async () => {11page = await context.newPage();12});13afterAll(async () => {14await browser.close();15});16test("test", async () => {17await page.click(selectors["Search Google"]);18await page.fill(selectors["Search Google"], "qawolf");19await page.press(selectors["Search Google"], "Enter");20await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams"]);21await page.click(selectors["QAWolf: End-to-end browser testing for frontend teams"]);22await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams"]);23await page.click(selectors["QAWolf: End-to-end browser testing for frontend teams"]);24await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams"]);25await page.click(selectors["QAWolf: End-to-end browser testing for frontend teams"]);26await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams"]);27await page.click(selectors["QAWolf: End-to-end browser testing for frontend teams"]);28await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams"]);29await page.click(selectors["QAWolf: End-to-end browser testing for frontend teams"]);30await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams"]);31await page.click(selectors["QAWolf: End-to-end browser testing for frontend teams"]);32await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams"]);33await page.click(selectors["QAWolf: End-to-end browser testing for frontend teams"]);34await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams"]);35await page.click(selectors["QAWolf: End-to-end browser testing for frontend teams"]);36await page.waitForSelector(selectors["QAWolf: End-to-end browser testing for frontend teams
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!