@appium/universal-xml-plugin 1.0.0-beta.3 → 1.0.0-beta.8

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 (58) hide show
  1. package/LICENSE +2 -2
  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 +9 -0
  16. package/build/lib/plugin.d.ts.map +1 -0
  17. package/build/lib/plugin.js +90 -93
  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 -148
  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/index.js +19 -0
  30. package/lib/logger.js +1 -1
  31. package/lib/plugin.js +2 -10
  32. package/package.json +30 -21
  33. package/build/index.js +0 -25
  34. package/build/test/fixtures/android-transformed-path.xml +0 -39
  35. package/build/test/fixtures/android-transformed.xml +0 -39
  36. package/build/test/fixtures/android.xml +0 -39
  37. package/build/test/fixtures/index.js +0 -25
  38. package/build/test/fixtures/ios-edge.xml +0 -16
  39. package/build/test/fixtures/ios-transformed-edge.xml +0 -16
  40. package/build/test/fixtures/ios-transformed-path.xml +0 -54
  41. package/build/test/fixtures/ios-transformed.xml +0 -54
  42. package/build/test/fixtures/ios.xml +0 -51
  43. package/build/test/unit/plugin-specs.js +0 -76
  44. package/build/test/unit/source-specs.js +0 -82
  45. package/build/test/unit/xpath-specs.js +0 -46
  46. package/test/fixtures/android-transformed-path.xml +0 -39
  47. package/test/fixtures/android-transformed.xml +0 -39
  48. package/test/fixtures/android.xml +0 -39
  49. package/test/fixtures/index.js +0 -14
  50. package/test/fixtures/ios-edge.xml +0 -16
  51. package/test/fixtures/ios-transformed-edge.xml +0 -16
  52. package/test/fixtures/ios-transformed-path.xml +0 -54
  53. package/test/fixtures/ios-transformed.xml +0 -54
  54. package/test/fixtures/ios.xml +0 -51
  55. package/test/unit/plugin-specs.js +0 -57
  56. package/test/unit/source-specs.js +0 -79
  57. package/test/unit/xpath-specs.js +0 -43
  58. package/tsconfig.json +0 -15
