9433cfb9创建于 2025年12月31日历史提交
jest.setTimeout(50000)

const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
const isIOS = platformInfo.startsWith('ios')
const isMP = platformInfo.startsWith('mp')
const isWeb = platformInfo.startsWith('web')
const isHarmony = platformInfo.startsWith('harmony')
const isAndroid = platformInfo.startsWith('android')
const isAppWebView = process.env.UNI_AUTOMATOR_APP_WEBVIEW == 'true'

describe('component-native-input', () => {
  if (isAppWebView) {
  	it('app 与 web 存在差异, webview 不进行截图', () => {
      expect(1).toBe(1)
    })
  	return
  }

  let page;
  beforeAll(async () => {
    page = await program.reLaunch('/pages/component/input/input')
    await page.waitFor('view');
  });

  // 测试焦点及键盘弹起
  if(!isMP) {
    it('focus', async () => {
      const input = await page.$('#uni-input-focus');
      expect(await input.attribute('focus')).toBe("true")
      // expect(await page.data("inputFocusKeyBoardChangeValue")).toBe(true)
      await page.setData({
        focus: false,
      })
      expect(await input.attribute('focus')).toBe("false")
      // await page.waitFor(1000)
      // expect(await page.data("inputFocusKeyBoardChangeValue")).toBe(false)
      // await page.setData({
      //   focus: true,
      // })
      // expect(await input.attribute('focus')).toBe(true)
      // await page.waitFor(1000)
      // expect(await page.data("inputFocusKeyBoardChangeValue")).toBe(true)
      // await page.setData({
      //   focus: false,
      // })
      // expect(await input.attribute('focus')).toBe(false)
      // await page.waitFor(1000)
      // expect(await page.data("inputFocusKeyBoardChangeValue")).toBe(false)
      // await page.waitFor(1000)
    });
  }
  // web ios 自动化测试时无法触发事件,手动测试可以
  if (isHarmony || isAndroid) {
    it("focus and blur event", async () => {
      if (isHarmony) {
        await program.tap({ x: 100, y: 50 })
        await page.waitFor(1000);
      }
      page.setData({
        triggerFocus: false,
        triggerBlur: false,
      })
      let pageData = await page.data()
      expect(pageData.triggerFocus).toBe(false)
      expect(pageData.triggerBlur).toBe(false)
      await page.callMethod('triggerFocusOrBlur')
      await page.waitFor(500)
      pageData = await page.data()
      expect(pageData.triggerFocus).toBe(true)
      expect(pageData.triggerBlur).toBe(false)
      await page.callMethod('triggerFocusOrBlur')
      await page.waitFor(500)
      pageData = await page.data()
      expect(pageData.triggerFocus).toBe(false)
      expect(pageData.triggerBlur).toBe(true)
      if (isHarmony) {
        await program.tap({ x: 100, y: 50 })
        await page.waitFor(1000);
      }
    });
  }

  // 测试修改value属性
  it("value", async () => {
    const input = await page.$('#uni-input-default');
    expect(await input.property('value')).toEqual("hello uni-app x")
  })

  //测试input的类型
  it("type", async () => {
    const text = await page.$('#uni-input-type-text');
    const number = await page.$('#uni-input-type-number');
    const digit = await page.$('#uni-input-type-digit');
    const tel = await page.$('#uni-input-type-tel');
    expect(await text.attribute('type')).toEqual("text")
    expect(await number.attribute('type')).toEqual("number")
    expect(await digit.attribute('type')).toEqual("digit")
    expect(await tel.attribute('type')).toEqual("tel")
  })

  //  测试密码属性
  // it("password", async () => {
  //   const input = await page.$('.uni-input-password');
  //   expect(await input.attribute('password')).toBe(true)
  //   await page.setData({
  //     inputPassword: false,
  //     inputPasswordValue: "inputPasswordValue"
  //   })
  //   expect(await input.attribute('password')).toBe(false)
  //   await page.waitFor(500)
  //   await page.setData({
  //     inputPassword: true
  //   })
  // })
  // 测试placeholder
  // it("placeholder", async () => {
  //   const placeholder1 = await page.$('.uni-input-placeholder1');
  //   expect(await placeholder1.attribute("placeholder-style")).toMatchObject({
  //     "color": "red"
  //   })
  //   expect(await placeholder1.attribute("placeholder")).toEqual("占位符文字颜色为红色")
  //   await page.setData({
  //     inputPlaceHolderStyle: "color:#CC00CC",
  //   })
  //   expect(await placeholder1.attribute("placeholder-style")).toMatchObject({
  //     "color": "#CC00CC"
  //   })

  //   await page.setData({
  //     inputPlaceHolderStyle: "color:#CC19CC;background-color:#00b1c0",
  //   })
  //   expect(await placeholder1.attribute("placeholder-style")).toMatchObject({
  //     "color": "#CC19CC",
  //     "backgroundColor": "#00b1c0"
  //   })

  //   await page.setData({
  //     inputPlaceHolderStyle: "color:#CC19CC;background-color:#00b1c0;text-align:center;font-size:44px;font-weight:900",
  //   })
  //   expect(await placeholder1.attribute("placeholder-style")).toEqual({
  //     "backgroundColor": "#00b1c0",
  //     "color": "#CC19CC",
  //     "fontSize": "44px",
  //     "fontWeight": "900",
  //     "textAlign": "center"
  //   })

  //   const placeholder2 = await page.$('.uni-input-placeholder2');
  //   expect(await placeholder2.attribute("placeholder-class")).toMatchObject({
  //     "backgroundColor": "#008000"
  //   })
  //   await page.setData({
  //     inputPlaceHolderClass: "uni-input-placeholder-class-ts",
  //   })
  //   expect(await placeholder2.attribute("placeholder-class")).toMatchObject({
  //     "backgroundColor": "#FFA500"
  //   })
  //   expect(await placeholder2.attribute("placeholder")).toEqual("占位符背景色为绿色")
  // })

  if(isMP) {
    it("disable", async () => {
      const input = await page.$('#uni-input-disable');
      expect(await input.property("disabled")).toBe(true)
    })
    // 如下属性在自动化测试通过property、attribute + confirmType、confirm-type均无法获取
    // it("confirm-type", async () => {
    //   expect(await (await page.$('#uni-input-confirm-send')).attribute("confirm-type")).toEqual("send")
    //   expect(await (await page.$('#uni-input-confirm-search')).property("confirmType")).toEqual("search")
    //   expect(await (await page.$('#uni-input-confirm-next')).property("confirmType")).toEqual("next")
    //   expect(await (await page.$('#uni-input-confirm-go')).property("confirmType")).toEqual("go")
    //   expect(await (await page.$('#uni-input-confirm-done')).property("confirmType")).toEqual("done")
    // })
    // it("cursor-color", async () => {
    //   await page.setData({
    //     cursor_color: "red",
    //   })
    //   await page.waitFor(500)
    //   expect(await (await page.$('#uni-input-cursor-color')).property("cursor-color")).toBe("red")
    // })
  } else {
    it("disable", async () => {
      const input = await page.$('#uni-input-disable');
      expect(await input.attribute("disabled")).toBe("true")
    })
    it("confirm-type", async () => {
      expect(await (await page.$('#uni-input-confirm-send')).attribute("confirmType")).toEqual("send")
      expect(await (await page.$('#uni-input-confirm-search')).attribute("confirmType")).toEqual("search")
      expect(await (await page.$('#uni-input-confirm-next')).attribute("confirmType")).toEqual("next")
      expect(await (await page.$('#uni-input-confirm-go')).attribute("confirmType")).toEqual("go")
      expect(await (await page.$('#uni-input-confirm-done')).attribute("confirmType")).toEqual("done")
    })
    it("cursor-color", async () => {
      await page.setData({
        cursor_color: "red",
      })
      await page.waitFor(500)
      expect(await (await page.$('#uni-input-cursor-color')).attribute("cursor-color")).toBe("red")
    })
  }


  // it("maxlength", async () => {
  //   const input = await page.$('.uni-input-maxlength');
  //   await page.setData({
  //     inputMaxLengthValue: "uni-input-maxlength"
  //   })
  //   await page.waitFor(500)
  // })


  it("maxlength", async () => {
    const input = await page.$('#uni-input-maxlength');
    let str = "";
    for (let i = 0; i < 200; i++) {
      str += `${i}`
    }
    await page.setData({
      inputMaxLengthValue: str
    })
    let length = (await input.value()).length
    expect(length).toBe(10)
    await page.setData({
      inputMaxLengthValue: ""
    })
  })

  it("password and value order", async () => {
    const input = await page.$('#uni-input-password');
    let length = (await input.value()).length
    expect(length).toBe(6)
    await page.setData({
      inputPasswordValue: ""
    })
  })

  it("keyboard height changed after page back", async () => {
    if (isWeb || isMP || isIOS) {
      expect(1).toBe(1)
      return
    }
    // TODO: harmony 页面隐藏时需要隐藏键盘
    if (isHarmony) {
      await program.tap({ x: 100, y: 50 })
      await page.waitFor(1000);
    }
    await program.navigateTo("/pages/API/navigator/new-page/new-page-3")
    await page.waitFor(2000);
    await program.navigateBack()
    await page.waitFor(1000);
    await page.setData({
      focusedForKeyboardHeightChangeTest: true
    })
    await page.waitFor(2000);

    const keyboardHeight = await page.data('keyboardHeight');
    expect(keyboardHeight).toBeGreaterThan(25)
    //reset
    await page.setData({
      focusedForKeyboardHeightChangeTest: false,
      keyboardHeight: 0
    })
    if (isHarmony) {
      await program.tap({ x: 100, y: 50 })
      await page.waitFor(1000);
    }
  })

  it("afterAllTestScreenshot", async () => {
    const image = await program.screenshot({
      fullPage: true
    })
    expect(image).toSaveImageSnapshot()
  })
  it('both set modelValue and value', async () => {
    const input2 = await page.$('#both-model-value');
    expect(await input2.value()).toEqual("123")
  })
});