elements.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { By } from 'selenium-webdriver'
  2. import fs from 'fs'
  3. import { expect } from 'chai'
  4. import { Condition } from 'selenium-webdriver'
  5. export async function getActionButtons (webdriver) {
  6. return await webdriver.findElement(By.id('contentActions')).findElements(By.tagName('button'))
  7. }
  8. export function takeScreenshotOnFailure (test, webdriver) {
  9. if (test.state === 'failed') {
  10. const title = test.fullTitle();
  11. console.log(`Test failed, taking screenshot: ${title}`);
  12. takeScreenshot(webdriver, title);
  13. }
  14. }
  15. export function takeScreenshot (webdriver, title) {
  16. return webdriver.takeScreenshot().then((img) => {
  17. fs.mkdirSync('screenshots', { recursive: true });
  18. fs.writeFileSync('screenshots/' + title + '.png', img, 'base64')
  19. })
  20. }
  21. export async function getRootAndWait() {
  22. await webdriver.get(runner.baseUrl())
  23. await webdriver.wait(new Condition('wait for initial-marshal-complete', async function() {
  24. const body = await webdriver.findElement(By.tagName('body'))
  25. const attr = await body.getAttribute('initial-marshal-complete')
  26. if (attr == 'true') {
  27. return true
  28. } else {
  29. return false
  30. }
  31. }))
  32. }
  33. export async function requireExecutionDialogStatus (webdriver, expected) {
  34. // It seems that webdriver will not give us text if domStatus is hidden (which it will be until complete)
  35. await webdriver.executeScript('window.executionDialog.domExecutionDetails.hidden = false')
  36. await webdriver.wait(new Condition('wait for action to be running', async function () {
  37. const actual = await webdriver.executeScript('return window.executionDialog.domStatus.getText()')
  38. if (actual === expected) {
  39. return true
  40. } else {
  41. console.log('Waiting for domStatus text to be: ', expected, ', it is currently: ', actual)
  42. console.log(await webdriver.executeScript('return window.executionDialog.res'))
  43. return false
  44. }
  45. }))
  46. }
  47. export async function findExecutionDialog (webdriver) {
  48. return webdriver.findElement(By.id('execution-results-popup'))
  49. }
  50. export async function getActionButton (webdriver, title) {
  51. const buttons = await webdriver.findElements(By.css('[title="' + title + '"]'))
  52. expect(buttons).to.have.length(1)
  53. return buttons[0]
  54. }