picker-view.test.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
  2. const isAndroid = platformInfo.startsWith('android')
  3. const isIOS = platformInfo.startsWith('ios')
  4. const isMP = platformInfo.startsWith('mp')
  5. const isWeb = platformInfo.startsWith('web')
  6. const isHarmony = platformInfo.startsWith('harmony')
  7. const isAppWebView = process.env.UNI_AUTOMATOR_APP_WEBVIEW == 'true'
  8. const PAGE_PATH = '/pages/component/picker-view/picker-view'
  9. let page, pickerViewEl;
  10. describe('PickerView.uvue', () => {
  11. beforeAll(async () => {
  12. page = await program.reLaunch(PAGE_PATH)
  13. await page.waitFor('view')
  14. await page.callMethod('setEventCallbackNum', 0)
  15. pickerViewEl = await page.$('.picker-view')
  16. })
  17. afterEach(async () => {
  18. await page.callMethod('setEventCallbackNum', 0)
  19. })
  20. async function toScreenshot(imgName) {
  21. const image = await program.screenshot({
  22. fullPage: true
  23. });
  24. expect(image).toSaveImageSnapshot({
  25. customSnapshotIdentifier() {
  26. return imgName
  27. }
  28. })
  29. await page.waitFor(500);
  30. }
  31. it('value', async () => {
  32. await page.callMethod('setValue')
  33. await page.waitFor(1000)
  34. const newValue1 = await pickerViewEl.property('value')
  35. // TODO
  36. expect(newValue1.toString()).toEqual('0,1,30')
  37. // 仅在App端,setValue可触发change事件
  38. if (isAndroid || isIOS) {
  39. expect(await page.data('result')).toEqual([ 0, 1, 30 ])
  40. }
  41. await page.callMethod('setValue1')
  42. await page.waitFor(1000)
  43. const newValue2 = await pickerViewEl.property('value')
  44. // TODO
  45. expect(newValue2.toString()).toEqual('10,10,10')
  46. if (isAndroid || isIOS) {
  47. expect(await page.data('result')).toEqual([10, 10, 10])
  48. }
  49. })
  50. it('length', async () => {
  51. const els = await page.$$('.picker-view')
  52. expect(els.length).toBe(1)
  53. const els1 = await page.$$('.picker-view-column')
  54. expect(els1.length).toBe(3)
  55. })
  56. // indicatorStyle 属性在编译时被解析成了对象,在获取时和用户设置的值格式不一样 [object Object]
  57. if (!isHarmony) {
  58. it('indicator-style', async () => {
  59. const indicatorStyle = "height: 50px;border:#ff5500 solid 1px;background:rgba(182, 179, 255, 0.4);"
  60. await page.callMethod('setIndicatorStyle',true)
  61. await page.waitFor(500)
  62. expect(await pickerViewEl.attribute(isMP ? 'indicator-style' : 'indicatorStyle')).toBe(indicatorStyle)
  63. await toScreenshot('picker-view-indicator-style')
  64. //清空indicatorStyle
  65. await page.callMethod('setIndicatorStyle',false)
  66. })
  67. }
  68. if (isWeb || isMP) {
  69. // indicator-class、mask-style、mask-class 仅web和MP支持
  70. it('indicator-class', async () => {
  71. //设置indicator-class
  72. await page.callMethod('setIndicatorClass',true)
  73. expect(await pickerViewEl.attribute(isMP ? 'indicator-class': 'indicatorClass')).toBe("indicator-test")
  74. await toScreenshot('picker-view-web-indicator-class')
  75. //清空indicatorClass
  76. await page.callMethod('setIndicatorClass',false)
  77. })
  78. it('mask-style', async () => {
  79. const maskStyle = "background-image: linear-gradient(to bottom, #d8e5ff, rgba(216, 229, 255, 0));"
  80. // 设置mask-style
  81. await page.callMethod('setMaskStyle',true)
  82. expect(await pickerViewEl.attribute(isMP ? 'mask-style' : 'maskStyle')).toBe(maskStyle)
  83. await toScreenshot('picker-view-web-mask-style')
  84. })
  85. it('mask-class', async () => {
  86. // 设置mask-class
  87. await page.callMethod('setMaskClass',true)
  88. expect(await pickerViewEl.attribute(isMP ? 'mask-class' : 'maskClass')).toBe("mask-test")
  89. await toScreenshot('picker-view-web-mask-class')
  90. })
  91. return
  92. }
  93. if (!isAppWebView && !isMP && !isHarmony) {
  94. it('mask-top-bottom-style', async () => {
  95. // mask-top-style、mask-bottom-style仅App端支持
  96. const linearToTop = "background-image: linear-gradient(to bottom, #f4ff73, rgba(216, 229, 255, 0));"
  97. const linearToBottom = "background-image: linear-gradient(to top, #f4ff73, rgba(216, 229, 255, 0));"
  98. await page.callMethod('setMaskTopStyle',true)
  99. await page.callMethod('setMaskBottomStyle',true)
  100. await page.waitFor(500)
  101. expect(await pickerViewEl.attribute('mask-top-style')).toBe(linearToTop)
  102. expect(await pickerViewEl.attribute('mask-bottom-style')).toBe(linearToBottom)
  103. await page.waitFor(2000)
  104. await toScreenshot('picker-view-app-mask-top-bottom-style')
  105. })
  106. it('reopen-picker-view-page', async () => {
  107. page = await program.switchTab('/pages/tabBar/component')
  108. await page.waitFor(500)
  109. page = await program.navigateTo(PAGE_PATH)
  110. await page.waitFor(500)
  111. const {
  112. year,
  113. month,
  114. day
  115. } = await page.data()
  116. expect(year).toEqual(2018)
  117. expect(month).toEqual(1)
  118. expect(day).toEqual(12)
  119. })
  120. it('trigger UniPickerViewChangeEvent', async () => {
  121. await page.callMethod('setValue')
  122. await page.waitFor(1500)
  123. const eventCallbackNum = await page.callMethod('getEventCallbackNum')
  124. // 年月日滚动三次,测试 e.tagName +1 和 e.type+2,正常为9
  125. expect(eventCallbackNum).toBe(9)
  126. })
  127. }
  128. })