webdriver.spec.ts 2.4 KB
Newer Older
1 2 3 4 5 6 7
/**
 * Wechaty - Wechat for Bot. Connecting ChatBots
 *
 * Licenst: ISC
 * https://github.com/wechaty/wechaty
 *
 */
8
import { test }   from 'ava'
9

10 11 12 13
// import {
//   Browser
//   , By
// }                 from 'selenium-webdriver'
14 15

import {
16 17 18
  Bridge,
  Browser,
  PuppetWeb,
19
} from '../src/puppet-web/'
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
20

21
/**
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
22
 * WHY force to use SERIAL mode
23
 *
24 25
 * serial here is because we are checking browser pids inside test.
 * if 2 tests run parallel in the same process,
Huan (李卓桓)'s avatar
doc  
Huan (李卓桓) 已提交
26
 * there will have race conditions for the conflict of `getBrowserPids()`
27
 */
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
28
test.serial('WebDriver process create & quit test', async t => {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
  try {
    const browser = new Browser()
    t.truthy(browser, 'should instanciate a browser')

    await browser.init()
    t.pass('should be inited successful')
    await browser.open()
    t.pass('should open successful')

    let pids = await browser.getBrowserPidList()
    t.truthy(pids.length > 0, 'should exist browser process after b.open()')

    await browser.quit()
    t.pass('quited')

    pids = await browser.getBrowserPidList()
    t.is(pids.length, 0, 'no driver process after quit')
  } catch (err) {
    t.fail(err.message || err)
  }
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
49 50
})

51
test.serial('WebDriver smoke testing', async t => {
52 53
  const browser = new Browser()
  t.truthy(browser, 'Browser instnace')
54

55 56
  const mockPuppet = <PuppetWeb>{browser: browser}
  const bridge = new Bridge(mockPuppet, 8788)
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
57
  t.truthy(bridge, 'Bridge instnace')
58

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
59
  let driver // for help function `execute`
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
60

61
  const m = (await browser.getBrowserPidList()).length
62
  t.is(m, 0, 'should has no browser process before get()')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
63

64
  driver = await browser.driver.init()
65
  t.truthy(driver, 'should init driver success')
66

67 68
  const injectio = bridge.getInjectio()
  t.truthy(injectio.length > 10, 'should got injectio script')
69

70 71
  await driver.get('https://wx.qq.com/')
  t.pass('should open wx.qq.com')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
72

73
  const n = (await browser.getBrowserPidList()).length
74
  t.truthy(n > 0, 'should exist browser process after get()')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
75

76 77
  const retAdd = await driverExecute('return 1+1')
  t.is(retAdd, 2, 'should return 2 for execute 1+1 in browser')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
78

79 80 81
  const retInject = await driverExecute(injectio, 8788)
  t.truthy(retInject, 'should return a object contains status of inject operation')
  t.is(retInject.code, 200, 'should got code 200 for a success wechaty inject')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
82

83
  await browser.driver.quit()
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
84 85 86 87

  return

  //////////////////////////////////
88
  function driverExecute(arg1: any, arg2?: any) {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
89 90 91
    return driver.executeScript.apply(driver, arguments)
  }
})