@winning-test/component 0.0.3 → 0.0.5
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.
- package/package.json +2 -2
- package/winex60/component/Component.js +23 -0
- package/winex60/component/DialogComponent.js +2 -213
- package/winex60/component/TableComponent.js +1 -1
- package/winex60/page/Page.js +18 -2
- package/winex60/test/component.test.js +45 -23
- package/winex60/test/component.test.json +13 -0
- package/winex60/test/select.test.js +0 -26
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@winning-test/component",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "",
|
|
6
6
|
"scripts": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"author": "",
|
|
14
14
|
"license": "ISC",
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@winning-test/autotest-webui": "^0.1.
|
|
16
|
+
"@winning-test/autotest-webui": "^0.1.35"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@types/jest": "^29.5.1",
|
|
@@ -73,6 +73,29 @@ class Component extends require("@winning-test/autotest-webui/src/Component") {
|
|
|
73
73
|
await super.waitUntilBeVisible();
|
|
74
74
|
await this.browser.sleep(Component.delayTime);
|
|
75
75
|
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 鼠标移动到组件后悬停
|
|
79
|
+
*/
|
|
80
|
+
async moveMouseTo() {
|
|
81
|
+
await this.browser.moveMouseTo(this.getXpath());
|
|
82
|
+
await this.browser.sleep(Component.delayTime);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* 是否显示, 在等待时间内显示, 返回true, 否则返回false
|
|
87
|
+
* @param {Number} timeout 等待时间, 单位: ms
|
|
88
|
+
*/
|
|
89
|
+
async isDisplayed(timeout) {
|
|
90
|
+
return await this.browser.isDisplayed(this.getXpath(), timeout);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* 滚动页面到元素位置
|
|
95
|
+
*/
|
|
96
|
+
async scrollIntoView() {
|
|
97
|
+
(await this.browser.findElement(this.getXpath())).scrollIntoView();
|
|
98
|
+
}
|
|
76
99
|
}
|
|
77
100
|
|
|
78
101
|
module.exports = Component;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 对话框组件类
|
|
3
3
|
* @作者 MaoJJ
|
|
4
4
|
*/
|
|
5
|
-
class DialogComponent extends require("./
|
|
5
|
+
class DialogComponent extends require("./BlockComponent") {
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* 对话框组件
|
|
@@ -10,7 +10,7 @@ class DialogComponent extends require("./Component") {
|
|
|
10
10
|
* @param {String} title 标题
|
|
11
11
|
*/
|
|
12
12
|
constructor(browser, title) {
|
|
13
|
-
super(browser);
|
|
13
|
+
super(browser, null, null);
|
|
14
14
|
this.title = title;
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -18,217 +18,6 @@ class DialogComponent extends require("./Component") {
|
|
|
18
18
|
return `//*[contains(normalize-space(text()),'${this.title}')]/ancestor::*[@role='dialog']`;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
/**
|
|
22
|
-
* 获取块组件
|
|
23
|
-
* @param {String} id id
|
|
24
|
-
* @param {String} xpath xpath
|
|
25
|
-
* @returns 块组件
|
|
26
|
-
*/
|
|
27
|
-
blockComponent(id, xpath) {
|
|
28
|
-
let that = this;
|
|
29
|
-
class BlockComponent extends require("./BlockComponent") {
|
|
30
|
-
_createRootXpath() {
|
|
31
|
-
return that.getXpath();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return new BlockComponent(this.browser, id, xpath);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* 获取按钮组件
|
|
39
|
-
* @param {String} text 文本
|
|
40
|
-
* @returns 按钮组件
|
|
41
|
-
*/
|
|
42
|
-
buttonComponent(text) {
|
|
43
|
-
let that = this;
|
|
44
|
-
class ButtonComponent extends require("./ButtonComponent") {
|
|
45
|
-
_createRootXpath() {
|
|
46
|
-
return that.getXpath();
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
return new ButtonComponent(this.browser, text);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* 获取级联选择器组件
|
|
54
|
-
* @param {String} placeholder 背景文字
|
|
55
|
-
* @param {String} label 标签
|
|
56
|
-
* @returns 级联选择器组件
|
|
57
|
-
*/
|
|
58
|
-
cascaderComponent(placeholder, label) {
|
|
59
|
-
let that = this;
|
|
60
|
-
class CascaderComponent extends require("./CascaderComponent") {
|
|
61
|
-
_createRootXpath() {
|
|
62
|
-
return that.getXpath();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return new CascaderComponent(this.browser, placeholder, label);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* 获取复选框组件
|
|
70
|
-
* @param {String} text 文本
|
|
71
|
-
* @returns 复选框组件
|
|
72
|
-
*/
|
|
73
|
-
checkboxComponent(text) {
|
|
74
|
-
let that = this;
|
|
75
|
-
class CheckboxComponent extends require("./CheckboxComponent") {
|
|
76
|
-
_createRootXpath() {
|
|
77
|
-
return that.getXpath();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return new CheckboxComponent(this.browser, text);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* 获取对话框组件
|
|
85
|
-
* @param {String} title 标题
|
|
86
|
-
* @returns 对话框组件
|
|
87
|
-
*/
|
|
88
|
-
dialogComponent(title) {
|
|
89
|
-
let that = this;
|
|
90
|
-
class DialogComponent extends require("./DialogComponent") {
|
|
91
|
-
_createRootXpath() {
|
|
92
|
-
return that.getXpath();
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return new DialogComponent(this.browser, title);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* 获取输入框组件
|
|
100
|
-
* @param {String} placeholder 背景文字
|
|
101
|
-
* @param {String} label 标签
|
|
102
|
-
* @returns 输入框组件
|
|
103
|
-
*/
|
|
104
|
-
inputComponent(placeholder, label) {
|
|
105
|
-
let that = this;
|
|
106
|
-
class InputComponent extends require("./InputComponent") {
|
|
107
|
-
_createRootXpath() {
|
|
108
|
-
return that.getXpath();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return new InputComponent(this.browser, placeholder, label);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* 获取左侧菜单组件
|
|
116
|
-
* @returns 左侧菜单组件
|
|
117
|
-
*/
|
|
118
|
-
leftMenuComponent() {
|
|
119
|
-
let that = this;
|
|
120
|
-
class LeftMenuComponent extends require("./LeftMenuComponent") {
|
|
121
|
-
_createRootXpath() {
|
|
122
|
-
return that.getXpath();
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return new LeftMenuComponent(this.browser);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* 获取列表组件
|
|
130
|
-
* @returns 列表组件
|
|
131
|
-
*/
|
|
132
|
-
listComponent() {
|
|
133
|
-
let that = this;
|
|
134
|
-
class ListComponent extends require("./ListComponent") {
|
|
135
|
-
_createRootXpath() {
|
|
136
|
-
return that.getXpath();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return new ListComponent(this.browser);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* 获取消息组件
|
|
144
|
-
* @param {Stirng} text 文本
|
|
145
|
-
* @returns 消息组件
|
|
146
|
-
*/
|
|
147
|
-
messageComponent(text) {
|
|
148
|
-
let that = this;
|
|
149
|
-
class MessageComponent extends require("./MessageComponent") {
|
|
150
|
-
_createRootXpath() {
|
|
151
|
-
return that.getXpath();
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
return new MessageComponent(this.browser, text);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* 获取单选框组件
|
|
159
|
-
* @param {Stirng} label 标签
|
|
160
|
-
* @returns 单选框组件
|
|
161
|
-
*/
|
|
162
|
-
radioComponent(label) {
|
|
163
|
-
let that = this;
|
|
164
|
-
class RadioComponent extends require("./RadioComponent") {
|
|
165
|
-
_createRootXpath() {
|
|
166
|
-
return that.getXpath();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
return new RadioComponent(this.browser, label);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* 获取选择器组件
|
|
174
|
-
* @param {String} placeholder 背景文字
|
|
175
|
-
* @param {String} label 标签
|
|
176
|
-
* @returns 选择器组件
|
|
177
|
-
*/
|
|
178
|
-
selectComponent(placeholder, label) {
|
|
179
|
-
let that = this;
|
|
180
|
-
class SelectComponent extends require("./SelectComponent") {
|
|
181
|
-
_createRootXpath() {
|
|
182
|
-
return that.getXpath();
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
return new SelectComponent(this.browser, placeholder, label);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* 获取开关组件
|
|
190
|
-
* @param {String} label 标签
|
|
191
|
-
* @returns 开关组件
|
|
192
|
-
*/
|
|
193
|
-
switchComponent(label) {
|
|
194
|
-
let that = this;
|
|
195
|
-
class SwitchComponent extends require("./SwitchComponent") {
|
|
196
|
-
_createRootXpath() {
|
|
197
|
-
return that.getXpath();
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
return new SwitchComponent(this.browser, label);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* 获取表格组件
|
|
205
|
-
* @returns 表格组件
|
|
206
|
-
*/
|
|
207
|
-
tableComponent() {
|
|
208
|
-
let that = this;
|
|
209
|
-
class TableComponent extends require("./TableComponent") {
|
|
210
|
-
_createRootXpath() {
|
|
211
|
-
return that.getXpath();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return new TableComponent(this.browser);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* 获取文本组件
|
|
219
|
-
* @param {String} text 文本
|
|
220
|
-
* @returns 文本组件
|
|
221
|
-
*/
|
|
222
|
-
textComponent(text) {
|
|
223
|
-
let that = this;
|
|
224
|
-
class TextComponent extends require("./TextComponent") {
|
|
225
|
-
_createRootXpath() {
|
|
226
|
-
return that.getXpath();
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
return new TextComponent(this.browser, text);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
21
|
}
|
|
233
22
|
|
|
234
23
|
module.exports = DialogComponent;
|
|
@@ -23,7 +23,7 @@ class TableComponent extends require("./Component") {
|
|
|
23
23
|
async getTableData() {
|
|
24
24
|
let ret = [];
|
|
25
25
|
let xpath = `(${this.getXpath()}//tbody)[1]/tr[1]`;
|
|
26
|
-
await
|
|
26
|
+
await this.browser.findElement(xpath);
|
|
27
27
|
xpath = `(${this.getXpath()}//thead)[1]/tr/th`;
|
|
28
28
|
let titles = await this.browser.findElements(xpath);
|
|
29
29
|
for (let i = 0; i < titles.length; i++) {
|
package/winex60/page/Page.js
CHANGED
|
@@ -149,8 +149,24 @@ class Page extends require("@winning-test/autotest-webui").Page {
|
|
|
149
149
|
* @param {String} label 标签
|
|
150
150
|
* @returns 单选框组件
|
|
151
151
|
*/
|
|
152
|
-
radioComponent(label){
|
|
153
|
-
return new RadioComponent(this.browser,label)
|
|
152
|
+
radioComponent(label) {
|
|
153
|
+
return new RadioComponent(this.browser, label)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* 切入iframe
|
|
158
|
+
* @param {Sting} xpath xpath
|
|
159
|
+
*/
|
|
160
|
+
async switchToFrame(xpath = "//iframe") {
|
|
161
|
+
xpath += "[not (ancestor-or-self::*[contains(@style,'display: none')])]"
|
|
162
|
+
await this.browser.switchToFrame(xpath);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* 切出iframe
|
|
167
|
+
*/
|
|
168
|
+
async switchToDefult() {
|
|
169
|
+
await this.browser.switchToFrame();
|
|
154
170
|
}
|
|
155
171
|
|
|
156
172
|
}
|
|
@@ -1,36 +1,58 @@
|
|
|
1
1
|
const { Browser, Key } = require("@winning-test/autotest-webui");
|
|
2
|
-
const
|
|
2
|
+
const config = require("./component.test.json");
|
|
3
|
+
const Page = require("../page/Page")
|
|
3
4
|
const browser = new Browser();
|
|
4
5
|
|
|
5
6
|
beforeAll(async () => {
|
|
6
7
|
await browser.maximize();
|
|
7
|
-
await browser.get(
|
|
8
|
-
browser.config.screenshot.isEnabled = true;
|
|
8
|
+
await browser.get(config.url);
|
|
9
9
|
})
|
|
10
10
|
|
|
11
|
-
test("
|
|
11
|
+
test("input/button/text", async () => {
|
|
12
12
|
const page = new Page(browser);
|
|
13
|
-
await page.inputComponent("在此键入您的工号/账号").
|
|
14
|
-
await page.inputComponent("
|
|
15
|
-
await page.inputComponent("请输入您的密码").input("abcd@1234");
|
|
16
|
-
await page.selectComponent("在此选择院区").select("【UAT】西直门院区");
|
|
17
|
-
await page.selectComponent("请选择系统").select("基础业务管理");
|
|
18
|
-
await page.checkboxComponent("保存账号").select();
|
|
13
|
+
await page.inputComponent("在此键入您的工号/账号").input(config.user.admin.username);
|
|
14
|
+
await page.inputComponent("请输入您的密码").input(config.user.admin.password);
|
|
19
15
|
await page.buttonComponent("登录").click();
|
|
20
|
-
await page.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
await page.inputComponent("请刷入条形码").input("MAOJJ888999", Key.ENTER);
|
|
24
|
-
await browser.sleep(500);
|
|
25
|
-
const value = await page.inputComponent("请输入卡号").getAttribute("value");
|
|
26
|
-
expect(value).toBe("MAOJJ888999");
|
|
27
|
-
await page.cascaderComponent("请选择现住址").select("上海市", "浦东新区", "三林镇");
|
|
28
|
-
await page.selectComponent(null,"证件信息").select("其他法定有效证件");
|
|
16
|
+
if (await page.messageComponent("未经处理的异常").isDisplayed(1000)){
|
|
17
|
+
await page.buttonComponent("登录").click();
|
|
18
|
+
}
|
|
29
19
|
})
|
|
30
20
|
|
|
31
|
-
test("
|
|
21
|
+
test("dialog/checkbox", async () => {
|
|
32
22
|
const page = new Page(browser);
|
|
33
|
-
await page.
|
|
34
|
-
|
|
35
|
-
|
|
23
|
+
await page.blockComponent(null, "//*[@class='application-name']").click();
|
|
24
|
+
await page.textComponent("门诊医生站").click();
|
|
25
|
+
await page.dialogComponent("就诊科目").waitUntilBeVisible();
|
|
26
|
+
await page.dialogComponent("就诊科目").checkboxComponent("全选").select();
|
|
27
|
+
await page.dialogComponent("就诊科目").checkboxComponent("全选").unselect();
|
|
28
|
+
await page.dialogComponent("就诊科目").checkboxComponent("内科").select();
|
|
29
|
+
await page.dialogComponent("就诊科目").buttonComponent("确定").click();
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test("blockComponent/table/select/list", async () => {
|
|
33
|
+
const page = new Page(browser);
|
|
34
|
+
await page.textComponent("患者列表").click();
|
|
35
|
+
await page.blockComponent("header-search").waitUntilBeVisible();
|
|
36
|
+
const tableData = await page.blockComponent("header-search").tableComponent().getTableData();
|
|
37
|
+
console.log(tableData);
|
|
38
|
+
await page.blockComponent("header-search").selectComponent(null, "时间筛选").select("本月");
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
test("switch", async () => {
|
|
42
|
+
const page = new Page(browser);
|
|
43
|
+
await page.blockComponent(null, "//*[@class='application-name']").click();
|
|
44
|
+
await page.textComponent("配置管理").click();
|
|
45
|
+
await page.blockComponent(null,"//*[@class='left-menu']").waitUntilBeVisible();
|
|
46
|
+
await page.blockComponent(null,"//*[@class='left-menu']").moveMouseTo();
|
|
47
|
+
await page.blockComponent(null,"//*[@class='left-menu']").textComponent("主数据").isDisplayed(3000)
|
|
48
|
+
await page.blockComponent(null,"//*[@class='left-menu']").textComponent("主数据").click();
|
|
49
|
+
await page.blockComponent(null,"//*[@class='left-menu']").textComponent("资源").isDisplayed(3000)
|
|
50
|
+
await page.blockComponent(null,"//*[@class='left-menu']").textComponent("资源").click();
|
|
51
|
+
await page.blockComponent(null,"//*[@class='left-menu']").textComponent("员工").isDisplayed(3000);
|
|
52
|
+
await page.blockComponent(null,"//*[@class='left-menu']").textComponent("员工").click();
|
|
53
|
+
await page.switchToFrame();
|
|
54
|
+
await page.buttonComponent("新建员工").click();
|
|
55
|
+
await page.switchComponent("员工状态").scrollIntoView();
|
|
56
|
+
await page.switchComponent("员工状态").off();
|
|
57
|
+
await page.switchComponent("员工状态").on();
|
|
36
58
|
})
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
const { Browser, Key } = require("@winning-test/autotest-webui");
|
|
2
|
-
const Page = require("../page/Page");
|
|
3
|
-
const browser = new Browser();
|
|
4
|
-
|
|
5
|
-
test("select测试", async () => {
|
|
6
|
-
for (let i = 0; i < 5; i++) {
|
|
7
|
-
await browser.maximize();
|
|
8
|
-
await browser.get("http://127.0.0.1:7239/portal/login#/login");
|
|
9
|
-
const page = new Page(browser);
|
|
10
|
-
await page.inputComponent("在此键入您的工号/账号").waitUntilBeVisible();
|
|
11
|
-
await page.inputComponent("在此键入您的工号/账号").clear();
|
|
12
|
-
await page.inputComponent("在此键入您的工号/账号").input("11188");
|
|
13
|
-
await page.inputComponent("请输入您的密码").clear();
|
|
14
|
-
await page.inputComponent("请输入您的密码").input("abcd@1234");
|
|
15
|
-
await page.selectComponent("在此选择院区").select("【UAT】西直门院区");
|
|
16
|
-
await page.selectComponent("请选择系统").select("基础业务管理");
|
|
17
|
-
await page.buttonComponent("登录").click();
|
|
18
|
-
await page.leftMenuComponent().select("门诊收费", "日常工作", "挂号登记");
|
|
19
|
-
await page.dialogComponent("收费窗口").selectComponent("请选择诊疗区域").select("急诊");
|
|
20
|
-
await page.dialogComponent("收费窗口").selectComponent("请选择").select("【全部】支付窗口");
|
|
21
|
-
const xpath = page.dialogComponent("收费窗口").selectComponent("请选择").getXpath();
|
|
22
|
-
const value = await (await browser.findElement(xpath)).getValue();
|
|
23
|
-
expect(value.trim()).toBe("【全部】支付窗口")
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
})
|