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")
})
});