webdriver.spec.ts 2.3 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
    Bridge
  , Browser
18 19
  , PuppetWeb
} 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
 */
28
test.serial('WebDriver process create & quit test', async t => {
29 30
  const browser = new Browser()
  t.truthy(browser, 'should instanciate a browser')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
31

32
  await browser.init()
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
33
  t.pass('should be inited successful')
34
  await browser.open()
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
35
  t.pass('should open successful')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
36

37
  let pids = await browser.getBrowserPids()
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
38
  t.truthy(pids.length > 0, 'should exist browser process after b.open()')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
39

40
  await browser.quit()
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
41
  t.pass('quited')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
42

43
  pids = await browser.getBrowserPids()
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
44
  t.is(pids.length, 0, 'no driver process after quit')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
45 46
})

47
test.serial('WebDriver smoke testing', async t => {
48 49
  const browser = new Browser()
  t.truthy(browser, 'Browser instnace')
50

51 52
  const mockPuppet = <PuppetWeb>{browser: browser}
  const bridge = new Bridge(mockPuppet, 8788)
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
53
  t.truthy(bridge, 'Bridge instnace')
54

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

57
  const m = (await browser.getBrowserPids()).length
58
  t.is(m, 0, 'should has no browser process before get()')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
59

60
  driver = await browser.driver.init()
61
  t.truthy(driver, 'should init driver success')
62

63 64
  const injectio = bridge.getInjectio()
  t.truthy(injectio.length > 10, 'should got injectio script')
65

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

69
  const n = (await browser.getBrowserPids()).length
70
  t.truthy(n > 0, 'should exist browser process after get()')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
71

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

75 76 77
  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 (李卓桓) 已提交
78

79
  await browser.driver.quit()
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
80 81 82 83

  return

  //////////////////////////////////
84
  function driverExecute(arg1: any, arg2?: any) {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
85 86 87
    return driver.executeScript.apply(driver, arguments)
  }
})