@appium/universal-xml-plugin 1.0.0-beta.0 → 1.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -1
  3. package/build/lib/attr-map.d.ts +58 -0
  4. package/build/lib/attr-map.d.ts.map +1 -0
  5. package/build/lib/attr-map.js +47 -32
  6. package/build/lib/index.d.ts +5 -0
  7. package/build/lib/index.d.ts.map +1 -0
  8. package/build/lib/index.js +49 -0
  9. package/build/lib/logger.d.ts +3 -0
  10. package/build/lib/logger.d.ts.map +1 -0
  11. package/build/lib/logger.js +15 -5
  12. package/build/lib/node-map.d.ts +200 -0
  13. package/build/lib/node-map.d.ts.map +1 -0
  14. package/build/lib/node-map.js +146 -267
  15. package/build/lib/plugin.d.ts +8 -0
  16. package/build/lib/plugin.d.ts.map +1 -0
  17. package/build/lib/plugin.js +90 -77
  18. package/build/lib/source.d.ts +24 -0
  19. package/build/lib/source.d.ts.map +1 -0
  20. package/build/lib/source.js +202 -147
  21. package/build/lib/transformers.d.ts +8 -0
  22. package/build/lib/transformers.d.ts.map +1 -0
  23. package/build/lib/transformers.js +35 -26
  24. package/build/lib/xpath.d.ts +4 -0
  25. package/build/lib/xpath.d.ts.map +1 -0
  26. package/build/lib/xpath.js +46 -40
  27. package/build/tsconfig.tsbuildinfo +1 -0
  28. package/index.js +3 -17
  29. package/lib/attr-map.js +1 -1
  30. package/lib/index.js +19 -0
  31. package/lib/logger.js +1 -1
  32. package/lib/node-map.js +14 -58
  33. package/lib/plugin.js +48 -27
  34. package/lib/source.js +32 -14
  35. package/lib/transformers.js +3 -3
  36. package/lib/xpath.js +7 -6
  37. package/package.json +39 -22
  38. package/build/index.js +0 -25
  39. package/build/test/fixtures/android-transformed-path.xml +0 -38
  40. package/build/test/fixtures/android-transformed.xml +0 -38
  41. package/build/test/fixtures/android.xml +0 -39
  42. package/build/test/fixtures/index.js +0 -25
  43. package/build/test/fixtures/ios-edge.xml +0 -16
  44. package/build/test/fixtures/ios-transformed-edge.xml +0 -15
  45. package/build/test/fixtures/ios-transformed-path.xml +0 -53
  46. package/build/test/fixtures/ios-transformed.xml +0 -53
  47. package/build/test/fixtures/ios.xml +0 -51
  48. package/build/test/unit/plugin-specs.js +0 -76
  49. package/build/test/unit/source-specs.js +0 -82
  50. package/build/test/unit/xpath-specs.js +0 -46
  51. package/test/fixtures/android-transformed-path.xml +0 -38
  52. package/test/fixtures/android-transformed.xml +0 -38
  53. package/test/fixtures/android.xml +0 -39
  54. package/test/fixtures/index.js +0 -14
  55. package/test/fixtures/ios-edge.xml +0 -16
  56. package/test/fixtures/ios-transformed-edge.xml +0 -15
  57. package/test/fixtures/ios-transformed-path.xml +0 -53
  58. package/test/fixtures/ios-transformed.xml +0 -53
  59. package/test/fixtures/ios.xml +0 -51
  60. package/test/unit/plugin-specs.js +0 -57
  61. package/test/unit/source-specs.js +0 -79
  62. package/test/unit/xpath-specs.js +0 -43
  63. package/tsconfig.json +0 -15
package/lib/source.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import _ from 'lodash';
2
- import parser, { j2xParser } from 'fast-xml-parser';
2
+ import parser, {j2xParser} from 'fast-xml-parser';
3
3
  import NODE_MAP from './node-map';
4
- import { ATTR_MAP, REMOVE_ATTRS } from './attr-map';
4
+ import {ATTR_MAP, REMOVE_ATTRS} from './attr-map';
5
5
  import TRANSFORMS from './transformers';
6
6
 
