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-web-view', () => {
if (isWeb || isAppWebView) {
it('web', async () => {
expect(1).toBe(1)
})
return
}
let page;
let start = 0;
beforeAll(async () => {
page = await program.reLaunch('/pages/component/web-view/web-view');
await page.waitFor(3000);
});
it('check_load_url', async () => {
expect(await page.data('loadError')).toBe(false)
});
it('test attr webview-styles', async () => {
await page.setData({
webview_styles: {
progress: {
color: '#FF0'
}
}
});
await page.waitFor(100);
await page.callMethod('reload');
await page.waitFor(100);
await page.setData({
webview_styles: {
progress: {
color: 'yellow'
}
}
});
await page.waitFor(100);
await page.callMethod('reload');
});
if (isMP) {
return
}
it('set auto test', async () => {
await page.setData({
autoTest: true
});
expect(1).toBe(1)
});
it('test touch event', async () => {
const windowInfo = await program.callUniMethod('getWindowInfo');
await program.tap({
x: 1,
y: windowInfo.safeAreaInsets.top + 44 + 1
});
await page.waitFor(500);
if (!isIOS) {
expect(await page.data('isTouchEnable')).toBe(true);
}
await page.setData({
pointerEvents: 'none',
isTouchEnable: false
});
await page.waitFor(100);
await program.tap({
x: 10,
y: windowInfo.safeAreaInsets.top + 44 + 10
});
await page.waitFor(500);
if (!isIOS && !isHarmony) {
expect(await page.data('isTouchEnable')).toBe(false);
}
await page.setData({
pointerEvents: 'auto'
});
});
it('test event loading load', async () => {
await page.callMethod('reload');
start = Date.now();
await page.waitFor(async () => {
return (await page.data('eventLoading')) || (Date.now() - start > 500);
});
if (isIOS) {
const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
if (
platformInfo.indexOf('14.5') != -1 ||
platformInfo.indexOf('13.7') != -1 ||
platformInfo.indexOf('12.4') != -1
) {
expect(1).toBe(1)
return
}
expect(await page.data('eventLoading')).toEqual({
"tagName": "WEB-VIEW",
type: 'loading',
src: 'https://www.dcloud.io/'
});
} else {
expect(await page.data('eventLoading')).toEqual({
tagName: 'WEB-VIEW',
type: 'loading',
src: 'https://www.dcloud.io/'
});
}
start = Date.now();
await page.waitFor(async () => {
return (await page.data('eventLoad')) || (Date.now() - start > 5000);
});
expect(await page.data('eventLoad')).toEqual({
tagName: 'WEB-VIEW',
type: 'load',
src: 'https://www.dcloud.io/',
url: 'https://www.dcloud.io/'
});
});
it('test event contentheightchange', async () => {
if (!isAndroid && !isIOS && !isHarmony) {
expect(1).toBe(1);
return;
}
expect(await page.callMethod('getContentHeight')).toBeGreaterThan(0);
start = Date.now();
await page.waitFor(async () => {
return (await page.data('eventContentHeightChange')) || (Date.now() - start > 500);
});
expect(await page.data('eventContentHeightChange')).toEqual({
tagName: 'WEB-VIEW',
type: 'contentheightchange',
isValidHeight: true
});
});
it('test event error', async () => {
const infos = process.env.uniTestPlatformInfo.split(' ');
const version = parseInt(infos[infos.length - 1]);
if (isAndroid && version > 5) {
await page.setData({
src: 'https://www.dclou.io/uni-app-x'
});
start = Date.now();
await page.waitFor(async () => {
return (await page.data('eventError')) || (Date.now() - start > 5000);
});
expect(await page.data('eventError')).toEqual({
tagName: 'WEB-VIEW',
type: 'error',
errCode: 100002,
errMsg: 'page error',
url: 'https://www.dclou.io',
fullUrl: 'https://www.dclou.io/uni-app-x',
src: 'https://www.dclou.io/uni-app-x'
});
}
await page.setData({
autoTest: false
});
});
it('checkNativeWebView', async () => {
const platformInfo = process.env.uniTestPlatformInfo.toLocaleLowerCase()
if (
platformInfo.indexOf('14.5') != -1 ||
platformInfo.indexOf('13.7') != -1 ||
platformInfo.indexOf('12.4') != -1
) {
expect(1).toBe(1)
return
}
await page.waitFor(300);
const has = await page.callMethod('checkNativeWebView')
expect(has).toBe(true)
})
it('checkLoadingCount', async () => {
if (
platformInfo.indexOf('14.5') != -1 ||
platformInfo.indexOf('13.7') != -1 ||
platformInfo.indexOf('12.4') != -1
) {
expect(1).toBe(1)
return
}
await page.callMethod('checkLoadingCount')
await page.waitFor(300);
const has = await page.callMethod('checkNativeWebView')
if (has) {
expect(await page.data('loadingCount')).toBe(1);
} else {
expect(await page.data('loadingCount')).toBe(0);
}
})
it('test lodaData', async () => {
await page.callMethod('loadData');
await page.waitFor(1000);
const image = await program.screenshot({ fullPage: true });
expect(image).toSaveImageSnapshot();
});
it('test half screen toggle', async () => {
const toggleButton = await page.$('#half-screen-toggle');
expect(toggleButton).toBeTruthy();
await toggleButton.tap();
await page.waitFor(500);
const image = await program.screenshot({
fullPage: true,
});
expect(image).toSaveImageSnapshot();
await page.waitFor(200);
await toggleButton.tap();
});
});