Best JavaScript code snippet using appium-xcuitest-driver
DatePicker.js
Source:DatePicker.js
1define(function () {2 "use strict";3 var registerSuite = intern.getPlugin("interface.object").registerSuite;4 var pollUntil = requirejs.nodeRequire("@theintern/leadfoot/helpers/pollUntil").default;5 var assert = intern.getPlugin("chai").assert;6 var keys = requirejs.nodeRequire("@theintern/leadfoot/keys").default;7 var luxon = require("luxon"),8 DateTime = luxon.DateTime;9 registerSuite("DatePicker - functional", {10 before: function () {11 return this.remote12 .get("deliteful/tests/functional/DatePicker.html")13 .then(pollUntil("return ready ? true : null;", [],14 intern.config.WAIT_TIMEOUT, intern.config.POLL_INTERVAL));15 },16 tests: {17 "basic mouse navigation": function () {18 return this.remote19 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 2, 1);")20 // Try month back/forward buttons on day view.21 .findByCssSelector(".d-date-picker-header .d-date-picker-button").click().click().end()22 .findByCssSelector(".d-date-picker-header .d-label").getVisibleText().then(function (month) {23 assert.strictEqual(month, "December");24 }).end()25 .findByCssSelector(".d-date-picker-footer .d-label").getVisibleText().then(function (year) {26 assert.strictEqual(year, "1999");27 }).end()28 .findAllByCssSelector("[role=gridcell]").getVisibleText().then(function (days) {29 assert.strictEqual(days[0].trim(), "28", "Nov 28");30 assert.strictEqual(days[days.length - 1].trim(), "1", "January 1");31 }).end()32 .findByCssSelector(".d-date-picker-header .d-date-picker-button:last-child").click().click().end()33 .findByCssSelector(".d-date-picker-header .d-label").getVisibleText().then(function (month) {34 assert.strictEqual(month, "February");35 }).end()36 .findByCssSelector(".d-date-picker-footer .d-label").getVisibleText().then(function (year) {37 assert.strictEqual(year, "2000");38 }).end()39 // Try year back/forward buttons on day view.40 .findByCssSelector(".d-date-picker-footer .d-date-picker-button").click().click().end()41 .findByCssSelector(".d-date-picker-header .d-label").getVisibleText().then(function (month) {42 assert.strictEqual(month, "February");43 }).end()44 .findByCssSelector(".d-date-picker-footer .d-label").getVisibleText().then(function (year) {45 assert.strictEqual(year, "1998");46 }).end()47 .findAllByCssSelector("[role=gridcell]").getVisibleText().then(function (days) {48 assert.strictEqual(days[0].trim(), "1", "Feb 1, 1998");49 assert.strictEqual(days[days.length - 1].trim(), "28", "Feb 28, 1998");50 }).end()51 .findByCssSelector(".d-date-picker-footer .d-date-picker-button:last-child").click().end()52 .findByCssSelector(".d-date-picker-header .d-label").getVisibleText().then(function (month) {53 assert.strictEqual(month, "February");54 }).end()55 .findByCssSelector(".d-date-picker-footer .d-label").getVisibleText().then(function (year) {56 assert.strictEqual(year, "1999");57 }).end();58 },59 "selection": {60 "current month": function () {61 return this.remote62 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 1, 1);")63 .findByCssSelector("[role=row]:nth-child(3) [role=gridcell]:nth-child(4)")64 .getVisibleText().then(function (day) {65 assert.strictEqual(day.trim(), "5", "Jan 5");66 })67 .click()68 .end()69 .findByCssSelector(".d-date-picker-selected").getVisibleText().then(function (day) {70 assert.strictEqual(day.trim(), "5");71 }).end()72 .findById("value").getVisibleText().then(function (value) {73 assert.strictEqual(value, "2000-01-05");74 }).end();75 },76 "previous month": function () {77 // Select a day from previous month (and year).78 return this.remote79 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 1, 1);")80 .findByCssSelector("[role=gridcell]:nth-child(1)").getVisibleText().then(function (day) {81 assert.strictEqual(day.trim(), "26", "Dec 26");82 })83 .click()84 .end()85 .findByCssSelector(".d-date-picker-selected").getVisibleText().then(function (day) {86 assert.strictEqual(day.trim(), "26");87 }).end()88 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")89 .getVisibleText().then(function (month) {90 assert.strictEqual(month, "December", "selected month");91 })92 .end()93 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")94 .getVisibleText().then(function (year) {95 assert.strictEqual(year, "1999", "selected year");96 })97 .end()98 .findById("value").getVisibleText().then(function (value) {99 assert.strictEqual(value, "1999-12-26");100 }).end();101 },102 "next month": function () {103 return this.remote104 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 1, 1);")105 .findByCssSelector("[role=row]:last-child [role=gridcell]:last-child")106 .getVisibleText().then(function (day) {107 assert.strictEqual(day.trim(), "5", "Feb 5");108 })109 .click()110 .end()111 .findByCssSelector(".d-date-picker-selected").getVisibleText().then(function (day) {112 assert.strictEqual(day.trim(), "5");113 }).end()114 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")115 .getVisibleText().then(function (month) {116 assert.strictEqual(month, "February", "selected month");117 })118 .end()119 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")120 .getVisibleText().then(function (year) {121 assert.strictEqual(year, "2000", "selected year");122 })123 .end()124 .findById("value").getVisibleText().then(function (value) {125 assert.strictEqual(value, "2000-02-05");126 }).end();127 }128 },129 "month picker": {130 "click currently selected month": function () {131 return this.remote132 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 2, 1);")133 // Open the month view.134 .findByCssSelector(".d-day-picker .d-date-picker-header .d-date-picker-button:nth-child(2)")135 .click().end()136 .sleep(500)137 .findByCssSelector(".d-month-picker").isDisplayed().then(function (displayed) {138 assert.isTrue(displayed, "month picker displayed");139 }).end()140 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {141 assert.isFalse(displayed, "day picker hidden");142 }).end()143 .findAllByCssSelector(".d-month-picker [role=gridcell]").getVisibleText()144 .then(function (months) {145 assert.strictEqual(months.length, 12, "# of cells");146 assert.strictEqual(months[0], "Jan", "first cell");147 assert.strictEqual(months[11], "Dec", "last cell");148 }).end()149 // Try clicking currently selected month.150 .findByCssSelector(".d-month-picker .d-date-picker-selected")151 .getVisibleText().then(function (month) {152 assert.strictEqual(month, "Feb");153 })154 .click()155 .end()156 .sleep(500)157 .findByCssSelector(".d-month-picker").isDisplayed().then(function (displayed) {158 assert.isFalse(displayed, "month picker hidden");159 }).end()160 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {161 assert.isTrue(displayed, "day picker displayed");162 }).end()163 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")164 .getVisibleText().then(function (month) {165 assert.strictEqual(month, "February", "selected month");166 })167 .end()168 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")169 .getVisibleText().then(function (year) {170 assert.strictEqual(year, "2000", "selected year");171 })172 .end();173 },174 "select first month": function () {175 // Reopen month picker and click first month.176 return this.remote177 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 2, 1);")178 .findByCssSelector(".d-day-picker .d-date-picker-header .d-date-picker-button:nth-child(2)")179 .click().end()180 .sleep(500)181 .findByCssSelector(".d-month-picker").isDisplayed().then(function (displayed) {182 assert.isTrue(displayed, "month picker displayed");183 }).end()184 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {185 assert.isFalse(displayed, "day picker hidden");186 }).end()187 .findByCssSelector(".d-month-picker [role=gridcell]")188 .getVisibleText().then(function (month) {189 assert.strictEqual(month, "Jan");190 })191 .click()192 .end()193 .sleep(500)194 .findByCssSelector(".d-month-picker").isDisplayed().then(function (displayed) {195 assert.isFalse(displayed, "month picker hidden");196 }).end()197 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {198 assert.isTrue(displayed, "day picker displayed");199 }).end()200 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")201 .getVisibleText().then(function (month) {202 assert.strictEqual(month, "January", "selected month");203 })204 .end()205 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")206 .getVisibleText().then(function (year) {207 assert.strictEqual(year, "2000", "selected year");208 })209 .end();210 },211 "select last month": function () {212 // Reopen month picker and click last month.213 return this.remote214 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 2, 1);")215 .findByCssSelector(".d-day-picker .d-date-picker-header .d-date-picker-button:nth-child(2)")216 .click().end()217 .sleep(500)218 .findByCssSelector(".d-month-picker").isDisplayed().then(function (displayed) {219 assert.isTrue(displayed, "month picker displayed");220 }).end()221 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {222 assert.isFalse(displayed, "day picker hidden");223 }).end()224 .findByCssSelector(".d-month-picker [role=row]:last-child [role=gridcell]:last-child")225 .getVisibleText().then(function (month) {226 assert.strictEqual(month, "Dec");227 })228 .click()229 .end()230 .sleep(500)231 .findByCssSelector(".d-month-picker").isDisplayed().then(function (displayed) {232 assert.isFalse(displayed, "month picker hidden");233 }).end()234 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {235 assert.isTrue(displayed, "day picker displayed");236 }).end()237 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")238 .getVisibleText().then(function (month) {239 assert.strictEqual(month, "December", "selected month");240 })241 .end()242 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")243 .getVisibleText().then(function (year) {244 assert.strictEqual(year, "2000", "selected year");245 })246 .end();247 }248 },249 "year picker": {250 "click currently selected year": function () {251 return this.remote252 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 2, 1);")253 // Open the year view.254 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-date-picker-button:nth-child(2)")255 .click().end()256 .sleep(500)257 .findByCssSelector(".d-year-picker").isDisplayed().then(function (displayed) {258 assert.isTrue(displayed, "year picker displayed");259 }).end()260 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {261 assert.isFalse(displayed, "day picker hidden");262 }).end()263 .findAllByCssSelector(".d-year-picker [role=gridcell]").getVisibleText().then(function (years) {264 assert.strictEqual(years.length, 25, "# of cells");265 assert.strictEqual(years[0], "1988", "first cell");266 assert.strictEqual(years[24], "2012", "last cell");267 }).end()268 .findByCssSelector(".d-year-picker .d-label").getVisibleText().then(function (label) {269 assert.strictEqual(label, "1988-2012", "label");270 }).end()271 // Try clicking currently selected year.272 .findByCssSelector(".d-year-picker .d-date-picker-selected")273 .getVisibleText().then(function (year) {274 assert.strictEqual(year, "2000");275 })276 .click()277 .end()278 .sleep(500)279 .findByCssSelector(".d-year-picker").isDisplayed().then(function (displayed) {280 assert.isFalse(displayed, "year picker hidden");281 }).end()282 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {283 assert.isTrue(displayed, "day picker displayed");284 }).end()285 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")286 .getVisibleText().then(function (month) {287 assert.strictEqual(month, "February", "selected month");288 })289 .end()290 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")291 .getVisibleText().then(function (year) {292 assert.strictEqual(year, "2000", "selected year");293 })294 .end();295 },296 "navigation": function () {297 return this.remote298 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 2, 1);")299 // Open the year view.300 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-date-picker-button:nth-child(2)")301 .click().end()302 .sleep(500)303 .findByCssSelector(".d-year-picker").isDisplayed().then(function (displayed) {304 assert.isTrue(displayed, "year picker displayed");305 }).end()306 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {307 assert.isFalse(displayed, "day picker hidden");308 }).end()309 // Advance 25 years.310 .findByCssSelector(".d-year-picker .d-date-picker-footer .d-date-picker-button:nth-child(3)")311 .click().end()312 .sleep(500)313 .findByCssSelector(".d-year-picker").isDisplayed().then(function (displayed) {314 assert.isTrue(displayed, "year picker still displayed");315 }).end()316 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {317 assert.isFalse(displayed, "day picker still hidden");318 }).end()319 .findAllByCssSelector(".d-year-picker [role=gridcell]").getVisibleText().then(function (years) {320 assert.strictEqual(years.length, 25, "# of cells");321 assert.strictEqual(years[0], "2013", "first cell");322 assert.strictEqual(years[24], "2037", "last cell");323 }).end()324 .findByCssSelector(".d-year-picker .d-label").getVisibleText().then(function (label) {325 assert.strictEqual(label, "2013-2037", "label");326 }).end()327 // Go back 50 years.328 .findByCssSelector(".d-year-picker .d-date-picker-footer .d-date-picker-button:nth-child(1)")329 .click().click().end()330 .sleep(500)331 .findByCssSelector(".d-year-picker").isDisplayed().then(function (displayed) {332 assert.isTrue(displayed, "year picker still displayed #2");333 }).end()334 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {335 assert.isFalse(displayed, "day picker still hidden #2");336 }).end()337 .findAllByCssSelector(".d-year-picker [role=gridcell]").getVisibleText().then(function (years) {338 assert.strictEqual(years.length, 25, "# of cells");339 assert.strictEqual(years[0], "1963", "first cell");340 assert.strictEqual(years[24], "1987", "last cell");341 }).end()342 .findByCssSelector(".d-year-picker .d-label").getVisibleText().then(function (label) {343 assert.strictEqual(label, "1963-1987", "label");344 }).end()345 // Close by clicking first year.346 .findByCssSelector(".d-year-picker [role=gridcell]")347 .getVisibleText().then(function (year) {348 assert.strictEqual(year, "1963", "first cell (again)");349 })350 .click()351 .end()352 .sleep(500)353 .findByCssSelector(".d-year-picker").isDisplayed().then(function (displayed) {354 assert.isFalse(displayed, "year picker hidden");355 }).end()356 .findByCssSelector(".d-day-picker").isDisplayed().then(function (displayed) {357 assert.isTrue(displayed, "day picker displayed");358 }).end()359 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")360 .getVisibleText().then(function (month) {361 assert.strictEqual(month, "February", "selected month");362 })363 .end()364 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")365 .getVisibleText().then(function (year) {366 assert.strictEqual(year, "1963", "selected year");367 })368 .end();369 }370 },371 "external buttons": {372 "today button": function () {373 var today = DateTime.local();374 return this.remote375 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 2, 1);")376 .findByCssSelector(".-d-datepicker-today-button").click().end()377 .sleep(500)378 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")379 .getVisibleText().then(function (month) {380 var currentMonth = today.toLocaleString({month: "long"});381 assert.strictEqual(month, currentMonth, "current month");382 }).end()383 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")384 .getVisibleText().then(function (year) {385 var currentYear = "" + today.year;386 assert.strictEqual(year, currentYear, "current year");387 }).end();388 },389 "clear button": function () {390 return this.remote391 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 2, 1);")392 .findByCssSelector("[role=row]:nth-child(3) [role=gridcell]:nth-child(4)").click().end()393 .findByCssSelector("#value").getVisibleText().then(function (text) {394 assert.strictEqual(text, "2000-02-09", "after selecting value");395 }).end()396 .findByCssSelector(".-d-datepicker-clear-button").click().end()397 .sleep(500)398 .findByCssSelector("#value").getVisibleText().then(function (text) {399 assert.strictEqual(text, "", "after clearing value");400 }).end();401 }402 },403 "keyboard": {404 before: function () {405 var remote = this.remote;406 if (remote.environmentType.brokenSendKeys || !remote.environmentType.nativeEvents) {407 return this.skip("no keyboard support");408 }409 },410 tests: {411 "arrows and selection": function () {412 return this.remote413 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 1, 22);")414 .findById("before").click().end()415 .pressKeys(keys.TAB) // Press TAB -> DatePicker416 .getActiveElement().getVisibleText().then(function (text) {417 assert.strictEqual(text, "22", "initial focus");418 }).end()419 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")420 .getVisibleText().then(function (month) {421 assert.strictEqual(month, "January", "selected month");422 })423 .end()424 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")425 .getVisibleText().then(function (year) {426 assert.strictEqual(year, "2000", "selected year");427 })428 .end()429 .pressKeys(keys.ARROW_RIGHT)430 .getActiveElement().getVisibleText().then(function (text) {431 assert.strictEqual(text, "23", "right arrow (loops to next row)");432 }).end()433 .pressKeys(keys.ARROW_DOWN)434 .getActiveElement().getVisibleText().then(function (text) {435 assert.strictEqual(text, "30", "down arrow");436 }).end()437 .pressKeys(keys.ARROW_DOWN)438 .getActiveElement().getVisibleText().then(function (text) {439 assert.strictEqual(text, "6", "arrow down to next month");440 }).end()441 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")442 .getVisibleText().then(function (month) {443 assert.strictEqual(month, "February", "selected month");444 })445 .end()446 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")447 .getVisibleText().then(function (year) {448 assert.strictEqual(year, "2000", "selected year");449 })450 .end()451 .pressKeys(keys.ARROW_LEFT)452 .getActiveElement().getVisibleText().then(function (text) {453 assert.strictEqual(text, "5", "arrow left");454 }).end()455 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")456 .getVisibleText().then(function (month) {457 assert.strictEqual(month, "February", "selected month");458 })459 .end()460 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")461 .getVisibleText().then(function (year) {462 assert.strictEqual(year, "2000", "selected year");463 })464 .end()465 .pressKeys(keys.ARROW_UP)466 .getActiveElement().getVisibleText().then(function (text) {467 assert.strictEqual(text, "29", "arrow up to previous month");468 }).end()469 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")470 .getVisibleText().then(function (month) {471 assert.strictEqual(month, "January", "selected month");472 })473 .end()474 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")475 .getVisibleText().then(function (year) {476 assert.strictEqual(year, "2000", "selected year");477 })478 .end()479 .pressKeys(keys.ENTER)480 .findByCssSelector(".d-date-picker-selected").getVisibleText().then(function (day) {481 assert.strictEqual(day, "29");482 }).end()483 .findById("value").getVisibleText().then(function (value) {484 assert.strictEqual(value, "2000-01-29");485 }).end();486 },487 "home and end": function () {488 return this.remote489 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 1, 15);")490 .findById("before").click().end()491 .pressKeys(keys.TAB) // Press TAB -> DatePicker492 .getActiveElement().getVisibleText().then(function (text) {493 assert.strictEqual(text, "15", "initial focus");494 }).end()495 .pressKeys(keys.HOME)496 .getActiveElement().getVisibleText().then(function (text) {497 assert.strictEqual(text, "1", "home");498 }).end()499 .pressKeys(keys.END)500 .getActiveElement().getVisibleText().then(function (text) {501 assert.strictEqual(text, "31", "end");502 }).end();503 },504 "page down / page up": function () {505 if (this.remote.environmentType.browserName.toLowerCase() === "internet explorer") {506 // Since evt.shiftKey not set (although it works when manually tested).507 return this.skip("shift-page-down getting treated as page-down, spurious test failure");508 }509 return this.remote510 .execute("document.getElementById('calendar1').value = DateTime.local(2000, 1, 31);")511 .findById("before").click().end()512 .pressKeys(keys.TAB) // Press TAB -> DatePicker513 .getActiveElement().getVisibleText().then(function (text) {514 assert.strictEqual(text, "31", "initial focus Jan 15");515 }).end()516 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")517 .getVisibleText().then(function (month) {518 assert.strictEqual(month, "January", "initial selected month");519 })520 .end()521 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")522 .getVisibleText().then(function (year) {523 assert.strictEqual(year, "2000", "initial selected year");524 })525 .end()526 .pressKeys(keys.PAGE_DOWN)527 .getActiveElement().getVisibleText().then(function (text) {528 // There's no Feb 30, so page-down should go from Jan 31 to Feb 29.529 assert.strictEqual(text, "29", "page down to next month");530 }).end()531 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")532 .getVisibleText().then(function (month) {533 assert.strictEqual(month, "February", "selected month after page-down");534 })535 .end()536 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")537 .getVisibleText().then(function (year) {538 assert.strictEqual(year, "2000", "selected year after page-down");539 })540 .end()541 .pressKeys(keys.PAGE_UP)542 .getActiveElement().getVisibleText().then(function (text) {543 assert.strictEqual(text, "29", "page up to previous month");544 }).end()545 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")546 .getVisibleText().then(function (month) {547 assert.strictEqual(month, "January", "selected month after page-up");548 })549 .end()550 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")551 .getVisibleText().then(function (year) {552 assert.strictEqual(year, "2000", "selected year after page-up");553 })554 .end()555 .pressKeys(keys.SHIFT + keys.PAGE_DOWN)556 .pressKeys(keys.SHIFT)557 .getActiveElement().getVisibleText().then(function (text) {558 assert.strictEqual(text, "29", "shift-page down to next year");559 }).end()560 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")561 .getVisibleText().then(function (month) {562 assert.strictEqual(month, "January", "selected month after shift-page-down");563 })564 .end()565 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")566 .getVisibleText().then(function (year) {567 assert.strictEqual(year, "2001", "selected year after shift-page-down");568 })569 .end()570 .pressKeys(keys.SHIFT + keys.PAGE_UP)571 .pressKeys(keys.SHIFT)572 .getActiveElement().getVisibleText().then(function (text) {573 assert.strictEqual(text, "29", "shift-page up to previous year");574 }).end()575 .findByCssSelector(".d-day-picker .d-date-picker-header .d-label")576 .getVisibleText().then(function (month) {577 assert.strictEqual(month, "January", "selected month after shift-page-up");578 })579 .end()580 .findByCssSelector(".d-day-picker .d-date-picker-footer .d-label")581 .getVisibleText().then(function (year) {582 assert.strictEqual(year, "2000", "selected year after shift-page-up");583 })584 .end();585 }586 }587 }588 }589 });...
KeyNav.js
Source:KeyNav.js
...85 assert.deepEqual(value, [-1, 0, -1, -1, -1, -1, -1, -1], "tabindexes #2");86 });87 },88 "grid arrow navigation": function () {89 return this.remote.execute("grid.focus();")90 .execute("return document.activeElement.textContent")91 .then(function (value) {92 assert.strictEqual(value, "apple", "focus");93 })94 .pressKeys(keys.ARROW_DOWN)95 .execute("return document.activeElement.textContent")96 .then(function (value) {97 assert.strictEqual(value, "pear", "down");98 })99 .pressKeys(keys.ARROW_RIGHT)100 .execute("return document.activeElement.textContent")101 .then(function (value) {102 assert.strictEqual(value, "grapes", "right");103 })104 .pressKeys(keys.ARROW_LEFT)105 .execute("return document.activeElement.textContent")106 .then(function (value) {107 assert.strictEqual(value, "pear", "left");108 })109 .pressKeys(keys.ARROW_UP)110 .execute("return document.activeElement.textContent")111 .then(function (value) {112 assert.strictEqual(value, "apple", "up");113 })114 .pressKeys(keys.END)115 .execute("return document.activeElement.textContent")116 .then(function (value) {117 assert.strictEqual(value, "raspberry", "end");118 })119 .pressKeys(keys.HOME)120 .execute("return document.activeElement.textContent")121 .then(function (value) {122 assert.strictEqual(value, "apple", "home");123 });124 },125 "grid letter search": function () {126 return this.remote.execute("grid.focus();")127 .execute("return document.activeElement.textContent")128 .then(function (value) {129 assert.strictEqual(value, "apple", "focus");130 })131 .pressKeys("b") // search for word starting with b132 .execute("return document.activeElement.textContent")133 .then(function (value) {134 assert.strictEqual(value, "banana", "b");135 })136 .sleep(100) // clear timer so next keystroke taken as new search rather than continuation137 .pressKeys("b") // search for next word starting with b138 .execute("return document.activeElement.textContent")139 .then(function (value) {140 assert.strictEqual(value, "blueberry", "b again");141 })142 .sleep(100) // clear timer so next keystroke taken as new search rather than continuation143 .pressKeys("r") // search for word starting with r144 .execute("return document.activeElement.textContent")145 .then(function (value) {146 assert.strictEqual(value, "raspberry", "right");147 })148 .sleep(100) // clear timer so next keystroke taken as new search rather than continuation149 .pressKeys("bl") // search for word starting with bl150 .execute("return document.activeElement.textContent")151 .then(function (value) {152 assert.strictEqual(value, "blueberry", "bl");153 });154 },155 "activationTracker integration": function () {156 return this.remote157 .findById("keyboardInput").click().end()158 .pressKeys(keys.TAB)159 .execute("return document.activeElement.activateLog.join(', ')").then(function (value) {160 // Test for bug where child would get a delite-deactivated event immediately after the161 // delite-activated event.162 assert.strictEqual(value, "activated");163 });164 },165 "multi char search": function () {166 return this.remote167 .findById("keyboardInput")168 .click()169 .pressKeys(keys.TAB)170 .execute("return document.activeElement.textContent")171 .then(function (value) {172 assert.strictEqual(value, "Alabama", "navigated to Alabama");173 })174 .execute("return clicks.textContent")175 .then(function (value) {176 assert.strictEqual(value, "0", "no click events yet");177 })178 .sleep(1000)179 // Now that 1000ms have elapsed, the search should be canceled, and each space typed180 // should generate an a11y click event181 .pressKeys(" ")182 .execute("return clicks.textContent")183 .then(function (value) {184 assert.strictEqual(value, "3", "space key outside of search causes click events");185 })186 // And make sure that we can search to somewhere else187 .pressKeys("n")188 .execute("return document.activeElement.textContent")189 .then(function (value) {190 assert.strictEqual(value, "New Hampshire", "n");191 });192 },193 "setup key handler for space": function () {194 return this.remote195 .findByCssSelector("#keyboardInputCust")196 .click()197 .end()198 .pressKeys(keys.TAB)// enters KeyNav, navigates to <input>199 .execute("return document.activeElement.id;")200 .then(function (value) {201 assert.strictEqual(value, "myInput", "focused on <input>");202 })203 .pressKeys("a b c") // sending space to input shouldn't call registered handler for space key204 .execute("return myInput.value")205 .then(function (value) {206 assert.strictEqual(value, "a b c", "typing into input");207 })208 .execute("return spaces.textContent")209 .then(function (value) {210 assert.strictEqual(value, "0", "<input>: no handler callbacks");211 })212 .pressKeys(keys.ARROW_DOWN) // navigate to <button>213 .execute("return document.activeElement.id;")214 .then(function (value) {215 assert.strictEqual(value, "myButton", "focused on <button>");216 })217 .pressKeys(" ") // sending space to <button> shouldn't call registered handler for space key218 .pressKeys(keys.ENTER) // likewise for enter key219 .execute("return spaces.textContent")220 .then(function (value) {221 assert.strictEqual(value, "0", "<button>: no handler callbacks");222 })223 .execute("return myButton.innerHTML")224 .then(function (value) {225 assert.strictEqual(value, "2 clicks", "keyboard clicks on <button>");226 })227 .pressKeys(keys.ARROW_DOWN) // navigate to <a>228 .execute("return document.activeElement.id;")229 .then(function (value) {230 assert.strictEqual(value, "myAnchor", "focused on <a>");231 })232 .pressKeys(keys.ENTER) // sending Enter to <a> should click it, not be processed by KeyNav233 .execute("return myAnchor.innerHTML")234 .then(function (value) {235 assert.strictEqual(value, "1 click", "keyboard click on <a>");236 })237 .execute("return spaces.textContent")238 .then(function (value) {239 assert.strictEqual(value, "0", "<a>: no handler callbacks");240 })241 .pressKeys(keys.ARROW_DOWN)242 .pressKeys("new m")// similarly, handler shouldn't be called for space within a searchstring243 .execute("return document.activeElement.textContent")244 .then(function (value) {245 assert.strictEqual(value, "New Mexico", "new m");246 })247 .execute("return spaces.textContent")248 .then(function (value) {249 assert.strictEqual(value, "0", "no handler callback after 'new m' search");250 })251 .sleep(1000)252 // Now that 1000ms have elapsed, the search should be canceled, and each space typed253 // should call the handler registered for the space key.254 .pressKeys(" ")255 .execute("return spaces.textContent")256 .then(function (value) {257 assert.strictEqual(value, "3", "space key outside of search calls registered handler");258 });259 },260 "embedded form controls": function () {261 return this.remote.execute("testContainer2.focus();")262 .execute("return document.activeElement.textContent")263 .then(function (value) {264 assert.strictEqual(value, "four", "focus");265 })266 .pressKeys(keys.ARROW_DOWN)267 .execute("return document.activeElement.id")268 .then(function (value) {269 assert.strictEqual(value, "input", "down");270 })271 .pressKeys("fo") // should write to the <input> rather than letter searching to <div>four</div>272 .execute("return document.activeElement.id")273 .then(function (value) {274 assert.strictEqual(value, "input", "still input1");275 })276 .execute("return document.activeElement.value")277 .then(function (value) {278 assert.strictEqual(value, "fo", "input works");279 })280 .pressKeys(keys.ARROW_LEFT + "l")281 .execute("return document.activeElement.value")282 .then(function (value) {283 assert.strictEqual(value, "flo", "left arrow worked");284 })285 .pressKeys(keys.ARROW_DOWN) // arrow down should exit the <input> and go to the next node286 .execute("return document.activeElement.textContent")287 .then(function (value) {288 assert.strictEqual(value, "five", "down to five");289 })290 .pressKeys(keys.ARROW_DOWN) // arrow down again to checkbox291 .execute("return document.activeElement.id")292 .then(function (value) {293 assert.strictEqual(value, "checkbox", "down to checkbox");294 })295 .pressKeys(" ") // check the checkbox using keyboard296 .execute("return document.activeElement.checked")297 .then(function (value) {298 assert.strictEqual(value, true, "checked the checkbox");299 })300 .pressKeys("f") // keyboard search should go to "four" node301 .execute("return document.activeElement.textContent")302 .then(function (value) {303 assert.strictEqual(value, "four", "keyboard searched to 'four'");304 });305 },306 "combobox": {307 keyboard: function () {308 return this.remote.execute("document.body.scrollTop = 10000; combobox.focus();")309 .pressKeys(keys.ARROW_DOWN)310 .execute("return document.activeElement.id")311 .then(function (value) {312 assert.strictEqual(value, "combobox", "down arrow leaves focus on combobox");313 })314 .findByCssSelector("#combobox_dropdown .d-active-descendant")315 .getVisibleText().then(function (value) {316 assert.strictEqual(value, "Alaska", "navigated to Alaska");317 })318 .end()319 .findById("combobox_dropdown_previous_node")320 .getVisibleText().then(function (value) {321 assert.strictEqual(value, "Alabama", "got navigation event (prev)");322 })323 .end()324 .findById("combobox_dropdown_current_node")325 .getVisibleText().then(function (value) {326 assert.strictEqual(value, "Alaska", "got navigation event (cur)");327 })328 .end();329 },330 mouse: function () {331 var environmentType = this.remote.environmentType;332 if (environmentType.brokenMouseEvents) {333 // https://github.com/theintern/leadfoot/issues/17334 return this.skip("click() doesn't generate mousedown, so navigation won't work");335 }336 if (environmentType.platformName === "iOS" || environmentType.platform === "ANDROID") {337 // https://github.com/theintern/leadfoot/issues/61338 return this.skip("click() doesn't generate touchstart, so navigation won't work");339 }340 return this.remote.execute("document.body.scrollTop = 10000; combobox.focus();")341 .findById("unfocusable_NJ")342 .click()343 .end()344 .findByCssSelector("#combobox_dropdown .d-active-descendant")345 .getVisibleText().then(function (value) {346 assert.strictEqual(value, "New Jersey", "navigated to New Jersey");347 })348 .end()349 .findById("combobox_dropdown_current_node")350 .getVisibleText().then(function (value) {351 assert.strictEqual(value, "New Jersey", "got navigation event (cur)");352 })353 .end();354 }...
activationTracker.js
Source:activationTracker.js
1define([], function () {2 var registerSuite = intern.getPlugin("interface.object").registerSuite;3 var assert = intern.getPlugin("chai").assert;4 var keys = requirejs.nodeRequire("@theintern/leadfoot/keys").default;5 var pollUntil = requirejs.nodeRequire("@theintern/leadfoot/helpers/pollUntil").default;6 registerSuite("activationTracker functional tests", {7 before: function () {8 return this.remote9 .get("delite/tests/functional/activationTracker.html")10 .then(pollUntil("return ready || null;", [], intern.config.WAIT_TIMEOUT, intern.config.POLL_INTERVAL));11 },12 beforeEach: function () {13 return this.remote.findById("clearButton")14 .click()15 .end()16 .sleep(100); // because the clear button clears things on a setTimeout()17 },18 tests: {19 "basic": function () {20 var environmentType = this.remote.environmentType;21 return this.remote22 .execute("return document.getElementById('activeStackChanges').value;").then(function (changes) {23 assert.strictEqual(changes, "0", "activeStack changes #0");24 })25 .findById("first").click().end()26 .execute("return document.getElementById('activeStackChanges').value;").then(function (changes) {27 assert.strictEqual(changes, "1", "activeStack changes #1");28 })29 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {30 assert.strictEqual(activeStack, "form, first", "activeStack #1");31 })32 .execute("return document.getElementById('log').value;").then(function (log) {33 assert.strictEqual(log.trim(), "form activated", "log #1");34 })35 .findById("second").click().end() // focus another simple input36 .execute("return document.getElementById('activeStackChanges').value;").then(function (changes) {37 assert.strictEqual(changes, "2", "activeStack changes #2");38 })39 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {40 assert.strictEqual(activeStack, "form, second", "activeStack #2");41 })42 .execute("return document.getElementById('log').value;").then(function (log) {43 // Since the deliteful/Form widget didn't leave the focus chain it44 // shouldn't have any more events besides the original.45 assert.strictEqual(log.trim(), "form activated", "log #2");46 })47 .findByCssSelector("#combobox input").click().end() // focus combobox48 .execute("return document.getElementById('activeStackChanges').value;").then(function (changes) {49 assert.strictEqual(changes, "3", "activeStack changes #3");50 })51 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {52 assert.strictEqual(activeStack, "form, fieldset1, combobox, input", "activeStack #3");53 })54 .execute("return document.getElementById('log').value;").then(function (log) {55 assert.strictEqual(log.trim(),56 "form activated\nfieldset1 activated\ncombobox activated", "log #3");57 })58 .findByCssSelector("#combobox input").click().end() // to check for dup notifications59 .execute("return document.getElementById('activeStackChanges').value;").then(function (changes) {60 assert.strictEqual(changes, "3", "activeStack changes #4");61 })62 .findByCssSelector("#editor div").click().end()63 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {64 assert.strictEqual(activeStack, "form, editor, div", "activeStack #4");65 })66 .execute("return document.getElementById('log').value;").then(function (log) {67 assert.strictEqual(log.trim(), "form activated\nfieldset1 activated\ncombobox activated\n" +68 "combobox deactivated\nfieldset1 deactivated\neditor activated", "log #4");69 })70 // clicking spinner buttons should activate the spinner, even71 // though there's no actual DOM focus event72 .findByCssSelector("fake-spinner .button").click().end()73 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {74 if (environmentType.brokenMouseEvents) {75 // click() doesn't generate pointerdown event on IE10+ and neither does76 // moveMouseTo().pressMouseButton(1).releaseMouseButton(1).77 // see https://github.com/theintern/leadfoot/issues/17.78 return;79 }80 if (environmentType.platformName === "iOS" || environmentType.platform === "ANDROID") {81 // click() doesn't generate touchstart on iOS or android, see82 // https://github.com/theintern/leadfoot/issues/6183 return;84 }85 assert.strictEqual(activeStack, "form, fieldset2, spinner, span", "activeStack #5");86 });87 },88 "keyboard": function () {89 if (this.remote.environmentType.brokenSendKeys || !this.remote.environmentType.nativeEvents) {90 return this.skip("no keyboard support");91 }92 return this.remote93 .findById("first").click().end()94 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {95 assert.strictEqual(activeStack, "form, first", "activeStack #1");96 })97 .execute("return document.getElementById('log').value;").then(function (log) {98 assert.strictEqual(log.trim(), "form activated", "log #1");99 })100 .pressKeys(keys.TAB) // focus another simple input101 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {102 assert.strictEqual(activeStack, "form, second", "activeStack #2");103 })104 .execute("return document.getElementById('log').value;").then(function (log) {105 // Since the deliteful/Form widget didn't leave the focus chain it106 // shouldn't have any more events besides the original.107 assert.strictEqual(log.trim(), "form activated", "log #2");108 })109 .pressKeys(keys.TAB) // focus combobox110 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {111 assert.strictEqual(activeStack, "form, fieldset1, combobox, input", "activeStack #3");112 })113 .execute("return document.getElementById('log').value;").then(function (log) {114 assert.strictEqual(log.trim(),115 "form activated\nfieldset1 activated\ncombobox activated", "log #3");116 })117 .findById("combobox").click().end() // focus combobox again to check for duplicate notifications118 .execute("return document.getElementById('activeStackChanges').value;").then(function (changes) {119 assert.strictEqual(changes, "3", "activeStack changes #1");120 });121 },122 "dropdown": function () {123 var environmentType = this.remote.environmentType;124 return this.remote125 .execute("document.getElementById('dropdownButton').scrollIntoView();")126 .findById("dropdownButton").click().end()127 .findByCssSelector("fake-popup")128 .isDisplayed().then(function (visible) {129 assert(visible, "popup visible");130 })131 .click()132 .end()133 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {134 if (environmentType.brokenMouseEvents) {135 // click() doesn't generate pointerdown event on IE10+ and neither does136 // moveMouseTo().pressMouseButton(1).releaseMouseButton(1).137 // see https://github.com/theintern/leadfoot/issues/17.138 return;139 }140 if (environmentType.platformName === "iOS" || environmentType.platform === "ANDROID") {141 // click() doesn't generate touchstart on iOS, see142 // https://github.com/theintern/leadfoot/issues/61143 return;144 }145 assert.strictEqual(activeStack, "form, dropdownButton, popup", "activeStack #1");146 });147 },148 "hover": function () {149 // note: check specifically for iOS to workaround https://github.com/theintern/leadfoot/issues/62150 if (!this.remote.environmentType.mouseEnabled || this.remote.environmentType.platformName === "iOS") {151 return this.skip("touch device, skipping mouse specific test");152 }153 return this.remote154 .execute("document.getElementById('hoverDropdownButton').scrollIntoView();")155 .findByCssSelector("#hoverDropdownButton span:nth-child(1)").moveMouseTo().end()156 .sleep(1000)157 .execute("return document.getElementById('hoverDropdownButton').log").then(function (log) {158 assert.deepEqual(log, [159 "this delite-hover-activated",160 "child 1 delite-hover-activated"161 ], "button hovered");162 })163 .findById("hoverPopup").isDisplayed().then(function (visible) {164 assert(visible, "popup visible");165 }).end()166 .findByCssSelector("#hoverDropdownButton span:nth-child(2)").moveMouseTo().end()167 .sleep(1000)168 .execute("return document.getElementById('hoverDropdownButton').log").then(function (log) {169 assert.deepEqual(log, [170 "this delite-hover-activated",171 "child 1 delite-hover-activated",172 "child 1 delite-hover-deactivated",173 "child 2 delite-hover-activated"174 ], "checking delite-hover-activated doesn't bubble to root node");175 })176 .findById("hoverPopup").isDisplayed().then(function (visible) {177 assert(visible, "popup still visible");178 }).moveMouseTo().end()179 .sleep(1000)180 .execute("return document.getElementById('hoverDropdownButton').log").then(function (log) {181 assert.deepEqual(log, [182 "this delite-hover-activated",183 "child 1 delite-hover-activated",184 "child 1 delite-hover-deactivated",185 "child 2 delite-hover-activated",186 "child 2 delite-hover-deactivated",187 "popup delite-hover-activated"188 ], "hover stack works with popups");189 })190 .findById("clearButton").moveMouseTo().end()191 .sleep(1000)192 .execute("return document.getElementById('hoverDropdownButton').log").then(function (log) {193 assert.deepEqual(log, [194 "this delite-hover-activated",195 "child 1 delite-hover-activated",196 "child 1 delite-hover-deactivated",197 "child 2 delite-hover-activated",198 "child 2 delite-hover-deactivated",199 "popup delite-hover-activated",200 "popup delite-hover-deactivated",201 "this delite-hover-deactivated"202 ], "everything unhovered");203 });204 },205 "detaching hovered/active nodes": function () {206 return this.remote207 // Test that detaching active (and hovered) node removes it from the activeStack/hoverStack.208 .findById("removeMe").click().end()209 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {210 assert.strictEqual(activeStack, "grandparent, parent", "activeStack #1");211 })212 .execute("return document.getElementById('hoverStack').value;").then(function (activeStack) {213 assert.strictEqual(activeStack, "grandparent, parent", "hoverStack #1");214 })215 // Test that detaching parent of active (and hovered) node216 // removes it from the activeStack/hoverStack.217 .findById("removeMyParent").click().end()218 .execute("return document.getElementById('activeStack').value;").then(function (activeStack) {219 assert.strictEqual(activeStack, "grandparent", "activeStack #2");220 })221 .execute("return document.getElementById('hoverStack').value;").then(function (hoverStack) {222 assert.strictEqual(hoverStack, "grandparent", "hoverStack #2");223 });224 }225 }226 });...
popup.js
Source:popup.js
1define([], function () {2 var registerSuite = intern.getPlugin("interface.object").registerSuite;3 var assert = intern.getPlugin("chai").assert;4 var pollUntil = requirejs.nodeRequire("@theintern/leadfoot/helpers/pollUntil").default;5 var tests = {6 "repeat move off screen": function () {7 // In old version of code, calling moveOffScreen twice would cause an exception.8 // No actual assert here, we're relying on the browser throwing an exception to webdriver.9 return this.remote10 .execute("glblPopupUtil.moveOffScreen(document.getElementById('spw'));")11 .execute("glblPopupUtil.moveOffScreen(document.getElementById('spw'));");12 },13 "open popup on the edge of another widget": function () {14 return this.remote15 .findById("choiceDropDownButton").click().end()16 .findById("choiceDropDown").isDisplayed().then(function (displayed) {17 assert.isTrue(displayed, "choiceDropDown popup visible");18 }).end();19 },20 "close popup on the edge of another widget": function () {21 return this.remote22 .findById("stub-for-blurring").click().end()23 .sleep(500)24 .findById("choiceDropDown").isDisplayed().then(function (displayed) {25 assert.isFalse(displayed, "choiceDropDown popup not visible");26 }).end();27 },28 "centered popup": function () {29 return this.remote30 .findById("showCenteredDialogButton").click().end()31 .findById("centeredDialog").isDisplayed().then(function (displayed) {32 assert.isTrue(displayed, "centeredDialog popup visible");33 }).end()34 .findByCssSelector("d-dialog-underlay").isDisplayed().then(function (displayed) {35 assert.isTrue(displayed, "d-dialog-underlay visible");36 }).end()37 .findByCssSelector("#centeredDialog .ok-button").click().end() // close popup38 .findById("centeredDialog").isDisplayed().then(function (displayed) {39 assert.isFalse(displayed, "centeredDialog popup hidden");40 }).end()41 .findByCssSelector("d-dialog-underlay").isDisplayed().then(function (displayed) {42 // Underlay should be either detached or display:none. Currently it's display:none.43 assert.isFalse(displayed, "d-dialog-underlay hidden");44 }).end();45 },46 "nested": function () {47 return this.remote48 .findById("showNestedMenuButton").click().end()49 .sleep(500)50 .findById("nestedOpener").isDisplayed().then(function (displayed) {51 assert.isTrue(displayed, "nestedOpener popup wasn't visible");52 }).end()53 .execute("nestedOpener._openPopup(nestedChoice1)")54 .sleep(500)55 .findById("nestedChoice1").isDisplayed().then(function (displayed) {56 assert.isTrue(displayed, "nestedChoice1 popup wasn't visible");57 }).end()58 .findById("stub-for-blurring").click().end()59 .sleep(500)60 .findById("nestedChoice1").isDisplayed().then(function (displayed) {61 assert.isFalse(displayed, "nestedChoice1 popup hidden");62 }).end()63 .findById("nestedOpener").isDisplayed().then(function (displayed) {64 assert.isFalse(displayed, "nestedOpener popup hidden");65 }).end();66 },67 "no hidden tab stops": function () {68 return this.remote69 .execute("return tabOrder()[0].id").then(function (value) {70 assert.strictEqual(value, "inputAtStart");71 })72 .execute("return tabOrder()[tabOrder().length - 1].id").then(function (value) {73 assert.strictEqual(value, "inputAtEnd");74 });75 },76 "x/y placement": function () {77 return this.remote78 .execute("window.scrollTo(0, 0);") // avoid spurious error due to scroll79 .findById("openAt1015Button").click().end()80 // note: "return xyPopup.getBoundingClientRect();" doesn't work on IE; webdriver bug.81 .execute("var pos = xyPopup.getBoundingClientRect(); return {left: pos.left, top: pos.top};")82 .then(function (pos) {83 assert.strictEqual(pos.left, 10, "popup x coord " + JSON.stringify(pos));84 assert.strictEqual(pos.top, 15, "popup y coord " + JSON.stringify(pos));85 })86 .findById("xyPopup").click().end();87 },88 "popup-after-position event": {89 before: function () {90 return this.remote91 .execute(function () { require("delite/scrollIntoView")(tooltipDropDownButton) })92 .findById("tooltipDropDownButton").click().end()93 .execute("return tooltip.popupAfterPositionEvents.length").then(function (value) {94 assert.strictEqual(value, 1, "popupAfterPositionEvents.length");95 })96 .findById("stub-for-blurring").click().end();97 },98 around: function () {99 return this.remote100 .execute("return tooltip.popupAfterPositionEvents.length").then(function (value) {101 assert.strictEqual(value, 1, "popupAfterPositionEvents.length");102 })103 .execute("return tooltip.popupAfterPositionEvents.pop();").then(function (final) {104 assert.strictEqual(final.corner, "TL", "popup corner");105 assert.strictEqual(final.aroundCorner, "BL", "aroundNode corner");106 })107 .execute("return tooltipDropDownButton._openRet").then(function (value) {108 assert.strictEqual(value.corner, "TL", "popup corner");109 assert.strictEqual(value.aroundCorner, "BL", "popup aroundCorner");110 });111 },112 at: function () {113 return this.remote114 .execute("tooltip.popupAfterPositionEvents = [];")115 .findById("openTooltipAt1015Button").click().end()116 .execute("return tooltip.popupAfterPositionEvents.length").then(function (value) {117 assert.strictEqual(value, 1, "popupAfterPositionEvents.length");118 })119 .execute("return tooltip.popupAfterPositionEvents.pop()").then(function (value) {120 // The final call to orient(), as well as the call to onOpen(), should have been for the121 // final position of the node, where corner == TL and aroundCorner == BR122 // (they are caddy-corner).123 assert.strictEqual(value.corner, "TL", "popup corner");124 assert.strictEqual(value.aroundCorner, "BR", "aroundNode corner");125 })126 .execute("return openRet;").then(function (value) {127 assert.strictEqual(value.corner, "TL", "popup corner");128 assert.strictEqual(value.aroundCorner, "BR", "aroundNode corner");129 })130 .findById("tooltip").click().end();131 }132 },133 "scrollbar": {134 at: function () {135 return this.remote136 .execute("openLotsOfChoicesPopupButton.scrollIntoView();")137 .findById("openLotsOfChoicesPopupButton").click().end()138 .execute(139 "return [getComputedStyle(lotsOfChoicesPopup).height.replace(/px/, ''), " +140 "document.documentElement.clientHeight, " +141 "getComputedStyle(lotsOfChoicesPopup.parentNode).height.replace(/px/, '')];")142 .then(function (value) {143 assert.isTrue(value[0] < value[1], "lotsOfChoicesPopup popup not shorter than viewport " +144 value[0] + ", " + value[1]);145 })146 .findById("lotsOfChoicesPopup").click().isDisplayed().then(function (visible) {147 assert.isFalse(visible, "lotsOfChoicesPopup hidden");148 })149 .end();150 },151 around: function () {152 return this.remote153 .execute("tallChoiceDropDownButton.scrollIntoView();")154 .findById("tallChoiceDropDownButton").click().end()155 .execute("return [getComputedStyle(tallChoiceDropDown).height.replace(/px/, ''), " +156 "document.documentElement.clientHeight, " +157 "getComputedStyle(tallChoiceDropDown.parentNode).height.replace(/px/, '')];")158 .then(function (value) {159 assert.isTrue(value[0] < value[1], "tallChoiceDropDown popup not shorter than viewport");160 });161 }162 },163 "change events": {164 "change event from dropdown closes dropdown": function () {165 return this.remote166 .findById("showDatePickerButton").click().end()167 .findById("myDatePicker")168 .isDisplayed().then(function (displayed) {169 assert.isTrue(displayed, "DatePicker popup visible");170 })171 .click()172 .isDisplayed().then(function (displayed) {173 assert.isFalse(displayed, "DatePicker popup hidden");174 })175 .end();176 },177 "change event from dropdown descendant doesn't close dropdown": function () {178 return this.remote179 .findById("showSimpleDialogButton").click().end()180 .findById("simpleDialog")181 .isDisplayed().then(function (displayed) {182 assert.isTrue(displayed, "Dialog visible");183 })184 .findByCssSelector("#simpleDialog input:nth-of-type(1)").type("hello").end()185 .findByCssSelector("#simpleDialog input:nth-of-type(2)").click().end()186 .isDisplayed().then(function (displayed) {187 assert.isTrue(displayed, "Dialog still visible");188 })189 .end();190 }191 }192 };193 registerSuite("popup functional tests", {194 "popup attached to body": {195 before: function () {196 return this.remote197 .get("delite/tests/functional/popup.html?sibling=false")198 .then(pollUntil("return ready || null;", [], intern.config.WAIT_TIMEOUT, intern.config.POLL_INTERVAL))199 .setFindTimeout(5000);200 },201 afterEach: function () {202 // Try to make sure that all popups are closed.203 return this.remote204 .findById("stub-for-blurring").click().end();205 },206 tests: tests207 },208 "popup sibling of anchor node": {209 before: function () {210 return this.remote211 .get("delite/tests/functional/popup.html")212 .then(pollUntil("return ready || null;", [], intern.config.WAIT_TIMEOUT, intern.config.POLL_INTERVAL))213 .setFindTimeout(5000);214 },215 afterEach: function () {216 // Try to make sure that all popups are closed.217 return this.remote218 .findById("stub-for-blurring").click().end();219 },220 tests: tests221 }222 });...
on.js
Source:on.js
...27 "keydown, keyup": function () {28 if (this.remote.environmentType.brokenSendKeys || !this.remote.environmentType.nativeEvents) {29 return this.skip("no keyboard support");30 }31 return this.remote.execute("document.getElementById('key').focus();")32 .pressKeys(keys.ARROW_DOWN)33 .execute("return keydown_log.value;").then(function (log) {34 assert.strictEqual(log, "ArrowDown");35 })36 .execute("return keyup_log.value;").then(function (log) {37 assert.strictEqual(log, "ArrowDown");38 })39 .pressKeys(keys.TAB)40 .execute("return keydown_log.value;").then(function (log) {41 assert.strictEqual(log, "Tab");42 })43 .execute("return keyup_log.value;").then(function (log) {44 assert.strictEqual(log, "Tab");45 })46 .pressKeys(keys.ESCAPE)47 .execute("return keydown_log.value;").then(function (log) {48 assert.strictEqual(log, "Escape");49 })50 .pressKeys(" ")51 .execute("return keydown_log.value;").then(function (log) {52 assert.strictEqual(log, "Spacebar");53 })54 .execute("return keyup_log.value;").then(function (log) {55 assert.strictEqual(log, "Spacebar");56 })57 .pressKeys(keys.BACKSPACE)58 .execute("return keydown_log.value;").then(function (log) {59 assert.strictEqual(log, "Backspace");60 })61 .pressKeys(keys.ENTER)62 .execute("return keydown_log.value;").then(function (log) {63 assert.strictEqual(log, "Enter");64 })65 .pressKeys("a")66 .execute("return keydown_log.value;").then(function (log) {67 assert.strictEqual(log, "a");68 })69 .pressKeys("z")70 .execute("return keyup_log.value;").then(function (log) {71 assert.strictEqual(log, "z");72 })73 .pressKeys("A")74 .execute("return keydown_log.value;").then(function (log) {75 assert.strictEqual(log, "A");76 })77 .pressKeys("Z")78 .execute("return keydown_log.value;").then(function (log) {79 assert.strictEqual(log, "Z");80 })81 .pressKeys("5")82 .execute("return keyup_log.value;").then(function (log) {83 assert.strictEqual(log, "5");84 });85 },86 "keypress": function () {87 if (this.remote.environmentType.brokenSendKeys || !this.remote.environmentType.nativeEvents) {88 return this.skip("no keyboard support");89 }90 if (this.remote.environmentType.browserName === "chrome") {91 return this.skip("chrome webdriver doesn't generate keypress events when typing");92 }93 return this.remote.execute("keypress.focus();")94 .pressKeys("a")95 .execute("return keypress_log.value;").then(function (log) {96 assert.strictEqual(log, "a");97 })98 .pressKeys("z")99 .execute("return keypress_log.value;").then(function (log) {100 assert.strictEqual(log, "z");101 })102 .pressKeys("A")103 .execute("return keypress_log.value;").then(function (log) {104 assert.strictEqual(log, "A");105 })106 .pressKeys("Z")107 .execute("return keypress_log.value;").then(function (log) {...
DojoParser.js
Source:DojoParser.js
1define([], function () {2 var registerSuite = intern.getPlugin("interface.object").registerSuite;3 var assert = intern.getPlugin("chai").assert;4 var pollUntil = requirejs.nodeRequire("@theintern/leadfoot/helpers/pollUntil").default;5 registerSuite("delite/dojo parser compatibility test", {6 before: function () {7 return this.remote8 .get("delite/tests/functional/DojoParser.html")9 .then(pollUntil("return (readyDijit && readyDelite) || null;", [],10 intern.config.WAIT_TIMEOUT, intern.config.POLL_INTERVAL));11 },12 tests: {13 "Dijit widgets": {14 "declarative dijit widget": function () {15 return this.remote16 .execute("return dijitRegistry.byId('dijitcalendardeclarative').id").then(function (value) {17 assert.strictEqual(value, "dijitcalendardeclarative", "declarative dijit widget exists");18 });19 },20 "programmatic dijit widget": function () {21 return this.remote22 .execute("return dijitRegistry.byId('dijitprogrammaticid').id").then(function (value) {23 assert.strictEqual(value, "dijitprogrammaticid", "programmatic dijit widget exists");24 });25 },26 "all dijit widgets exist": function () {27 return this.remote28 .execute("return dojoWidgetsLength").then(function (value) {29 assert.strictEqual(value, 2, "2 dijit widgets exist");30 });31 }32 },33 "Custom elements": {34 "programmatic custom element": function () {35 return this.remote36 .execute("return typeof(document.getElementById('simplewidget').initializeRendering)")37 .then(function (value) {38 assert.strictEqual(value, "function", "simplewidget is a delite custom element");39 });40 },41 "declarative custom element": function () {42 return this.remote43 .execute("return typeof(document.getElementById('declarativecustomelement').initializeRendering)")44 .then(function (value) {45 assert.strictEqual(value, "function",46 "declarativecustomelement is a delite custom element");47 });48 }49 }50 }51 });...
FormValueWidget.js
Source:FormValueWidget.js
...9 .then(pollUntil("return ready || null;", [], intern.config.WAIT_TIMEOUT, intern.config.POLL_INTERVAL));10 },11 tests: {12 creation: function () {13 return this.remote.execute("return spinner1.value").then(function (value) {14 assert.equal(value, 5, "original value"); // taken from the embedded <input>15 }).execute("return spinner1.name").then(function (name) {16 assert.strictEqual(name, "spinner1_name", "name");17 });18 },19 reset: function () {20 return this.remote.findByCssSelector("my-spinner .increment")21 .click()22 .end()23 .execute("return spinner1.value").then(function (value) {24 assert.equal(value, 6, "incremented value"); // use equal() to ignore string vs. number diff25 })26 .findByCssSelector("#resetB")27 .click()...
register.js
Source:register.js
1define([], function () {2 var registerSuite = intern.getPlugin("interface.object").registerSuite;3 var assert = intern.getPlugin("chai").assert;4 var pollUntil = requirejs.nodeRequire("@theintern/leadfoot/helpers/pollUntil").default;5 registerSuite("register functional tests", {6 before: function () {7 return this.remote8 .get("delite/tests/functional/register.html")9 .then(pollUntil("return ready || null;", [], intern.config.WAIT_TIMEOUT, intern.config.POLL_INTERVAL));10 },11 tests: {12 "custom element created": function () {13 return this.remote14 .execute(function () {15 return document.getElementById("myCustomElement")._constructorCalled;16 }).then(function (value) {17 assert(value, "custom element created");18 })19 .execute(function () {20 return document.getElementById("myCustomElement")._connectedCallbackCalled;21 }).then(function (value) {22 assert(value, "custom element attached");23 });24 }25 }26 });...
Using AI Code Generation
1var webdriver = require('selenium-webdriver');2var remote = require('selenium-webdriver/remote');3var driver = new webdriver.Builder()4 .forBrowser('safari')5 .build();6driver.getSession().then(function(session) {7 driver.execute('mobile: executeCommand', {8 args: {bundleId: 'com.apple.mobilesafari'}9 });10});11driver.getSession().then(function(session) {12 driver.execute('mobile: executeCommand', {13 args: {bundleId: 'com.apple.mobilesafari'}14 });15});16driver.getSession().then(function(session) {17 driver.execute('mobile: executeCommand', {18 args: {bundleId: 'com.apple.mobilesafari'}19 });20});21driver.getSession().then(function(session) {22 driver.execute('mobile: executeCommand', {23 args: {appPath: '/Users/username/Downloads/MyApp.app'}24 });25});26driver.getSession().then(function(session) {27 driver.execute('mobile: executeCommand', {28 args: {bundleId: 'com.apple.mobilesafari'}29 });30});31driver.getSession().then(function(session) {32 driver.execute('mobile: executeCommand', {33 args: {bundleId: 'com.apple.mobilesafari'}34 });35});36driver.getSession().then(function(session) {37 driver.execute('mobile: executeCommand', {38 args: {bundleId: 'com.apple.mobilesafari'}39 });40});41driver.getSession().then(function(session) {42 driver.execute('mobile: executeCommand', {43 args: {}44 });45});46driver.getSession().then(function(session) {47 driver.execute('mobile: executeCommand', {48 args: {action: 'search'}49 });50});51driver.getSession().then(function(session) {52 driver.execute('mobile: executeCommand', {53 args: {action: 'search', actionKey: 'search'}54 });55});56driver.getSession().then(function(session)
Using AI Code Generation
1var webdriverio = require('webdriverio');2var options = {3 desiredCapabilities: {4 }5};6 .remote(options)7 .init()8 .end();9client.then(function() {10 console.log('done');11}).catch(function(err) {12 console.log(err);13});14client.execute('mobile: swipe', {direction: 'down'}).then(function() {15 console.log('done');16}).catch(function(err) {17 console.log(err);18});19Error: Protocol error (mobile: swipe): POST /wd/hub/session/7b2a4c4c-4e93-4c3f-a5c5-5e8b5a5f0b7d/execute/sync did not match a known command20client.execute(function() {21 var target = UIATarget.localTarget();22 var app = target.frontMostApp();23 var window = app.mainWindow();24 window.swipeDown();25});26client.execute('mobile: swipe', {direction: 'down', element: ''}).then(function() {27 console.log('done');28}).catch(function(err) {29 console.log(err);30});31Error: Protocol error (mobile: swipe): POST /wd/hub/session/7b2a4c4c-4e93-4c3f-a5c5-5e8b5a5f0b7d/execute/sync did not match a known command32client.execute(function() {33 var target = UIATarget.localTarget();34 var app = target.frontMostApp();35 var window = app.mainWindow();36 window.swipeDown();37 return window;
Using AI Code Generation
1const webdriverio = require('webdriverio');2const options = {3 desiredCapabilities: {4 }5};6const client = webdriverio.remote(options);7 .init()8 .execute('mobile: alert', {action: 'accept'})9 .end();10const webdriverio = require('webdriverio');11const options = {12 desiredCapabilities: {13 }14};15const client = webdriverio.remote(options);16 .init()17 .execute('mobile: alert', {action: 'accept'})18 .end();19const webdriverio = require('webdriverio');20const options = {21 desiredCapabilities: {22 }23};24const client = webdriverio.remote(options);25 .init()26 .execute('mobile: alert', {action: 'accept'})27 .end();28const webdriverio = require('webdriverio');29const options = {30 desiredCapabilities: {31 }32};33const client = webdriverio.remote(options);34 .init()35 .execute('mobile: alert', {action: 'accept'})36 .end();37const webdriverio = require('webdriverio');38const options = {
Using AI Code Generation
1describe('Test', function() {2 it('should work', function() {3 .execute(function() {4 return 'Hello';5 })6 .then(function(result) {7 });8 });9});
Using AI Code Generation
1const wd = require('wd');2const chai = require('chai');3const chaiAsPromised = require('chai-as-promised');4chai.use(chaiAsPromised);5chai.should();6chaiAsPromised.transferPromiseness = wd.transferPromiseness;
Using AI Code Generation
1const wd = require('wd');2const { XCUITestDriver } = require('appium-xcuitest-driver');3const caps = {4};5 .init(caps)6 .then(() => {7 return driver.execute('mobile: executeCommand', {8 args: {9 },10 });11 })12 .then((res) => {13 console.log(res);14 })15 .catch((err) => {16 console.log(err);17 });18const wd = require('wd');19const { XCUITestDriver } = require('appium-xcuitest-driver');20const caps = {21};22 .init(caps)23 .then(() => {24 return driver.execute('mobile: executeCommand', {25 args: {26 },27 });28 })29 .then((res) => {30 console.log(res);31 })32 .catch((err) => {33 console.log(err);34 });35const wd = require('wd');36const { XCUITestDriver } = require('appium-xcuitest-driver');37const caps = {
Using AI Code Generation
1describe('Test to execute remote commands', function() {2 it('should execute remote commands', function() {3 .execute('mobile: alert', {action: 'accept'});4 });5});6describe('Test to execute remote commands', function() {7 it('should execute remote commands', function() {8 .execute('mobile: alert', {action: 'accept'});9 });10});11describe('Test to execute remote commands', function() {12 it('should execute remote commands', function() {13 .execute('mobile: alert', {action: 'accept'});14 });15});16describe('Test to execute remote commands', function() {17 it('should execute remote commands', function() {18 .execute('mobile: currentActivity', {});19 });20});21describe('Test to execute remote commands', function() {22 it('should execute remote commands', function() {23 .execute('mobile: currentActivity', {});24 });25});26describe('Test to execute remote commands', function() {27 it('should execute remote commands', function() {28 .execute('mobile: currentActivity', {});29 });30});31describe('Test to execute remote commands', function() {32 it('should execute remote commands', function() {33 .execute('mobile: currentActivity', {});34 });35});36describe('Test to execute remote
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!!