7
7
  const PARSE_OPTS = {
@@ -22,18 +22,23 @@ export const IDX_PREFIX = `${ATTR_PREFIX}index`;
22
22
  const isAttr = (k) => k.substring(0, 2) === ATTR_PREFIX;
23
23
  const isNode = (k) => !isAttr(k);
24
24
 
25
- export function transformSourceXml (xmlStr, platform, {metadata = {}, addIndexPath = false} = {}) {
25
+ export function transformSourceXml(xmlStr, platform, {metadata = {}, addIndexPath = false} = {}) {
26
26
  // first thing we want to do is modify the ios source root node, because it doesn't include the
27
27
  // necessary index attribute, so we add it if it's not there
28
28
  xmlStr = xmlStr.replace('<AppiumAUT>', '<AppiumAUT index="0">');
29
29
  const xmlObj = parser.parse(xmlStr, PARSE_OPTS);
30
- const unknowns = transformNode(xmlObj, platform, {metadata, addIndexPath, parentPath: ''});
30
+ const unknowns = transformNode(xmlObj, platform, {
31
+ metadata,
32
+ addIndexPath,
33
+ parentPath: '',
34
+ });
31
35
  const jParser = new j2xParser(GEN_OPTS);
32
- const transformedXml = jParser.parse(xmlObj).trim();
36
+ let transformedXml = jParser.parse(xmlObj).trim();
37
+ transformedXml = `<?xml version="1.0" encoding="UTF-8"?>\n${transformedXml}`;
33
38
  return {xml: transformedXml, unknowns};
34
39
  }
35
40
 
36
- function getUniversalName (nameMap, name, platform) {
41
+ function getUniversalName(nameMap, name, platform) {
37
42
  for (const translatedName of Object.keys(nameMap)) {
38
43
  const sourceNodes = nameMap[translatedName]?.[platform];
39
44
  if (_.isArray(sourceNodes) && sourceNodes.includes(name)) {
@@ -46,15 +51,15 @@ function getUniversalName (nameMap, name, platform) {
46
51
  return null;
47
52
  }
48
53
 
49
- export function getUniversalNodeName (nodeName, platform) {
54
+ export function getUniversalNodeName(nodeName, platform) {
50
55
  return getUniversalName(NODE_MAP, nodeName, platform);
51
56
  }
52
57
 
53
- export function getUniversalAttrName (attrName, platform) {
58
+ export function getUniversalAttrName(attrName, platform) {
54
59
  return getUniversalName(ATTR_MAP, attrName, platform);
55
60
  }
56
61
 
57
- export function transformNode (nodeObj, platform, {metadata, addIndexPath, parentPath}) {
62
+ export function transformNode(nodeObj, platform, {metadata, addIndexPath, parentPath}) {
58
63
  const unknownNodes = [];
59
64
  const unknownAttrs = [];
60
65
  if (_.isPlainObject(nodeObj)) {
@@ -75,14 +80,18 @@ export function transformNode (nodeObj, platform, {metadata, addIndexPath, paren
75
80
  TRANSFORMS[platform]?.(nodeObj, metadata);
76
81
  unknownAttrs.push(...transformAttrs(nodeObj, attrs, platform));
77
82
  const unknowns = transformChildNodes(nodeObj, childNodeNames, platform, {
78
- metadata, addIndexPath, parentPath: thisIndexPath
83
+ metadata,
84
+ addIndexPath,
85
+ parentPath: thisIndexPath,
79
86
  });
80
87
  unknownAttrs.push(...unknowns.attrs);
81
88
  unknownNodes.push(...unknowns.nodes);
82
89
  } else if (_.isArray(nodeObj)) {
83
90
  for (const childObj of nodeObj) {
84
91
  const {nodes, attrs} = transformNode(childObj, platform, {
85
- metadata, addIndexPath, parentPath
92
+ metadata,
93
+ addIndexPath,
94
+ parentPath,
86
95
  });
87
96
  unknownNodes.push(...nodes);
88
97
  unknownAttrs.push(...attrs);
@@ -94,12 +103,21 @@ export function transformNode (nodeObj, platform, {metadata, addIndexPath, paren
94
103
  };
95
104
  }
96
105
 
97
- export function transformChildNodes (nodeObj, childNodeNames, platform, {metadata, addIndexPath, parentPath}) {
106
+ export function transformChildNodes(
107
+ nodeObj,
108
+ childNodeNames,
109
+ platform,
110
+ {metadata, addIndexPath, parentPath}
111
+ ) {
98
112
  const unknownNodes = [];
99
113
  const unknownAttrs = [];
100
114
  for (const nodeName of childNodeNames) {
101
115
  // before modifying the name of this child node, recurse down and modify the subtree
102
- const {nodes, attrs} = transformNode(nodeObj[nodeName], platform, {metadata, addIndexPath, parentPath});
116
+ const {nodes, attrs} = transformNode(nodeObj[nodeName], platform, {
117
+ metadata,
118
+ addIndexPath,
119
+ parentPath,
120
+ });
103
121
  unknownNodes.push(...nodes);
104
122
  unknownAttrs.push(...attrs);
105
123
 
@@ -126,7 +144,7 @@ export function transformChildNodes (nodeObj, childNodeNames, platform, {metadat
126
144
  return {nodes: unknownNodes, attrs: unknownAttrs};
127
145
  }
128
146
 
129
- export function transformAttrs (nodeObj, attrs, platform) {
147
+ export function transformAttrs(nodeObj, attrs, platform) {
130
148
  const unknownAttrs = [];
131
149
  for (const attr of attrs) {
132
150
  const cleanAttr = attr.substring(2);
@@ -1,10 +1,10 @@
1
- import { ATTR_PREFIX } from './source';
1
+ import {ATTR_PREFIX} from './source';
2
2
 
3
- function ios (nodeObj/*, metadata*/) {
3
+ function ios(nodeObj /*, metadata*/) {
4
4
  return nodeObj;
5
5
  }
6
6
 
7
- function android (nodeObj, metadata) {
7
+ function android(nodeObj, metadata) {
8
8
  // strip android:id from front of id
9
9
  const resId = nodeObj[`${ATTR_PREFIX}resource-id`];
10
10
  if (resId && metadata.appPackage) {
package/lib/xpath.js CHANGED
@@ -1,13 +1,13 @@
1
- import { select as xpathQuery } from 'xpath';
2
- import { DOMParser } from 'xmldom';
1
+ import {select as xpathQuery} from 'xpath';
2
+ import {DOMParser} from 'xmldom';
3
3
 
4
- export function runQuery (query, xmlStr) {
4
+ export function runQuery(query, xmlStr) {
5
5
  const dom = new DOMParser().parseFromString(xmlStr);
6
6
  const nodes = xpathQuery(query, dom);
7
7
  return nodes;
8
8
  }
9
9
 
10
- export function transformQuery (query, xmlStr, multiple) {
10
+ export function transformQuery(query, xmlStr, multiple) {
11
11
  const nodes = runQuery(query, xmlStr);
12
12
 
13
13
  const newQueries = nodes.map((node) => {
@@ -16,7 +16,8 @@ export function transformQuery (query, xmlStr, multiple) {
16
16
  let newQuery = indexPath
17
17
  .substring(1) // remove leading / so we can split
18
18
  .split('/') // split into idnexes
19
- .map((indexStr) => { // map to xpath node indexes (1-based)
19
+ .map((indexStr) => {
20
+ // map to xpath node indexes (1-based)
20
21
  const xpathIndex = parseInt(indexStr, 10) + 1;
21
22
  return `*[${xpathIndex}]`;
22
23
  })
@@ -37,7 +38,7 @@ export function transformQuery (query, xmlStr, multiple) {
37
38
  return newSelector;
38
39
  }
39
40
 
40
- export function getNodeAttrVal (node, attr) {
41
+ export function getNodeAttrVal(node, attr) {
41
42
  const attrObjs = Object.values(node.attributes).filter((obj) => obj.name === attr);
42
43
  if (!attrObjs.length) {
43
44
  throw new Error(`Tried to retrieve a node attribute '${attr}' but the node didn't have it`);
package/package.json CHANGED
@@ -1,38 +1,55 @@
1
1
  {
2
2
  "name": "@appium/universal-xml-plugin",
3
- "version": "1.0.0-beta.0",
3
+ "version": "1.0.0-beta.11",
4
4
  "description": "Appium plugin for making XML source and XPath queries the same across iOS and Android",
5
- "main": "./build/index.js",
6
- "repository": {
7
- "type": "git",
8
- "url": "git+https://github.com/appium/appium-plugins.git"
9
- },
10
- "appium": {
11
- "pluginName": "universal-xml",
12
- "mainClass": "UniversalXMLPlugin"
13
- },
14
5
  "keywords": [
15
6
  "appium",
16
7
  "automation",
17
8
  "xml",
18
9
  "webdriver"
19
10
  ],
20
- "author": "Appium <maintainers@appium.io>",
21
- "license": "Apache-2.0",
11
+ "homepage": "https://appium.io",
22
12
  "bugs": {
23
- "url": "https://github.com/appium/appium-plugins/issues"
13
+ "url": "https://github.com/appium/appium/issues"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/appium/appium-plugins.git"
18
+ },
19
+ "license": "Apache-2.0",
20
+ "author": "https://github.com/appium",
21
+ "types": "./build/lib/plugin.d.ts",
22
+ "files": [
23
+ "index.js",
24
+ "build",
25
+ "lib"
26
+ ],
27
+ "scripts": {
28
+ "build": "babel lib --root-mode=upward --out-dir=build/lib",
29
+ "dev": "npm run build -- --watch",
30
+ "fix": "npm run lint -- --fix",
31
+ "lint": "eslint -c ../../.eslintrc --ignore-path ../../.eslintignore .",
32
+ "prepare": "npm run build",
33
+ "test": "npm run test:unit",
34
+ "test:unit": "mocha \"./test/unit/**/*.spec.js\""
24
35
  },
25
- "homepage": "https://github.com/appium/appium-plugins#readme",
26
36
  "dependencies": {
27
- "@appium/base-plugin": "^1.5.0",
28
- "appium-base-driver": "^8.0.0-beta.4",
29
- "fast-xml-parser": "^3.17.6",
30
- "xmldom": "^0.4.0",
37
+ "@babel/runtime": "7.18.3",
38
+ "fast-xml-parser": "3.21.1",
39
+ "source-map-support": "0.5.21",
40
+ "xmldom": "0.6.0",
31
41
  "xpath": "0.0.32"
32
42
  },
33
- "scripts": {
34
- "test:unit": "mocha ./build/test/unit/*-specs.js",
35
- "copyfiles": "copyfiles ./test/fixtures/*.xml ./build"
43
+ "peerDependencies": {
44
+ "appium": "^2.0.0-beta.35"
45
+ },
46
+ "appium": {
47
+ "pluginName": "universal-xml",
48
+ "mainClass": "UniversalXMLPlugin"
36
49
  },
37
- "devDependencies": {}
50
+ "gitHead": "ed2002d90de0b103c35b2feeeeef97f060141a86",
51
+ "engines": {
52
+ "node": ">=14",
53
+ "npm": ">=6"
54
+ }
38
55
  }
package/build/index.js DELETED
@@ -1,25 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.UniversalXMLPlugin = void 0;
7
- const plugin_1 = __importDefault(require("./lib/plugin"));
8
- exports.UniversalXMLPlugin = plugin_1.default;
9
- exports.default = plugin_1.default;
10
- if (module === require.main) {
11
- const { transformSourceXml } = require('./lib/source');
12
- const fs = require('fs');
13
- const [, , xmlDataPath, platform, optsJson] = process.argv;
14
- const xmlData = fs.readFileSync(xmlDataPath, 'utf8');
15
- let opts = {};
16
- if (optsJson) {
17
- opts = JSON.parse(optsJson);
18
- }
19
- const { xml, unknowns } = transformSourceXml(xmlData, platform, opts);
20
- console.log(xml); // eslint-disable-line no-console
21
- if (unknowns.nodes.length || unknowns.attrs.length) {
22
- console.error(unknowns); // eslint-disable-line no-console
23
- }
24
- }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBOEM7QUFFckMsNkJBRkYsZ0JBQWtCLENBRUU7QUFEM0Isa0JBQWUsZ0JBQWtCLENBQUM7QUFHbEMsSUFBSSxNQUFNLEtBQUssT0FBTyxDQUFDLElBQUksRUFBRTtJQUMzQixNQUFNLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkQsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sQ0FBQyxFQUFDLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzFELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNkLElBQUksUUFBUSxFQUFFO1FBQ1osSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDN0I7SUFDRCxNQUFNLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBQyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGlDQUFpQztJQUNuRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7S0FDM0Q7Q0FDRiJ9
@@ -1,38 +0,0 @@
1
- <UI width="1080" height="1920" indexPath="/0">
2
- <View text="" indexPath="/0/0" x="0" y="0" width="1080" height="1920" visible="true">
3
- <View text="" indexPath="/0/0/0" x="0" y="0" width="1080" height="1920" visible="true">
4
- <View text="" indexPath="/0/0/0/0" x="0" y="72" width="1080" height="1848" visible="true">
5
- <View text="" indexPath="/0/0/0/0/0" x="0" y="72" width="1080" height="1848" id="action_bar_root" visible="true">
6
- <View text="" indexPath="/0/0/0/0/0/0" x="0" y="72" width="1080" height="1848" id="android:id/content" visible="true">
7
- <View text="" indexPath="/0/0/0/0/0/0/0" x="0" y="72" width="1080" height="1848" visible="true">
8
- <View text="" indexPath="/0/0/0/0/0/0/0/0" x="0" y="72" width="1080" height="1848" visible="true"></View>
9
- <View text="" indexPath="/0/0/0/0/0/0/0/1" x="0" y="72" width="1080" height="1848" visible="true">
10
- <View text="" indexPath="/0/0/0/0/0/0/0/1/0" x="0" y="72" width="1080" height="168" visible="true">
11
- <View text="" indexPath="/0/0/0/0/0/0/0/1/0/0" x="0" y="72" width="1080" height="168" visible="true">
12
- <View text="" indexPath="/0/0/0/0/0/0/0/1/0/0/0" x="0" y="72" width="1080" height="168" visible="true">
13
- <Button text="" indexPath="/0/0/0/0/0/0/0/1/0/0/0/0" x="0" y="72" width="168" height="168" visible="true"></Button>
14
- </View>
15
- </View>
16
- </View>
17
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1" x="0" y="240" width="1080" height="1680" visible="true">
18
- <Text text="Login" indexPath="/0/0/0/0/0/0/0/1/1/0" x="413" y="360" width="255" height="136" visible="true"></Text>
19
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1/1" x="150" y="496" width="780" height="120" visible="true">
20
- <TextInput text="alice" indexPath="/0/0/0/0/0/0/0/1/1/1/0" x="150" y="504" width="780" height="112" axId="username" visible="true"></TextInput>
21
- </View>
22
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1/2" x="150" y="616" width="780" height="120" visible="true">
23
- <TextInput text="•••••••••" indexPath="/0/0/0/0/0/0/0/1/1/2/0" x="150" y="624" width="780" height="112" axId="password" visible="true"></TextInput>
24
- </View>
25
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1/3" x="456" y="736" width="168" height="113" visible="true">
26
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1/3/0" x="456" y="736" width="168" height="113" axId="loginBtn" visible="true">
27
- <Text text="Login" indexPath="/0/0/0/0/0/0/0/1/1/3/0/0" x="456" y="736" width="168" height="113" visible="true"></Text>
28
- </View>
29
- </View>
30
- </View>
31
- </View>
32
- </View>
33
- </View>
34
- </View>
35
- </View>
36
- </View>
37
- </View>
38
- </UI>
@@ -1,38 +0,0 @@
1
- <UI width="1080" height="1920">
2
- <View text="" x="0" y="0" width="1080" height="1920" visible="true">
3
- <View text="" x="0" y="0" width="1080" height="1920" visible="true">
4
- <View text="" x="0" y="72" width="1080" height="1848" visible="true">
5
- <View text="" x="0" y="72" width="1080" height="1848" id="action_bar_root" visible="true">
6
- <View text="" x="0" y="72" width="1080" height="1848" id="android:id/content" visible="true">
7
- <View text="" x="0" y="72" width="1080" height="1848" visible="true">
8
- <View text="" x="0" y="72" width="1080" height="1848" visible="true"></View>
9
- <View text="" x="0" y="72" width="1080" height="1848" visible="true">
10
- <View text="" x="0" y="72" width="1080" height="168" visible="true">
11
- <View text="" x="0" y="72" width="1080" height="168" visible="true">
12
- <View text="" x="0" y="72" width="1080" height="168" visible="true">
13
- <Button text="" x="0" y="72" width="168" height="168" visible="true"></Button>
14
- </View>
15
- </View>
16
- </View>
17
- <View text="" x="0" y="240" width="1080" height="1680" visible="true">
18
- <Text text="Login" x="413" y="360" width="255" height="136" visible="true"></Text>
19
- <View text="" x="150" y="496" width="780" height="120" visible="true">
20
- <TextInput text="alice" x="150" y="504" width="780" height="112" axId="username" visible="true"></TextInput>
21
- </View>
22
- <View text="" x="150" y="616" width="780" height="120" visible="true">
23
- <TextInput text="•••••••••" x="150" y="624" width="780" height="112" axId="password" visible="true"></TextInput>
24
- </View>
25
- <View text="" x="456" y="736" width="168" height="113" visible="true">
26
- <View text="" x="456" y="736" width="168" height="113" axId="loginBtn" visible="true">
27
- <Text text="Login" x="456" y="736" width="168" height="113" visible="true"></Text>
28
- </View>
29
- </View>
30
- </View>
31
- </View>
32
- </View>
33
- </View>
34
- </View>
35
- </View>
36
- </View>
37
- </View>
38
- </UI>
@@ -1,39 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
2
- <hierarchy index="0" class="hierarchy" rotation="0" width="1080" height="1920">
3
- <android.widget.FrameLayout index="0" package="io.cloudgrey.the_app" class="android.widget.FrameLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,0][1080,1920]" displayed="true">
4
- <android.widget.LinearLayout index="0" package="io.cloudgrey.the_app" class="android.widget.LinearLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,0][1080,1920]" displayed="true">
5
- <android.widget.FrameLayout index="0" package="io.cloudgrey.the_app" class="android.widget.FrameLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,1920]" displayed="true">
6
- <android.widget.LinearLayout index="0" package="io.cloudgrey.the_app" class="android.widget.LinearLayout" text="" resource-id="io.cloudgrey.the_app:id/action_bar_root" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,1920]" displayed="true">
7
- <android.widget.FrameLayout index="0" package="io.cloudgrey.the_app" class="android.widget.FrameLayout" text="" resource-id="android:id/content" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,1920]" displayed="true">
8
- <android.widget.RelativeLayout index="0" package="io.cloudgrey.the_app" class="android.widget.RelativeLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,1920]" displayed="true">
9
- <android.view.ViewGroup index="0" package="io.cloudgrey.the_app" class="android.view.ViewGroup" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,1920]" displayed="true" />
10
- <android.widget.RelativeLayout index="1" package="io.cloudgrey.the_app" class="android.widget.RelativeLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,1920]" displayed="true">
11
- <android.widget.LinearLayout index="0" package="io.cloudgrey.the_app" class="android.widget.LinearLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,240]" displayed="true">
12
- <android.widget.FrameLayout index="0" package="io.cloudgrey.the_app" class="android.widget.FrameLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,240]" displayed="true">
13
- <android.view.ViewGroup index="0" package="io.cloudgrey.the_app" class="android.view.ViewGroup" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][1080,240]" displayed="true">
14
- <android.widget.ImageButton index="0" package="io.cloudgrey.the_app" class="android.widget.ImageButton" text="" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,72][168,240]" displayed="true" />
15
- </android.view.ViewGroup>
16
- </android.widget.FrameLayout>
17
- </android.widget.LinearLayout>
18
- <android.widget.FrameLayout index="1" package="io.cloudgrey.the_app" class="android.widget.FrameLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,240][1080,1920]" displayed="true">
19
- <android.widget.TextView index="0" package="io.cloudgrey.the_app" class="android.widget.TextView" text="Login" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[413,360][668,496]" displayed="true" />
20
- <android.view.ViewGroup index="1" package="io.cloudgrey.the_app" class="android.view.ViewGroup" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[150,496][930,616]" displayed="true">
21
- <android.widget.EditText index="0" package="io.cloudgrey.the_app" class="android.widget.EditText" text="alice" content-desc="username" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="true" password="false" scrollable="false" selected="false" bounds="[150,504][930,616]" displayed="true" />
22
- </android.view.ViewGroup>
23
- <android.view.ViewGroup index="2" package="io.cloudgrey.the_app" class="android.view.ViewGroup" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[150,616][930,736]" displayed="true">
24
- <android.widget.EditText index="0" package="io.cloudgrey.the_app" class="android.widget.EditText" text="•••••••••" content-desc="password" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" long-clickable="true" password="true" scrollable="false" selected="false" bounds="[150,624][930,736]" displayed="true" />
25
- </android.view.ViewGroup>
26
- <android.view.ViewGroup index="3" package="io.cloudgrey.the_app" class="android.view.ViewGroup" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[456,736][624,849]" displayed="true">
27
- <android.view.ViewGroup index="0" package="io.cloudgrey.the_app" class="android.view.ViewGroup" text="" content-desc="loginBtn" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[456,736][624,849]" displayed="true">
28
- <android.widget.TextView index="0" package="io.cloudgrey.the_app" class="android.widget.TextView" text="Login" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[456,736][624,849]" displayed="true" />
29
- </android.view.ViewGroup>
30
- </android.view.ViewGroup>
31
- </android.widget.FrameLayout>
32
- </android.widget.RelativeLayout>
33
- </android.widget.RelativeLayout>
34
- </android.widget.FrameLayout>
35
- </android.widget.LinearLayout>
36
- </android.widget.FrameLayout>
37
- </android.widget.LinearLayout>
38
- </android.widget.FrameLayout>
39
- </hierarchy>
@@ -1,25 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.XML_IOS_EDGE_TRANSFORMED = exports.XML_IOS_EDGE = exports.XML_ANDROID_TRANSFORMED_INDEX_PATH = exports.XML_IOS_TRANSFORMED_INDEX_PATH = exports.XML_ANDROID_TRANSFORMED = exports.XML_IOS_TRANSFORMED = exports.XML_ANDROID = exports.XML_IOS = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
9
- const XML_IOS = fs_1.default.readFileSync(path_1.default.resolve(__dirname, 'ios.xml'), 'utf8').trim();
10
- exports.XML_IOS = XML_IOS;
11
- const XML_IOS_TRANSFORMED = fs_1.default.readFileSync(path_1.default.resolve(__dirname, 'ios-transformed.xml'), 'utf8').trim();
12
- exports.XML_IOS_TRANSFORMED = XML_IOS_TRANSFORMED;
13
- const XML_IOS_TRANSFORMED_INDEX_PATH = fs_1.default.readFileSync(path_1.default.resolve(__dirname, 'ios-transformed-path.xml'), 'utf8').trim();
14
- exports.XML_IOS_TRANSFORMED_INDEX_PATH = XML_IOS_TRANSFORMED_INDEX_PATH;
15
- const XML_IOS_EDGE = fs_1.default.readFileSync(path_1.default.resolve(__dirname, 'ios-edge.xml'), 'utf8').trim();
16
- exports.XML_IOS_EDGE = XML_IOS_EDGE;
17
- const XML_IOS_EDGE_TRANSFORMED = fs_1.default.readFileSync(path_1.default.resolve(__dirname, 'ios-transformed-edge.xml'), 'utf8').trim();
18
- exports.XML_IOS_EDGE_TRANSFORMED = XML_IOS_EDGE_TRANSFORMED;
19
- const XML_ANDROID = fs_1.default.readFileSync(path_1.default.resolve(__dirname, 'android.xml'), 'utf8').trim();
20
- exports.XML_ANDROID = XML_ANDROID;
21
- const XML_ANDROID_TRANSFORMED = fs_1.default.readFileSync(path_1.default.resolve(__dirname, 'android-transformed.xml'), 'utf8').trim();
22
- exports.XML_ANDROID_TRANSFORMED = XML_ANDROID_TRANSFORMED;
23
- const XML_ANDROID_TRANSFORMED_INDEX_PATH = fs_1.default.readFileSync(path_1.default.resolve(__dirname, 'android-transformed-path.xml'), 'utf8').trim();
24
- exports.XML_ANDROID_TRANSFORMED_INDEX_PATH = XML_ANDROID_TRANSFORMED_INDEX_PATH;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ZpeHR1cmVzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIsTUFBTSxPQUFPLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQVMxRSwwQkFBTztBQVJoQixNQUFNLG1CQUFtQixHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsY0FBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQVE1RSxrREFBbUI7QUFQbEQsTUFBTSw4QkFBOEIsR0FBRyxZQUFFLENBQUMsWUFBWSxDQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLDBCQUEwQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFPOUMsd0VBQThCO0FBTjNHLE1BQU0sWUFBWSxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsY0FBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFPdkQsb0NBQVk7QUFObEQsTUFBTSx3QkFBd0IsR0FBRyxZQUFFLENBQUMsWUFBWSxDQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLDBCQUEwQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFNakUsNERBQXdCO0FBTDVFLE1BQU0sV0FBVyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsY0FBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFJekUsa0NBQVc7QUFIN0IsTUFBTSx1QkFBdUIsR0FBRyxZQUFFLENBQUMsWUFBWSxDQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFHL0QsMERBQXVCO0FBRjNFLE1BQU0sa0NBQWtDLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSw4QkFBOEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBR2pJLGdGQUFrQyJ9
@@ -1,16 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <AppiumAUT>
3
- <XCUIElementTypeApplication type="XCUIElementTypeApplication" name="TheApp" label="TheApp" enabled="true" visible="true" x="0" y="0" width="414" height="896" index="0">
4
- <SomeRandoElement type="blah" oddAttribute="odd" />
5
- <SomeRandoElement type="blah" oddAttribute="odd" />
6
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="username" label="username" enabled="true" visible="true" x="50" y="185" width="314" height="51" index="0">
7
- <XCUIElementTypeTextField type="XCUIElementTypeTextField" value="alice" name="username" label="username" enabled="true" visible="true" x="50" y="185" width="314" height="51" index="0"/>
8
- <XCUIElementTypeTab type="XCUIElementTypeTab" name="fakeTab" label="" enabled="" visible="true" x="50" y="185" width="314" height="51" index="1"/>
9
- <XCUIElementTypeTab type="XCUIElementTypeTab" name="fakeTab" label="" enabled="" visible="true" x="50" y="185" width="314" height="51" index="2"/>
10
- <XCUIElementTypeKey type="XCUIElementTypeKey" name="fakeKey" label="" enabled="" visible="true" x="50" y="185" width="314" height="51" index="3">
11
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="fakeOther" label="" enabled="" visible="true" x="1" y="2" width="3" height="4" index="0"/>
12
- </XCUIElementTypeKey>
13
- <XCUIElementTypeKey type="XCUIElementTypeKey" name="fakeKey" label="" enabled="" visible="true" x="50" y="185" width="314" height="51" index="4"/>
14
- </XCUIElementTypeOther>
15
- </XCUIElementTypeApplication>
16
- </AppiumAUT>
@@ -1,15 +0,0 @@
1
- <UI>
2
- <App visible="true" x="0" y="0" width="414" height="896" axId="TheApp" text="TheApp">
3
- <SomeRandoElement oddAttribute="odd"></SomeRandoElement>
4
- <SomeRandoElement oddAttribute="odd"></SomeRandoElement>
5
- <Element visible="true" x="50" y="185" width="314" height="51" axId="username" text="username">
6
- <TextInput value="alice" visible="true" x="50" y="185" width="314" height="51" axId="username" text="username"></TextInput>
7
- <Button visible="true" x="50" y="185" width="314" height="51" axId="fakeTab" text=""></Button>
8
- <Button visible="true" x="50" y="185" width="314" height="51" axId="fakeTab" text=""></Button>
9
- <Button visible="true" x="50" y="185" width="314" height="51" axId="fakeKey" text="">
10
- <Element visible="true" x="1" y="2" width="3" height="4" axId="fakeOther" text=""></Element>
11
- </Button>
12
- <Button visible="true" x="50" y="185" width="314" height="51" axId="fakeKey" text=""></Button>
13
- </Element>
14
- </App>
15
- </UI>
@@ -1,53 +0,0 @@
1
- <UI indexPath="/0">
2
- <App visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0" axId="TheApp" text="TheApp">
3
- <Window visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0/0">
4
- <Element visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0/0/0">
5
- <Nav visible="true" x="0" y="48" width="414" height="44" indexPath="/0/0/0/0/0" axId="RCCView">
6
- <Button visible="true" x="0" y="48" width="96" height="44" indexPath="/0/0/0/0/0/0" axId="The App" text="The App"></Button>
7
- </Nav>
8
- <Element visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0/0/0/1">
9
- <Element visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0/0/0/1/0">
10
- <Element visible="true" x="0" y="92" width="414" height="804" indexPath="/0/0/0/0/1/0/0">
11
- <Element visible="true" x="0" y="92" width="414" height="804" indexPath="/0/0/0/0/1/0/0/0" axId="Login username password loginBtn" text="Login username password loginBtn">
12
- <Element visible="true" x="0" y="92" width="414" height="804" indexPath="/0/0/0/0/1/0/0/0/0" axId="Login username password loginBtn" text="Login username password loginBtn">
13
- <Element visible="true" x="0" y="92" width="414" height="804" indexPath="/0/0/0/0/1/0/0/0/0/0" axId="Login username password loginBtn" text="Login username password loginBtn">
14
- <Element visible="true" x="0" y="92" width="414" height="273" indexPath="/0/0/0/0/1/0/0/0/0/0/0" axId="Login username password loginBtn" text="Login username password loginBtn">
15
- <Text value="Login" visible="true" x="157" y="132" width="101" height="51" indexPath="/0/0/0/0/1/0/0/0/0/0/0/0" axId="Login" text="Login"></Text>
16
- <Element visible="true" x="50" y="183" width="314" height="40" indexPath="/0/0/0/0/1/0/0/0/0/0/0/1" axId="username" text="username">
17
- <Element visible="true" x="50" y="183" width="314" height="40" indexPath="/0/0/0/0/1/0/0/0/0/0/0/1/0" axId="username" text="username">
18
- <Element visible="true" x="50" y="185" width="314" height="51" indexPath="/0/0/0/0/1/0/0/0/0/0/0/1/0/0" axId="username" text="username">
19
- <TextInput value="alice" visible="true" x="50" y="185" width="314" height="51" indexPath="/0/0/0/0/1/0/0/0/0/0/0/1/0/0/0" axId="username" text="username"></TextInput>
20
- <Button visible="true" x="50" y="185" width="314" height="51" indexPath="/0/0/0/0/1/0/0/0/0/0/0/1/0/0/1" axId="fakeTab" text=""></Button>
21
- <Button visible="true" x="50" y="185" width="314" height="51" indexPath="/0/0/0/0/1/0/0/0/0/0/0/1/0/0/2" axId="fakeKey" text=""></Button>
22
- </Element>
23
- </Element>
24
- </Element>
25
- <Element visible="true" x="50" y="223" width="314" height="40" indexPath="/0/0/0/0/1/0/0/0/0/0/0/2" axId="password" text="password">
26
- <Element visible="true" x="50" y="223" width="314" height="40" indexPath="/0/0/0/0/1/0/0/0/0/0/0/2/0" axId="password" text="password">
27
- <Element visible="true" x="50" y="225" width="314" height="51" indexPath="/0/0/0/0/1/0/0/0/0/0/0/2/0/0" axId="password" text="password">
28
- <TextInput value="•••••••••" visible="true" x="50" y="225" width="314" height="51" indexPath="/0/0/0/0/1/0/0/0/0/0/0/2/0/0/0" axId="password" text="password"></TextInput>
29
- </Element>
30
- </Element>
31
- </Element>
32
- <Element visible="true" x="177" y="263" width="60" height="102" indexPath="/0/0/0/0/1/0/0/0/0/0/0/3" axId="loginBtn" text="loginBtn">
33
- <Element visible="true" x="177" y="327" width="60" height="38" indexPath="/0/0/0/0/1/0/0/0/0/0/0/3/0" axId="loginBtn" text="loginBtn"></Element>
34
- </Element>
35
- </Element>
36
- </Element>
37
- </Element>
38
- </Element>
39
- </Element>
40
- </Element>
41
- </Element>
42
- </Element>
43
- </Window>
44
- <Window visible="false" x="0" y="0" width="414" height="896" indexPath="/0/0/1">
45
- <Element visible="false" x="0" y="0" width="414" height="896" indexPath="/0/0/1/0">
46
- <Element visible="false" x="0" y="0" width="414" height="896" indexPath="/0/0/1/0/0"></Element>
47
- <Element visible="false" x="0" y="896" width="414" height="71" indexPath="/0/0/1/0/1">
48
- <Element visible="false" x="0" y="896" width="414" height="71" indexPath="/0/0/1/0/1/0"></Element>
49
- </Element>
50
- </Element>
51
- </Window>
52
- </App>
53
- </UI>
@@ -1,53 +0,0 @@
1
- <UI>
2
- <App visible="true" x="0" y="0" width="414" height="896" axId="TheApp" text="TheApp">
3
- <Window visible="true" x="0" y="0" width="414" height="896">
4
- <Element visible="true" x="0" y="0" width="414" height="896">
5
- <Nav visible="true" x="0" y="48" width="414" height="44" axId="RCCView">
6
- <Button visible="true" x="0" y="48" width="96" height="44" axId="The App" text="The App"></Button>
7
- </Nav>
8
- <Element visible="true" x="0" y="0" width="414" height="896">
9
- <Element visible="true" x="0" y="0" width="414" height="896">
10
- <Element visible="true" x="0" y="92" width="414" height="804">
11
- <Element visible="true" x="0" y="92" width="414" height="804" axId="Login username password loginBtn" text="Login username password loginBtn">
12
- <Element visible="true" x="0" y="92" width="414" height="804" axId="Login username password loginBtn" text="Login username password loginBtn">
13
- <Element visible="true" x="0" y="92" width="414" height="804" axId="Login username password loginBtn" text="Login username password loginBtn">
14
- <Element visible="true" x="0" y="92" width="414" height="273" axId="Login username password loginBtn" text="Login username password loginBtn">
15
- <Text value="Login" visible="true" x="157" y="132" width="101" height="51" axId="Login" text="Login"></Text>
16
- <Element visible="true" x="50" y="183" width="314" height="40" axId="username" text="username">
17
- <Element visible="true" x="50" y="183" width="314" height="40" axId="username" text="username">
18
- <Element visible="true" x="50" y="185" width="314" height="51" axId="username" text="username">
19
- <TextInput value="alice" visible="true" x="50" y="185" width="314" height="51" axId="username" text="username"></TextInput>
20
- <Button visible="true" x="50" y="185" width="314" height="51" axId="fakeTab" text=""></Button>
21
- <Button visible="true" x="50" y="185" width="314" height="51" axId="fakeKey" text=""></Button>
22
- </Element>
23
- </Element>
24
- </Element>
25
- <Element visible="true" x="50" y="223" width="314" height="40" axId="password" text="password">
26
- <Element visible="true" x="50" y="223" width="314" height="40" axId="password" text="password">
27
- <Element visible="true" x="50" y="225" width="314" height="51" axId="password" text="password">
28
- <TextInput value="•••••••••" visible="true" x="50" y="225" width="314" height="51" axId="password" text="password"></TextInput>
29
- </Element>
30
- </Element>
31
- </Element>
32
- <Element visible="true" x="177" y="263" width="60" height="102" axId="loginBtn" text="loginBtn">
33
- <Element visible="true" x="177" y="327" width="60" height="38" axId="loginBtn" text="loginBtn"></Element>
34
- </Element>
35
- </Element>
36
- </Element>
37
- </Element>
38
- </Element>
39
- </Element>
40
- </Element>
41
- </Element>
42
- </Element>
43
- </Window>
44
- <Window visible="false" x="0" y="0" width="414" height="896">
45
- <Element visible="false" x="0" y="0" width="414" height="896">
46
- <Element visible="false" x="0" y="0" width="414" height="896"></Element>
47
- <Element visible="false" x="0" y="896" width="414" height="71">
48
- <Element visible="false" x="0" y="896" width="414" height="71"></Element>
49
- </Element>
50
- </Element>
51
- </Window>
52
- </App>
53
- </UI>