describe('component-native-textarea', () => { const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase() const isAndroid = platformInfo.startsWith('android') const isIOS = platformInfo.startsWith('ios') const isMP = platformInfo.startsWith('mp') const isHarmony = platformInfo.startsWith('harmony') const isWeb = platformInfo.startsWith('web') const isDom2 = process.env.UNI_APP_X_DOM2 === "true" if (isMP) { it('skip', () => { expect(1).toBe(1) }) return } let page; let textarea; beforeAll(async () => { page = await program.reLaunch("/pages/component/textarea/textarea"); await page.waitFor(3000); textarea = await page.$('.uni-textarea'); await page.waitFor(1000); }); async function setPageData(newData) { return await page.setData({ data: newData }); } beforeEach(async () => { await setPageData({ jest_result: false }) }); if (!isMP) { it("input event should triggered", async () => { const options = {} if (isHarmony) { const textareaRect = await page.data('data.textareaRect'); options.x = textareaRect.x + textareaRect.width / 2.0; options.y = textareaRect.y + textareaRect.height - (isDom2 ? 20 : 10); } if (isWeb) { await program.keyboardInput({text: '1', ...options}) } else { await program.device.keyboard.input('1', options) } await page.waitFor(2000) expect(await page.data('data.jest_result')).toBe(true) const image = await program.screenshot({ fullPage: true }); expect(image).toSaveImageSnapshot(); }) // TODO 微信小程序自动化测试textarea focus属性取到的是数字 it('focus', async () => { expect(await textarea.attribute("focus")).toBe("true") await setPageData({ focus_boolean: false }) await page.waitFor(500) expect(await textarea.attribute("focus")).toBe("false") }); it('trigger change event', async () => { const changeValue = await page.data('data.changeValue'); expect(changeValue).not.toBe("") if (isAndroid) { await program.adbCommand("input keyevent KEYCODE_DEL") await page.waitFor(2000) } }) if (isAndroid) { it('focus-keyboard-height', async () => { await setPageData({ focus_boolean: true }) await page.waitFor(500) let res = await page.data('data.jest_result'); expect(res).toBe(true) await setPageData({ focus_boolean: false }) await page.waitFor(500) }) } // 微信小程序text-area不支持cursor-color属性 it("cursor-color", async () => { await setPageData({ cursor_color: "transparent" }) await page.waitFor(500) expect(await textarea.attribute("cursor-color")).toBe("transparent") }) // 微信小程序自动化测试无法获取inputmode属性 if (isWeb) { it("inputmode", async () => { const inputmodeEnum = await page.data("data.inputmode_enum") for (var i = 0; i < inputmodeEnum.length; i++) { var x = inputmodeEnum[i] var selected = x['value'] - 1 if (i == inputmodeEnum.length - 1) { selected = i } await page.callMethod("radio_change_inputmode_enum", selected); await page.waitFor(500) expect(await textarea.attribute("inputmode")).toEqual(x['name']) await page.waitFor(500) } }) } } // TODO: dom2 harmony 暂时不支持 auto-height if (!(isDom2 && isIOS)) { it("auto-height", async () => { await setPageData({ default_value: "" }) await page.waitFor(500) await setPageData({ auto_height_boolean: true }) await page.waitFor(500) let textareaSize = await textarea.size() let textareaHeight = textareaSize.height expect(textareaHeight).toBeLessThanOrEqual(150) if (!isMP) { // TODO 微信小程序auto-height由true切换成false时不会影响text-area高度 await setPageData({ default_value: "1\n2\n3\n4\n5\n6", auto_height_boolean: false }) await page.waitFor(500) textareaSize = await textarea.size() textareaHeight = textareaSize.height expect(textareaHeight).toEqual((isDom2 && isHarmony) ? 202 : 200) } }) } it("flex 1 height exception", async () => { const bottomTextarea = await page.$('#textarea-height-exception'); var { height } = await bottomTextarea.size() expect(height).toEqual(isDom2 && !isAndroid ? 152: 150) }) it("maxlength", async () => { const input = await page.$('#textarea-instance-maxlength'); let str = ""; for (let i = 0; i < 200; i++) { str += `${i}` } await setPageData({ textareaMaxLengthValue: str }) let length = (await input.value()).length expect(length).toBe(10) await setPageData({ textareaMaxLengthValue: "" }) }) it('both set modelValue and value', async () => { const textarea2 = await page.$('#both-model-value'); expect(await textarea2.value()).toEqual("123") }) if (isIOS) { it('test-iOS-width', async () => { await setPageData({ isAutoTest: true }) await page.waitFor(500) const rect = await page.callMethod("getBoundingClientRectForTest") expect(rect.width).toBe(100) }) } it("placeholder-class should clear style after update empty string", async () => { const hasPlaceholderClassImage = await program.screenshot({ fullPage: true }) expect(hasPlaceholderClassImage).toSaveImageSnapshot() await setPageData({ textareaPlaceholderClass: "" }) await page.waitFor(1000) const noPlaceholderClassImage = await program.screenshot({ fullPage: true }) expect(noPlaceholderClassImage).toSaveImageSnapshot() }) });