@@ -1,54 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <UI indexPath="/0">
3
- <App visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0" axId="TheApp" text="TheApp">
4
- <Window visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0/0">
5
- <Element visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0/0/0">
6
- <Nav visible="true" x="0" y="48" width="414" height="44" indexPath="/0/0/0/0/0" axId="RCCView">
7
- <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>
8
- </Nav>
9
- <Element visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0/0/0/1">
10
- <Element visible="true" x="0" y="0" width="414" height="896" indexPath="/0/0/0/0/1/0">
11
- <Element visible="true" x="0" y="92" width="414" height="804" indexPath="/0/0/0/0/1/0/0">
12
- <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">
13
- <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">
14
- <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">
15
- <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">
16
- <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>
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" axId="username" text="username">
18
- <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">
19
- <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">
20
- <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>
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/1" axId="fakeTab" text=""></Button>
22
- <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>
23
- </Element>
24
- </Element>
25
- </Element>
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" axId="password" text="password">
27
- <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">
28
- <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">
29
- <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>
30
- </Element>
31
- </Element>
32
- </Element>
33
- <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">
34
- <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>
35
- </Element>
36
- </Element>
37
- </Element>
38
- </Element>
39
- </Element>
40
- </Element>
41
- </Element>
42
- </Element>
43
- </Element>
44
- </Window>
45
- <Window visible="false" x="0" y="0" width="414" height="896" indexPath="/0/0/1">
46
- <Element visible="false" x="0" y="0" width="414" height="896" indexPath="/0/0/1/0">
47
- <Element visible="false" x="0" y="0" width="414" height="896" indexPath="/0/0/1/0/0"></Element>
48
- <Element visible="false" x="0" y="896" width="414" height="71" indexPath="/0/0/1/0/1">
49
- <Element visible="false" x="0" y="896" width="414" height="71" indexPath="/0/0/1/0/1/0"></Element>
50
- </Element>
51
- </Element>
52
- </Window>
53
- </App>
54
- </UI>
@@ -1,54 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <UI>
3
- <App visible="true" x="0" y="0" width="414" height="896" axId="TheApp" text="TheApp">
4
- <Window visible="true" x="0" y="0" width="414" height="896">
5
- <Element visible="true" x="0" y="0" width="414" height="896">
6
- <Nav visible="true" x="0" y="48" width="414" height="44" axId="RCCView">
7
- <Button visible="true" x="0" y="48" width="96" height="44" axId="The App" text="The App"></Button>
8
- </Nav>
9
- <Element visible="true" x="0" y="0" width="414" height="896">
10
- <Element visible="true" x="0" y="0" width="414" height="896">
11
- <Element visible="true" x="0" y="92" width="414" height="804">
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="804" axId="Login username password loginBtn" text="Login username password loginBtn">
15
- <Element visible="true" x="0" y="92" width="414" height="273" axId="Login username password loginBtn" text="Login username password loginBtn">
16
- <Text value="Login" visible="true" x="157" y="132" width="101" height="51" axId="Login" text="Login"></Text>
17
- <Element visible="true" x="50" y="183" width="314" height="40" axId="username" text="username">
18
- <Element visible="true" x="50" y="183" width="314" height="40" axId="username" text="username">
19
- <Element visible="true" x="50" y="185" width="314" height="51" axId="username" text="username">
20
- <TextInput value="alice" visible="true" x="50" y="185" width="314" height="51" axId="username" text="username"></TextInput>
21
- <Button visible="true" x="50" y="185" width="314" height="51" axId="fakeTab" text=""></Button>
22
- <Button visible="true" x="50" y="185" width="314" height="51" axId="fakeKey" text=""></Button>
23
- </Element>
24
- </Element>
25
- </Element>
26
- <Element visible="true" x="50" y="223" width="314" height="40" axId="password" text="password">
27
- <Element visible="true" x="50" y="223" width="314" height="40" axId="password" text="password">
28
- <Element visible="true" x="50" y="225" width="314" height="51" axId="password" text="password">
29
- <TextInput value="•••••••••" visible="true" x="50" y="225" width="314" height="51" axId="password" text="password"></TextInput>
30
- </Element>
31
- </Element>
32
- </Element>
33
- <Element visible="true" x="177" y="263" width="60" height="102" axId="loginBtn" text="loginBtn">
34
- <Element visible="true" x="177" y="327" width="60" height="38" axId="loginBtn" text="loginBtn"></Element>
35
- </Element>
36
- </Element>
37
- </Element>
38
- </Element>
39
- </Element>
40
- </Element>
41
- </Element>
42
- </Element>
43
- </Element>
44
- </Window>
45
- <Window visible="false" x="0" y="0" width="414" height="896">
46
- <Element visible="false" x="0" y="0" width="414" height="896">
47
- <Element visible="false" x="0" y="0" width="414" height="896"></Element>
48
- <Element visible="false" x="0" y="896" width="414" height="71">
49
- <Element visible="false" x="0" y="896" width="414" height="71"></Element>
50
- </Element>
51
- </Element>
52
- </Window>
53
- </App>
54
- </UI>
@@ -1,51 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?><AppiumAUT><XCUIElementTypeApplication type="XCUIElementTypeApplication" name="TheApp" label="TheApp" enabled="true" visible="true" x="0" y="0" width="414" height="896" index="0">
2
- <XCUIElementTypeWindow type="XCUIElementTypeWindow" enabled="true" visible="true" x="0" y="0" width="414" height="896" index="0">
3
- <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="0" width="414" height="896" index="0">
4
- <XCUIElementTypeNavigationBar type="XCUIElementTypeNavigationBar" name="RCCView" enabled="true" visible="true" x="0" y="48" width="414" height="44" index="0">
5
- <XCUIElementTypeButton type="XCUIElementTypeButton" name="The App" label="The App" enabled="true" visible="true" x="0" y="48" width="96" height="44" index="0"/>
6
- </XCUIElementTypeNavigationBar>
7
- <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="0" width="414" height="896" index="1">
8
- <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="0" width="414" height="896" index="0">
9
- <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" x="0" y="92" width="414" height="804" index="0">
10
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="Login username password loginBtn" label="Login username password loginBtn" enabled="true" visible="true" x="0" y="92" width="414" height="804" index="0">
11
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="Login username password loginBtn" label="Login username password loginBtn" enabled="true" visible="true" x="0" y="92" width="414" height="804" index="0">
12
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="Login username password loginBtn" label="Login username password loginBtn" enabled="true" visible="true" x="0" y="92" width="414" height="804" index="0">
13
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="Login username password loginBtn" label="Login username password loginBtn" enabled="true" visible="true" x="0" y="92" width="414" height="273" index="0">
14
- <XCUIElementTypeStaticText type="XCUIElementTypeStaticText" value="Login" name="Login" label="Login" enabled="true" visible="true" x="157" y="132" width="101" height="51" index="0"/>
15
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="username" label="username" enabled="true" visible="true" x="50" y="183" width="314" height="40" index="1">
16
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="username" label="username" enabled="true" visible="true" x="50" y="183" width="314" height="40" index="0">
17
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="username" label="username" enabled="true" visible="true" x="50" y="185" width="314" height="51" index="0">
18
- <XCUIElementTypeTextField type="XCUIElementTypeTextField" value="alice" name="username" label="username" enabled="true" visible="true" x="50" y="185" width="314" height="51" index="0"/>
19
- <XCUIElementTypeTab type="XCUIElementTypeTab" name="fakeTab" label="" enabled="" visible="true" x="50" y="185" width="314" height="51" index="1"/>
20
- <XCUIElementTypeKey type="XCUIElementTypeKey" name="fakeKey" label="" enabled="" visible="true" x="50" y="185" width="314" height="51" index="2"/>
21
- </XCUIElementTypeOther>
22
- </XCUIElementTypeOther>
23
- </XCUIElementTypeOther>
24
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="password" label="password" enabled="true" visible="true" x="50" y="223" width="314" height="40" index="2">
25
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="password" label="password" enabled="true" visible="true" x="50" y="223" width="314" height="40" index="0">
26
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="password" label="password" enabled="true" visible="true" x="50" y="225" width="314" height="51" index="0">
27
- <XCUIElementTypeSecureTextField type="XCUIElementTypeSecureTextField" value="•••••••••" name="password" label="password" enabled="true" visible="true" x="50" y="225" width="314" height="51" index="0"/>
28
- </XCUIElementTypeOther>
29
- </XCUIElementTypeOther>
30
- </XCUIElementTypeOther>
31
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="loginBtn" label="loginBtn" enabled="true" visible="true" x="177" y="263" width="60" height="102" index="3">
32
- <XCUIElementTypeOther type="XCUIElementTypeOther" name="loginBtn" label="loginBtn" enabled="true" visible="true" x="177" y="327" width="60" height="38" index="0"/>
33
- </XCUIElementTypeOther>
34
- </XCUIElementTypeOther>
35
- </XCUIElementTypeOther>
36
- </XCUIElementTypeOther>
37
- </XCUIElementTypeOther>
38
- </XCUIElementTypeOther>
39
- </XCUIElementTypeOther>
40
- </XCUIElementTypeOther>
41
- </XCUIElementTypeOther>
42
- </XCUIElementTypeWindow>
43
- <XCUIElementTypeWindow type="XCUIElementTypeWindow" enabled="true" visible="false" x="0" y="0" width="414" height="896" index="1">
44
- <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="false" x="0" y="0" width="414" height="896" index="0">
45
- <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="false" x="0" y="0" width="414" height="896" index="0"/>
46
- <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="false" x="0" y="896" width="414" height="71" index="1">
47
- <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="false" x="0" y="896" width="414" height="71" index="0"/>
48
- </XCUIElementTypeOther>
49
- </XCUIElementTypeOther>
50
- </XCUIElementTypeWindow>
51
- </XCUIElementTypeApplication></AppiumAUT>
@@ -1,76 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- const chai_1 = __importDefault(require("chai"));
16
- const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
17
- const index_1 = __importDefault(require("../../index"));
18
- const appium_base_driver_1 = __importDefault(require("appium-base-driver"));
19
- const fixtures_1 = require("../fixtures");
20
- const xpath_1 = require("../../lib/xpath");
21
- chai_1.default.use(chai_as_promised_1.default);
22
- chai_1.default.should();
23
- describe('UniversalXMLPlugin', function () {
24
- const next = () => true;
25
- const p = new index_1.default();
26
- describe('getPageSource', function () {
27
- const driver = new appium_base_driver_1.default();
28
- it('should transform page source for ios', function () {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- driver.getPageSource = () => fixtures_1.XML_IOS;
31
- driver.caps = { platformName: 'iOS' };
32
- yield p.getPageSource(next, driver).should.eventually.eql(fixtures_1.XML_IOS_TRANSFORMED);
33
- });
34
- });
35
- it('should transform page source for android', function () {
36
- return __awaiter(this, void 0, void 0, function* () {
37
- driver.getPageSource = () => fixtures_1.XML_ANDROID;
38
- driver.caps = { platformName: 'Android' };
39
- driver.opts = { appPackage: 'io.cloudgrey.the_app' };
40
- yield p.getPageSource(next, driver).should.eventually.eql(fixtures_1.XML_ANDROID_TRANSFORMED);
41
- });
42
- });
43
- });
44
- describe('findElement(s)', function () {
45
- const driver = new appium_base_driver_1.default();
46
- it('should turn an xpath query into another query run on the original ios source', function () {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- driver.getPageSource = () => fixtures_1.XML_IOS;
49
- driver.caps = { platformName: 'iOS' };
50
- // mock out the findElement function to just return an xml node from the fixture
51
- driver.findElement = (strategy, selector) => {
52
- const nodes = xpath_1.runQuery(selector, fixtures_1.XML_IOS.replace(/<\/?AppiumAUT>/, ''));
53
- return nodes[0];
54
- };
55
- const node = yield p.findElement(next, driver, 'xpath', '//TextInput[@axId="username"]');
56
- xpath_1.getNodeAttrVal(node, 'value').should.eql('alice');
57
- node.nodeName.should.eql('XCUIElementTypeTextField');
58
- });
59
- });
60
- it('should turn an xpath query into another query run on the original android source', function () {
61
- return __awaiter(this, void 0, void 0, function* () {
62
- driver.getPageSource = () => fixtures_1.XML_ANDROID;
63
- driver.caps = { platformName: 'Android' };
64
- driver.opts = { appPackage: 'io.cloudgrey.the_app' };
65
- driver.findElement = (strategy, selector) => {
66
- const nodes = xpath_1.runQuery(selector, fixtures_1.XML_ANDROID);
67
- return nodes[0];
68
- };
69
- const node = yield p.findElement(next, driver, 'xpath', '//TextInput[@axId="username"]');
70
- xpath_1.getNodeAttrVal(node, 'content-desc').should.eql('username');
71
- node.nodeName.should.eql('android.widget.EditText');
72
- });
73
- });
74
- });
75
- });
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLXNwZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3BsdWdpbi1zcGVjcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUF3QjtBQUN4Qix3RUFBOEM7QUFDOUMsd0RBQTZDO0FBQzdDLDRFQUE0QztBQUM1QywwQ0FBaUc7QUFDakcsMkNBQTJEO0FBRTNELGNBQUksQ0FBQyxHQUFHLENBQUMsMEJBQWMsQ0FBQyxDQUFDO0FBQ3pCLGNBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUVkLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtJQUM3QixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDeEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxlQUFrQixFQUFFLENBQUM7SUFDbkMsUUFBUSxDQUFDLGVBQWUsRUFBRTtRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLDRCQUFVLEVBQUUsQ0FBQztRQUNoQyxFQUFFLENBQUMsc0NBQXNDLEVBQUU7O2dCQUN6QyxNQUFNLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLGtCQUFPLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsRUFBQyxZQUFZLEVBQUUsS0FBSyxFQUFDLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsOEJBQW1CLENBQUMsQ0FBQztZQUNqRixDQUFDO1NBQUEsQ0FBQyxDQUFDO1FBQ0gsRUFBRSxDQUFDLDBDQUEwQyxFQUFFOztnQkFDN0MsTUFBTSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxzQkFBVyxDQUFDO2dCQUN6QyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDO2dCQUN4QyxNQUFNLENBQUMsSUFB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
@@ -1,82 +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
- const chai_1 = __importDefault(require("chai"));
7
- const fixtures_1 = require("../fixtures");
8
- const source_1 = require("../../lib/source");
9
- chai_1.default.should();
10
- describe('source functions', function () {
11
- describe('transformSourceXml', function () {
12
- it('should transform an xml doc based on platform', function () {
13
- const { xml, unknowns: { nodes, attrs } } = source_1.transformSourceXml(fixtures_1.XML_IOS, 'ios');
14
- xml.should.eql(fixtures_1.XML_IOS_TRANSFORMED);
15
- nodes.should.eql([]);
16
- attrs.should.eql([]);
17
- });
18
- it('should transform an xml doc and include index path', function () {
19
- const { xml, unknowns: { nodes, attrs } } = source_1.transformSourceXml(fixtures_1.XML_IOS, 'ios', { addIndexPath: true });
20
- xml.should.eql(fixtures_1.XML_IOS_TRANSFORMED_INDEX_PATH);
21
- nodes.should.eql([]);
22
- attrs.should.eql([]);
23
- });
24
- it('should transform an xml doc and return any unknown nodes or attrs', function () {
25
- const { xml, unknowns: { nodes, attrs } } = source_1.transformSourceXml(fixtures_1.XML_IOS_EDGE, 'ios');
26
- xml.should.eql(fixtures_1.XML_IOS_EDGE_TRANSFORMED);
27
- nodes.should.eql(['SomeRandoElement']);
28
- attrs.should.eql(['oddAttribute']);
29
- });
30
- });
31
- describe('transformChildNodes', function () {
32
- it('should loop through child nodes of an object and transform them based on platform', function () {
33
- const node = { XCUIElementTypeIcon: [{}], XCUIElementTypeKey: [{}], XCUIElementTypeTab: [{}] };
34
- const metadata = {};
35
- source_1.transformChildNodes(node, Object.keys(node), 'ios', metadata).should.eql({ nodes: [], attrs: [] });
36
- node.should.eql({ Button: [{}, {}], Icon: [{}] });
37
- });
38
- it('should leave unknown nodes intact and add them to unknowns list', function () {
39
- const node = { XCUIElementTypeIcon: [{}], UnknownThingo: [{}], XCUIElementTypeTab: [{}] };
40
- const metadata = {};
41
- source_1.transformChildNodes(node, Object.keys(node), 'ios', metadata).should.eql({ nodes: ['UnknownThingo'], attrs: [] });
42
- node.should.eql({ Button: [{}], UnknownThingo: [{}], Icon: [{}] });
43
- });
44
- it('should leave nodes for other platforms intact and add them to unknowns list', function () {
45
- const node = { XCUIElementTypeIcon: [{}], 'android.widget.EditText': [{}], XCUIElementTypeTab: [{}] };
46
- const metadata = {};
47
- source_1.transformChildNodes(node, Object.keys(node), 'ios', metadata).should.eql({ nodes: ['android.widget.EditText'], attrs: [] });
48
- node.should.eql({ Button: [{}], 'android.widget.EditText': [{}], Icon: [{}] });
49
- });
50
- });
51
- describe('transformAttrs', function () {
52
- it('should remove attributes in the REMOVE_ATTRS list', function () {
53
- const obj = { '@_type': 'foo', '@_package': 'yes', '@_class': 'lol' };
54
- const attrs = Object.keys(obj);
55
- const unknowns = source_1.transformAttrs(obj, attrs, 'ios');
56
- obj.should.eql({});
57
- unknowns.should.eql([]);
58
- });
59
- it('should translate attributes for the platform', function () {
60
- const obj = { '@_type': 'foo', '@_resource-id': 'someId' };
61
- const attrs = Object.keys(obj);
62
- const unknowns = source_1.transformAttrs(obj, attrs, 'android');
63
- obj.should.eql({ '@_id': 'someId' });
64
- unknowns.should.eql([]);
65
- });
66
- it('should not translate unknown attributes and return them in the unknowns list', function () {
67
- const obj = { '@_type': 'foo', '@_resource-id': 'someId', '@_rando': 'lorian' };
68
- const attrs = Object.keys(obj);
69
- const unknowns = source_1.transformAttrs(obj, attrs, 'android');
70
- obj.should.eql({ '@_id': 'someId', '@_rando': 'lorian' });
71
- unknowns.should.eql(['rando']);
72
- });
73
- it('should not translate attributes for a different platform', function () {
74
- const obj = { '@_type': 'foo', '@_resource-id': 'someId' };
75
- const attrs = Object.keys(obj);
76
- const unknowns = source_1.transformAttrs(obj, attrs, 'ios');
77
- obj.should.eql({ '@_resource-id': 'someId' });
78
- unknowns.should.eql(['resource-id']);
79
- });
80
- });
81
- });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLXNwZWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3NvdXJjZS1zcGVjcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGdEQUF3QjtBQUN4QiwwQ0FDcUU7QUFDckUsNkNBQTJGO0FBRTNGLGNBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUVkLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtJQUMzQixRQUFRLENBQUMsb0JBQW9CLEVBQUU7UUFDN0IsRUFBRSxDQUFDLCtDQUErQyxFQUFFO1lBQ2xELE1BQU0sRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxFQUFDLEdBQUcsMkJBQWtCLENBQUMsa0JBQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMzRSxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyw4QkFBbUIsQ0FBQyxDQUFDO1lBQ3BDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsRUFBRSxDQUFDLG9EQUFvRCxFQUFFO1lBQ3ZELE1BQU0sRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxFQUFDLEdBQUcsMkJBQWtCLENBQUMsa0JBQU8sRUFBRSxLQUFLLEVBQUUsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztZQUNqRyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5Q0FBOEIsQ0FBQyxDQUFDO1lBQy9DLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLENBQUMs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
@@ -1,46 +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
- const chai_1 = __importDefault(require("chai"));
7
- const xpath_1 = require("../../lib/xpath");
8
- const source_1 = require("../../lib/source");
9
- const fixtures_1 = require("../fixtures");
10
- const should = chai_1.default.should();
11
- describe('xpath functions', function () {
12
- describe('runQuery', function () {
13
- it('should run an xpath query on an XML string and return nodes', function () {
14
- xpath_1.runQuery('//*', fixtures_1.XML_IOS).should.have.length(31);
15
- xpath_1.runQuery('//XCUIElementTypeTextField', fixtures_1.XML_IOS).should.have.length(1);
16
- });
17
- });
18
- describe('transformQuery', function () {
19
- it('should transform a query into a single new query', function () {
20
- const { xml } = source_1.transformSourceXml(fixtures_1.XML_IOS, 'ios', { addIndexPath: true });
21
- xpath_1.transformQuery('//TextInput', xml, false)
22
- .should.eql('/*[1]/*[1]/*[1]/*[1]/*[2]/*[1]/*[1]/*[1]/*[1]/*[1]/*[1]/*[2]/*[1]/*[1]/*[1]');
23
- });
24
- it('should transform a query into a multiple new queries if asked', function () {
25
- const { xml } = source_1.transformSourceXml(fixtures_1.XML_IOS, 'ios', { addIndexPath: true });
26
- xpath_1.transformQuery('//Window', xml, true)
27
- .split('|')
28
- .should.have.length(2);
29
- });
30
- it('should return null for queries that dont find anything', function () {
31
- const { xml } = source_1.transformSourceXml(fixtures_1.XML_IOS, 'ios', { addIndexPath: true });
32
- should.not.exist(xpath_1.transformQuery('//blah', xml, false));
33
- });
34
- });
35
- describe('getNodeAttrVal', function () {
36
- it('should get the attribute for a node', function () {
37
- const node = xpath_1.runQuery('//XCUIElementTypeTextField', fixtures_1.XML_IOS)[0];
38
- xpath_1.getNodeAttrVal(node, 'name').should.eql('username');
39
- });
40
- it('should throw an error if the attr does not exist', function () {
41
- const node = xpath_1.runQuery('//XCUIElementTypeTextField', fixtures_1.XML_IOS)[0];
42
- should.throw(() => xpath_1.getNodeAttrVal(node, 'foo'));
43
- });
44
- });
45
- });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHBhdGgtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQveHBhdGgtc3BlY3MuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnREFBd0I7QUFDeEIsMkNBQTJFO0FBQzNFLDZDQUFzRDtBQUN0RCwwQ0FBc0M7QUFFdEMsTUFBTSxNQUFNLEdBQUcsY0FBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRTdCLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRTtJQUMxQixRQUFRLENBQUMsVUFBVSxFQUFFO1FBQ25CLEVBQUUsQ0FBQyw2REFBNkQsRUFBRTtZQUNoRSxnQkFBUSxDQUFDLEtBQUssRUFBRSxrQkFBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDaEQsZ0JBQVEsQ0FBQyw0QkFBNEIsRUFBRSxrQkFBTyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtRQUN6QixFQUFFLENBQUMsa0RBQWtELEVBQUU7WUFDckQsTUFBTSxFQUFDLEdBQUcsRUFBQyxHQUFHLDJCQUFrQixDQUFDLGtCQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDdkUsc0JBQWMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQztpQkFDdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUFDO1FBQ0gsRUFBRSxDQUFDLCtEQUErRCxFQUFFO1lBQ2xFLE1BQU0sRUFBQyxHQUFHLEVBQUMsR0FBRywyQkFBa0IsQ0FBQyxrQkFBTyxFQUFFLEtBQUssRUFBRSxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1lBQ3ZFLHNCQUFjLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7aUJBQ2xDLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsd0RBQXdELEVBQUU7WUFDM0QsTUFBTSxFQUFDLEdBQUcsRUFBQyxHQUFHLDJCQUFrQixDQUFDLGtCQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsc0JBQWMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBRSxnQkFBZ0IsRUFBRTtRQUMxQixFQUFFLENBQUMscUNBQXFDLEVBQUU7WUFDeEMsTUFBTSxJQUFJLEdBQUcsZ0JBQVEsQ0FBQyw0QkFBNEIsRUFBRSxrQkFBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsc0JBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyxrREFBa0QsRUFBRTtZQUNyRCxNQUFNLElBQUksR0FBRyxnQkFBUSxDQUFDLDRCQUE0QixFQUFFLGtCQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIn0=
@@ -1,39 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <UI width="1080" height="1920" indexPath="/0">
3
- <View text="" indexPath="/0/0" x="0" y="0" width="1080" height="1920" visible="true">
4
- <View text="" indexPath="/0/0/0" x="0" y="0" width="1080" height="1920" visible="true">
5
- <View text="" indexPath="/0/0/0/0" x="0" y="72" width="1080" height="1848" visible="true">
6
- <View text="" indexPath="/0/0/0/0/0" x="0" y="72" width="1080" height="1848" id="action_bar_root" visible="true">
7
- <View text="" indexPath="/0/0/0/0/0/0" x="0" y="72" width="1080" height="1848" id="android:id/content" visible="true">
8
- <View text="" indexPath="/0/0/0/0/0/0/0" x="0" y="72" width="1080" height="1848" visible="true">
9
- <View text="" indexPath="/0/0/0/0/0/0/0/0" x="0" y="72" width="1080" height="1848" visible="true"></View>
10
- <View text="" indexPath="/0/0/0/0/0/0/0/1" x="0" y="72" width="1080" height="1848" visible="true">
11
- <View text="" indexPath="/0/0/0/0/0/0/0/1/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" x="0" y="72" width="1080" height="168" visible="true">
13
- <View text="" indexPath="/0/0/0/0/0/0/0/1/0/0/0" x="0" y="72" width="1080" height="168" visible="true">
14
- <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>
15
- </View>
16
- </View>
17
- </View>
18
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1" x="0" y="240" width="1080" height="1680" visible="true">
19
- <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>
20
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1/1" x="150" y="496" width="780" height="120" visible="true">
21
- <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>
22
- </View>
23
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1/2" x="150" y="616" width="780" height="120" visible="true">
24
- <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>
25
- </View>
26
- <View text="" indexPath="/0/0/0/0/0/0/0/1/1/3" x="456" y="736" width="168" height="113" visible="true">
27
- <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">
28
- <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>
29
- </View>
30
- </View>
31
- </View>
32
- </View>
33
- </View>
34
- </View>
35
- </View>
36
- </View>
37
- </View>
38
- </View>
39
- </UI>
@@ -1,39 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <UI width="1080" height="1920">
3
- <View text="" x="0" y="0" width="1080" height="1920" visible="true">
4
- <View text="" x="0" y="0" width="1080" height="1920" visible="true">
5
- <View text="" x="0" y="72" width="1080" height="1848" visible="true">
6
- <View text="" x="0" y="72" width="1080" height="1848" id="action_bar_root" visible="true">
7
- <View text="" x="0" y="72" width="1080" height="1848" id="android:id/content" visible="true">
8
- <View text="" x="0" y="72" width="1080" height="1848" visible="true">
9
- <View text="" x="0" y="72" width="1080" height="1848" visible="true"></View>
10
- <View text="" x="0" y="72" width="1080" height="1848" 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
- <View text="" x="0" y="72" width="1080" height="168" visible="true">
14
- <Button text="" x="0" y="72" width="168" height="168" visible="true"></Button>
15
- </View>
16
- </View>
17
- </View>
18
- <View text="" x="0" y="240" width="1080" height="1680" visible="true">
19
- <Text text="Login" x="413" y="360" width="255" height="136" visible="true"></Text>
20
- <View text="" x="150" y="496" width="780" height="120" visible="true">
21
- <TextInput text="alice" x="150" y="504" width="780" height="112" axId="username" visible="true"></TextInput>
22
- </View>
23
- <View text="" x="150" y="616" width="780" height="120" visible="true">
24
- <TextInput text="•••••••••" x="150" y="624" width="780" height="112" axId="password" visible="true"></TextInput>
25
- </View>
26
- <View text="" x="456" y="736" width="168" height="113" visible="true">
27
- <View text="" x="456" y="736" width="168" height="113" axId="loginBtn" visible="true">
28
- <Text text="Login" x="456" y="736" width="168" height="113" visible="true"></Text>
29
- </View>
30
- </View>
31
- </View>
32
- </View>
33
- </View>
34
- </View>
35
- </View>
36
- </View>
37
- </View>
38
- </View>
39
- </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,14 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
-
4
- const XML_IOS = fs.readFileSync(path.resolve(__dirname, 'ios.xml'), 'utf8').trim();
5
- const XML_IOS_TRANSFORMED = fs.readFileSync(path.resolve(__dirname, 'ios-transformed.xml'), 'utf8').trim();
6
- const XML_IOS_TRANSFORMED_INDEX_PATH = fs.readFileSync(path.resolve(__dirname, 'ios-transformed-path.xml'), 'utf8').trim();
7
- const XML_IOS_EDGE = fs.readFileSync(path.resolve(__dirname, 'ios-edge.xml'), 'utf8').trim();
8
- const XML_IOS_EDGE_TRANSFORMED = fs.readFileSync(path.resolve(__dirname, 'ios-transformed-edge.xml'), 'utf8').trim();
9
- const XML_ANDROID = fs.readFileSync(path.resolve(__dirname, 'android.xml'), 'utf8').trim();
10
- const XML_ANDROID_TRANSFORMED = fs.readFileSync(path.resolve(__dirname, 'android-transformed.xml'), 'utf8').trim();
11
- const XML_ANDROID_TRANSFORMED_INDEX_PATH = fs.readFileSync(path.resolve(__dirname, 'android-transformed-path.xml'), 'utf8').trim();
12
-
13
- export { XML_IOS, XML_ANDROID, XML_IOS_TRANSFORMED, XML_ANDROID_TRANSFORMED, XML_IOS_TRANSFORMED_INDEX_PATH,
14
- XML_ANDROID_TRANSFORMED_INDEX_PATH, XML_IOS_EDGE, XML_IOS_EDGE_TRANSFORMED };
@@ -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>