summaryrefslogtreecommitdiff
path: root/keyword/common/page.robot
blob: 0d745ff39b2f96450f0ba2bfd58630e4af856e8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
*** Settings ***
Library           yaml
Library           OperatingSystem
Library           Selenium2Library
Library           Collections
Library           String
Resource          ../../variable/common_variable.txt
Library           ../../customlib/common/type_judgment.py

*** Keywords ***
YamlLoad
    [Arguments]    ${filepath}
    [Documentation]    读取yaml文件
    ...    ${filepath}:文件路径
    ${yaml}=  Get File  ${filepath}
    ${loaded}=  yaml.Safe Load  ${yaml}
    [Return]    ${loaded}

CreateOrEditPage
    [Arguments]    ${elementList}    ${dataList}    ${openCreateOrEditPage}    ${okOrCance}
    [Documentation]    完整的打开创建或者修改数据页面,并进行操作(创建数据、修改数据)
    ...    ${elementList}:模板的PageData数据,格式:[{id=responsepages_profileName1,value=testname}]
    ...    ${dataList}:数据文件中的数据,格式[[id=responsepages_profileName1,value=testname]]
    ...    ${openCreateOrEditPage}:模板文件中openCreateOrEditPage数据
    ...    ${okOrCance}:模板文件中okOrCancel的数据
    #判断是否出现弹出框
    ${operatingType}    Set Variable    ${1}
    FOR    ${data}    IN    @{dataList}
        ${operatingType}    Get From Dictionary    ${data}    operatingType
        Run keyword if    "${operatingType}" == "create" or "${operatingType}" == "edit" or "${operatingType}" == "createGroup"    run keywords    log    执行用例
        ...    AND    OperatPage    ${elementList}    ${data}    ${openCreateOrEditPage}
        ...    AND    OkOrCancel    ${okOrCance}    ${data}
    END
    ${deletePosition}    Get From Dictionary    ${okOrCance}    delete
    Run keyword if    "${operatingType}" == "create" or "${operatingType}" == "edit" or "${operatingType}" == "createGroup"    run keywords    log    执行用例
    ...    AND    DeleteData    ${deletePosition}

OperatPage
    [Arguments]    ${elementList}    ${pData}    ${openCreateOrEditPage}=1
    [Documentation]    打开创建或者修改数据页面,输入数据
    ...    ${elementList}:模板的PageData数据,格式:[{id=responsepages_profileName1,value=testname}]
    ...    ${pData}:数据文件中的数据,格式[id=responsepages_profileName1,value=testname]
    ...    ${openCreateOrEditPage}:模板文件中openCreateOrEditPage数据
    ${dataType}    Evaluate    type(${openCreateOrEditPage})
    ${openType}    Run keyword if    "${dataType}" == "<class 'dict'>"    Get From Dictionary    ${pData}    operatingType
    Run keyword if    "${dataType}" == "<class 'dict'>"    run keywords    log    打开创建页面
    ...    AND    OpenCreateOREdit    ${openCreateOrEditPage}[${openType}]
    FOR    ${element}    IN    @{elementList}
        ${type}    Get From Dictionary    ${element}    type
        ${return}    ${elementId}    Run Keyword And Ignore Error    Get From Dictionary    ${element}    position
        ${elementId}    Run Keyword If    "${return}"=="FAIL"    set variable    null
        ...    ELSE    set variable    ${elementId}
        ${value}    Get From Dictionary    ${element}    value
        ${return}    ${elementValue}    Run Keyword And Ignore Error    Get From Dictionary    ${pData}    ${value}
        ${elementValue}    Run Keyword If    "${return}"=="FAIL"    set variable    null
        ...    ELSE    set variable    ${elementValue}
        ${return}    ${elementData}    Run Keyword And Ignore Error    Get From Dictionary    ${element}    data
        ${elementData}    Run Keyword If    "${return}"=="FAIL"    set variable    null
        ...    ELSE    set variable    ${elementData}
        ${return}    ${default}    Run Keyword And Ignore Error    Get From Dictionary    ${element}    default
        ${default}    Run Keyword If    "${return}"=="FAIL" or "${default}"=="${EMPTY}"    set variable    null
        ...    ELSE    set variable    ${default}
        Run Keyword IF    "${elementValue}" != "null"    run keywords    log    执行操作
        ...    AND    Operation    ${type}    ${elementId}    ${elementValue}    ${elementData}    ${default}
    END   
     
OpenCreateOREdit
    [Arguments]    ${menuIdList}
    [Documentation]    点击新增或修改按钮
    ...   ${menuIdList}:打开目标界面需要点击的所有按钮,顺序输入
    
    FOR    ${menuId}    IN    @{menuIdList}
        sleep    ${sleep}
        #Wait Until Element Is Enabled    id=${menuId}    ${sleep_Wait}
        click element    ${menuId}
    END
    sleep    ${sleep}
    
Operation
    [Arguments]    ${type}    ${positioning}    ${dataValue}=null    ${elementData}=null    ${default}=null
    [Documentation]  根据type进行操作
    ...    ${type}:操作类型
    ...    ${positioning}:操作的元素定位信息
    ...    ${dataValue}:输入、或者上传的数据信息
    ...    ${elementData} :  模板中的PageData中的data数据,当数据为嵌套数据时有该字段
    
    Run Keyword If    "${type}" == "input"    input text	${positioning}    ${dataValue}
    ...    ELSE IF    "${type}" == "upload"    Choose File    ${positioning}    ${path}data/scriptfile/${dataValue} 
    ...    ELSE IF    "${type}" == "combination"    run keywords    log    嵌套操作
    ...    AND    OperatCombinationData    ${dataValue}    ${elementData}    ${positioning}
    ...    ELSE IF    "${type}" == "combinationAfter"    run keywords    log    嵌套操作第二种
    ...    AND    OperatCombinationData2    ${dataValue}    ${elementData}    ${positioning}
    ...    ELSE IF    "${type}" == "click"    run keywords    log    点击按钮
    ...    AND    click element    ${positioning}
    ...    AND    sleep    ${sleep}
    ...    ELSE IF    "${type}" == "clickTexts"    run keywords    log    点击多个文本
    ...    AND    ClickTexts    ${dataValue}
    ...    ELSE IF    "${type}" == "clickText"    run keywords    log    点击单个文本
    ...    AND    ClickText    ${dataValue}
    ...    ELSE IF    "${type}" == "columnSetup"    run keywords    log    点击列设置中取消列选中
    ...    AND    CancelColumnSetup    ${dataValue}
    ...    ELSE IF    "${type}" == "switch"    run keywords    log    开关按钮
    ...    AND    SwitchButton    ${positioning}    ${dataValue}    ${default}
    ...    ELSE IF    "${type}" == "switchCombination"    run keywords    log    开关按钮,关闭或打开时进行操作
    ...    AND    SwitchCombination    ${positioning}    ${dataValue}    ${default}    ${elementData}
    ...    ELSE IF    "${type}" == "radioButton"    run keywords    log    单选按钮
    ...    AND    RadioButton    ${dataValue}    ${elementData}
    ...    ELSE IF    "${type}" == "search"    run keywords    log    单条查询点击定位位置
    ...    AND    SearchOperation    ${positioning}    ${dataValue}
    ...    ELSE IF    "${type}" == "searchClickText"    run keywords    log    单条查询点击文本
    ...    AND    SearchOperationClickText    ${positioning}    ${dataValue}
    ...    ELSE IF    "${type}" == "searchs"    run keywords    log    查询多数据后点击文本
    ...    AND    SearchOperations    ${positioning}    ${dataValue}
    ...    ELSE IF    "${type}" == "assert"    run keywords    log    断言
    ...    AND    PageAssert    ${positioning}    ${dataValue} 
    ...    ELSE    log    无法识别的类型 
    sleep    ${sleep}
 
OperatCombinationData
    [Arguments]    ${elementValue}    ${templateData}    ${positioning}
    [Documentation]    多步骤嵌套动作方法,循环取出数据
    ...    ${elementValue}:数据文件中嵌套操作数据
    ...    ${templateData}:模板文件中嵌套数据data数据

    FOR    ${element}    IN    @{elementValue}
        sleep    ${sleep}
        click element    ${positioning}
        sleep    ${sleep}
        ${elementList}    create list    ${element}
        OperatCombination    ${elementList}    ${templateData}
    END
    
OperatCombinationData2
    [Arguments]    ${elementValue}    ${templateData}    ${positioning}
    [Documentation]    多步骤嵌套动作方法,循环取出数据。
    ...    ${elementValue}:数据文件中嵌套操作数据
    ...    ${templateData}:模板文件中嵌套数据data数据
    ${sum}    Set Variable    ${0}
    FOR    ${element}    IN    @{elementValue}
        run keyword if    "${sum}" != "0"    run keywords    log    第二次循环开始执行
        ...    AND    click element    ${positioning}
        ...    AND    sleep    ${sleep}
        ${elementList}    create list    ${element}
        OperatCombination    ${elementList}    ${templateData}
        ${sum}    Evaluate    ${sum}+${1}
    END

OperatCombination
    [Arguments]    ${elementValue}    ${templateData}
    [Documentation]    多步骤嵌套动作方法,递归执行该方法
    ...    ${elementValue}:数据文件中嵌套操作数据
    ...    ${templateData}:模板文件中嵌套数据data数据
    ${dataValue}    Set variable
    ${dataValueKey}    Set variable
    FOR    ${element}    IN    @{elementValue}
        log    ${element}
        ${dataType}    dataType    ${element}
        ${dataValue}    Run keyword if    "${dataType}" == "<class 'dict'>"    get dictionary keys    ${element}
        log    ${dataValue}
        ${dataValueKey}    Run keyword if    "${dataType}" == "<class 'dict'>"    Set variable    ${dataValue}[0]
        ...    ELSE    Set Variable    ${element}
        log    ${dataValueKey}
        ${re}    CombinationLate    ${templateData}    ${dataValueKey}
        ${type}    Get From Dictionary    ${re}    type
        ${return}    ${elementId}    Run Keyword And Ignore Error    Get From Dictionary    ${re}    position
        ${elementId}    Run Keyword If    "${return}"=="FAIL"    set variable    null
        ...    ELSE    set variable    ${elementId}
        ${data}    Get From Dictionary    ${re}    data
        log    ${dataType}
        ${value}    Run keyword if    "${dataType}" == "<class 'dict'>"    Get From Dictionary    ${element}    ${dataValueKey} 
        ...    ELSE IF    "${dataType}" == "<class 'str'>"    Set Variable    null
        ...    ELSE    log    非类型
        log    ${value}
        # ${value}    Get From Dictionary    ${element}    ${dataValueKey}
        ${return}    ${default}    Run Keyword And Ignore Error    Get From Dictionary    ${re}    default
        ${default}    Run Keyword If    "${return}"=="FAIL" or "${default}"=="${EMPTY}"    set variable    null
        ...    ELSE    set variable    ${default}
        Run keyword if    "${value}" == "None"    log    无数据不操作
        ...    ELSE    Operation    ${type}    ${elementId}    ${value}    ${data}    default=${default}
        ${listType}    dataType    ${value}
        log    ${listType}
        Run keyword if    "${listType}" != "<class 'str'>" and "${type}" != "combination" and "${type}" != "combinationAfter" and "${listType}" != "<class 'NoneType'>"    OperatCombination    ${value}    ${data} 
    END

CombinationLate
    [Arguments]    ${elementData}    ${dataValue}
    [Documentation]     多步骤嵌套动作对比循环取出模板文件的value同数据文件中的值进行对比,并返回对比成功的key值
    log    ${dataValue}
    ${re}    Set variable
    FOR    ${i}    IN    @{elementData}
        log    ${i}[value]
        ${re}    Run keyword if    "${i}[value]" == "${dataValue}"    Set variable    ${i}
        ...    ELSE    Set variable    ${re}
    END
    log    ${re}
    [Return]    ${re}
    
SwitchButton
    [Arguments]    ${positioning}    ${dataStatus}    ${default}
    [Documentation]    单选按钮操作
    ...    ${positioning}:单选按钮定位信息
    ...    ${dataStatus}:数据中按钮的状态
    ...    ${default}:模板中按钮的默认状态
    Run Keyword If    "${dataStatus}" == "${default}"    log    状态相同不进行操作
    ...    ELSE    click element    ${positioning}

SwitchCombination
    [Arguments]    ${positioning}    ${pageData}    ${default}    ${elementData}
    [Documentation]    开关按钮组合操作,关闭或打开时进行下一步操作
    ...    ${positioning}: 开关按钮定位信息
    ...    ${pageData}:数据中按钮的状态
    ...    ${default}:模板中按钮的默认状态
    ...    ${elementData}:模板中的PageData中的data数据,按钮状态改变进行下一步操作
    log    ${positioning}
    log    ${pageData}
    log    ${default}
    log    ${elementData}
    ${dataType}    dataType    ${pageData}
    ${dataValue}    Run keyword if    "${dataType}" == "<class 'dict'>"    get dictionary keys    ${pageData}
    log    ${dataValue}
    ${dataValueKey}    Set Variable if    "${dataType}" == "<class 'dict'>"    ${dataValue}[0]
    ...    ${pageData} 
    ${data}    Run keyword if    "${dataType}" == "<class 'dict'>"    Set variable    ${pageData}[${dataValueKey}]
    Run Keyword If    "${dataValueKey}" == "${default}"    log    状态相同不进行操作
    ...    ELSE    SwitchCombinationOperation    ${positioning}    ${elementData}    ${data}

SwitchCombinationOperation
    [Arguments]    ${positioning}    ${elementData}    ${datas}
    [Documentation]    根据开关状态进行下一步操作
    ...    ${positioning}:开关按钮定位信息
    ...    ${elementData}:模板中的PageData中的data数据,按钮状态改变进行下一步操作
    ...    ${datas} :数据文件中的操作数据
    click element    ${positioning}
    sleep    ${sleep}
    FOR    ${data}    IN    @{datas}
        ${dataKey}    get dictionary keys    ${data}
        log    ${dataKey}
        ${template}    CombinationLate    ${elementData}    ${dataKey}[0]
        ${type}    Get From Dictionary    ${template}    type
        ${elementId}    Get From Dictionary    ${template}    position
        ${templateData}    Get From Dictionary    ${template}    data
        ${value}    Get From Dictionary    ${template}    value
        ${dataValue}    Get From Dictionary    ${data}    ${value}
        Operation    ${type}    ${elementId}    ${dataValue}    ${templateData}
    END

RadioButton
    [Arguments]    ${dataValue}    ${elementData}
    [Documentation]    单选按钮操作
    ...    ${dataValue}:数据文件中单选按钮的名称
    ...    ${elementData}:模板中所有单选按钮的数据
    FOR    ${button}    IN    @{elementData}
        ${type}    Get From Dictionary    ${button}    type
        ${position}    Get From Dictionary    ${button}    position
        ${value}    Get From Dictionary    ${button}    value
        Run Keyword If    "${dataValue}" == "${value}"    run keywords    log    点击${value}按钮
        ...    AND    Operation    ${type}    ${position}
    END
    
ClickTexts
    [Arguments]    ${positioning}
    [Documentation]    根据文本定位,点击页面中多个文本
    ...    ${positioning}:文本列表
    FOR    ${i}    IN    @{positioning}
        click element    //span[contains(text(),'${i}')]
        sleep    ${sleep}
    END

ClickText
    [Arguments]    ${positioning}
    [Documentation]    根据文本定位,点击页面中多个文本
    ...    ${positioning}:文本列表
    click element    //span[contains(text(),'${positioning}')]
    sleep    ${sleep}
    
SearchOperation
    [Arguments]    ${positioning}    ${searchData}
    [Documentation]    页面查询操作
    ...    ${positioning}:查询输入框定位
    ...    ${searchData}:查询内容
    sleep    ${sleep}
    input text    ${positioning}[0]    ${searchData}
    sleep    ${sleep}
    press keys    ${positioning}[0]    ENTER
    sleep    ${sleep}
    click element    ${positioning}[1]
    sleep    ${sleep}
    
SearchOperationClickText
    [Arguments]    ${positioning}    ${searchData}
    [Documentation]    页面查询操作
    ...    ${positioning}:查询输入框定位
    ...    ${searchData}:查询内容
    sleep    ${sleep}
    input text    ${positioning}    ${searchData}
    sleep    ${sleep}
    press keys    ${positioning}    ENTER
    sleep    ${sleep}
    click element    //span[contains(text(),'${searchData}')]
    sleep    ${sleep}
    
SearchOperations
    [Arguments]    ${positioning}    ${searchData}
    [Documentation]    页面查询多数据操作
    ...    ${positioning}:查询输入框定位
    ...    ${searchData}:查询内容
    sleep    ${sleep}
    FOR    ${i}    IN    @{searchData}
        input text    ${positioning}[0]    ${i}
        sleep    ${sleep_min}
        press keys    ${positioning}[0]    ENTER
        sleep    ${sleep}
        click element    //span[contains(text(),'${i}')]
        sleep    ${sleep}
    END

PageAssert
    [Arguments]    ${positioning}    ${assertText}
    [Documentation]    页面查询多数据操作
    ...    ${positioning}: 断言定位
    ...    ${assertText}: 断言文本
    ${text}    Get Text    ${positioning}
    Should Be Equal As Strings    ${text}    ${assertText}

OkOrCancel
    [Arguments]    ${templateData}    ${data}
    [Documentation]    提交数据后校验
    ...    ${templateData}: 模板文件中okOrCancel数据,用于点击ok按钮及创建成功校验
    ...    ${data}:数据文件内容
    ${okBUutton}    Get From Dictionary    ${templateData}    position
    ${assertPosition}    Get From Dictionary    ${templateData}    ${data}[searchCriteria]
    ${searchCriteria}    Get From Dictionary    ${data}    searchCriteria
    click element    ${okBUutton}    #点击OK缇交
    sleep    ${sleep}
    SearchData    ${data}[${searchCriteria}]    ${templateData}    ${searchCriteria}        #搜索框的关键字
    click element    ${templateData}[Selected]
    ${text1}    Get Text    ${assertPosition}        #获取点击后页面文本信息
    Should Be Equal As Strings    ${text1}    ${data}[${searchCriteria}]
    
SearchData
    [Arguments]    ${value}    ${templateData}    ${searchCriteria}
    [Documentation]
    ...    ${value}:传入查询的数据
    ...    ${templateData}:模板中okOrCancel得数据
    ...    ${searchCriteria}:搜索条件
    ${searchType}    Get From Dictionary    ${templateData}    search
    Run Keyword If    "${searchType}" == "type1"    run keywords    log    第一种搜索
    ...    AND    SearchType1    ${value}    ${searchCriteria}

CancelColumnSetup
    [Arguments]    ${columns}
    FOR    ${i}    IN    @{columns}
        click element    xpath=/html/body/div[1]/div/div[2]/div[2]/div/div/div/div[3]/div[2]/div/div/span[contains(text(),'${i}')]
        sleep    ${sleep}
    END

SearchType1
    [Arguments]    ${searchvalue}    ${searchCriteria}
    [Documentation]    本方法搜索查询适用于User
    ...    ${searchvalue}:搜索条件的值
    ...    ${search}:搜索条件
    ...    ${templateData}:模板中okOrCancel得数据
    sleep    ${sleep}
    click element    id=one-input   #点击搜索框
    sleep    ${sleep_min}
    click element    xpath=//*[@id="input_list"]/ul/li/span[contains(text(), "${searchCriteria}")] 
    input text    id=sreach_input    ${searchValue}
    sleep    ${sleep}
    click element    id=search-input-search    #点击搜索按钮
    sleep    ${sleep}
    click element    xpath=//*[@id="app"]/div/div[2]/div[2]/div/div/div/div[2]/div[1]/div[2]/div[1]/div/div/div[3]/i
    sleep    ${sleep}
    
DeleteData
     [Arguments]    ${position}
     [Documentation]    删除测试数据
     ...    ${position}:删除按钮元素定位
     sleep    ${sleep}
     click element    ${position}
     sleep    ${sleep}
     click element    xpath=/html/body/div/div/div[3]/button[2]
     sleep    ${sleep}

CreateOrEditPageNegtive
    [Arguments]    ${elementList}    ${dataList}    ${OpenCreateOrEditPage}    ${OkOrCance}
    [Documentation]    完整的打开创建页面反向用例关键字
    ...    ${elementList}:模板的PageData数据,格式:[{id=responsepages_profileName1,value=testname}]
    ...    ${dataList}:数据文件中的数据,格式[[id=responsepages_profileName1,value=testname]]
    ...    ${OpenCreateOrEditPage}:模板文件中OpenCreateOrEditPage数据
    ...    ${OkOrCance}:模板文件中OkOrCancel的数据
    
    FOR    ${data}    IN    @{dataList}
        #打开页面输入数据
        OperatPageNegtive    ${elementList}    ${data}    ${OpenCreateOrEditPage}
        # 点击OK按钮
        OkButton   ${OkOrCance}
        # 页面断言
        AssertPage    ${data}[assertText]
    END

OperatPageNegtive
    [Arguments]    ${elementList}    ${pData}    ${OpenCreateOrEditPage}
    [Documentation]    打开创建或者修改数据页面,输入数据
    ...    ${elementList}:模板的PageData数据,格式:[{id=responsepages_profileName1,value=testname}]
    ...    ${pData}:数据文件中的数据,格式[id=responsepages_profileName1,value=testname]
    ...    ${OpenCreateOrEditPage}:模板文件中OpenCreateOrEditPage数据
   
    ${openType}    Get From Dictionary    ${pData}    operatingType
    OpenCreateOREdit    ${OpenCreateOrEditPage}[${openType}]
    ${dataType}    Run keyword if    "${openType}" == "create" or "${openType}" == "edit"    Set Variable    createAndEdit
    ...    ELSE IF        "${openType}" == "createGroup" or "${openType}" == "editGroup"    Set Variable    createAndEditGroup
    ${elementList}    Set Variable    ${elementList}[${dataType}]
    FOR    ${element}    IN    @{elementList}
        ${type}    Get From Dictionary    ${element}    type
        ${return}    ${elementId}    Run Keyword And Ignore Error    Get From Dictionary    ${element}    position
        ${elementId}    Run Keyword If    "${return}"=="FAIL"    set variable    null
        ...    ELSE    set variable    ${elementId}
        ${value}    Get From Dictionary    ${element}    value
        ${return}    ${elementValue}    Run Keyword And Ignore Error    Get From Dictionary    ${pData}    ${value}
        ${elementValue}    Run Keyword If    "${return}"=="FAIL"    set variable    null
        ...    ELSE    set variable    ${elementValue}
        ${return}    ${elementData}    Run Keyword And Ignore Error    Get From Dictionary    ${element}    data
        ${elementData}    Run Keyword If    "${return}"=="FAIL"    set variable    null
        ...    ELSE    set variable    ${elementData}
        ${return}    ${default}    Run Keyword And Ignore Error    Get From Dictionary    ${element}    default
        ${default}    Run Keyword If    "${return}"=="FAIL" or "${default}"=="${EMPTY}"    set variable    null
        ...    ELSE    set variable    ${default}
        Run Keyword If    "${elementValue}" != "null"    run keywords    log    进行操作
        ...    AND    Operation    ${type}    ${elementId}    ${elementValue}    ${elementData}    ${default}
    END 

OkButton
    [Arguments]    ${OkOrCance}
    [Documentation]    点击Ok按钮
    ...    ${OkOrCance}:模板文件中OkOrCancel的数据
    ${okPosition}    Get From Dictionary    ${OkOrCance}    position
    sleep    ${sleep}
    click element    ${okPosition}
    sleep    ${sleep_min}

AssertPage
    [Arguments]    ${assertText}
    [Documentation]    反向用例断言
    ...    ${assertText}: 断言数据列表形式["assertText1","assertText2"]
    FOR    ${text}    IN    @{assertText}
        Page Should Contain    ${text} 
    END

TextContain
    [Arguments]    ${columnList}    ${text}
    [Documentation]    验证页面不存在文本关键字
    FOR    ${column}    IN    @{columnList}
        should not be equal    ${column}    ${text}
    END

CreatePageTextAssert
    [Arguments]    ${elementList}    ${dataList}    ${OpenCreateOrEditPage}
    [Documentation]    用于创建页面内文本断言
    ...    ${elementList}:模板的PageData数据,格式:[{id=responsepages_profileName1,value=testname}]
    ...    ${dataList}:数据文件中的数据,格式[id=responsepages_profileName1,value=testname]
    ...    ${OpenCreateOrEditPage}:模板文件中OpenCreateOrEditPage数据
    #打开页面输入数据
    OperatPageNegtive    ${elementList}    ${dataList}    ${OpenCreateOrEditPage}
    #数据文件中断言列表
    ${texts}    Get From Dictionary    ${dataList}    AssertText
    # 页面文本断言
    FOR    ${text}    IN    @{texts}
        Page Should Contain    ${text}
    END
    
PrioritySelectCaseData    
    [Arguments]    ${objDataList}
    #增加优先级筛选执行代码,当operatingtype中最后一位值为9时,只执行该数据参数
    ${templist}    create list
    log to console    获取的原始数据------${objDataList}
    FOR    ${it}    IN    @{objDataList}
        ${operatingType0}    Get From Dictionary    ${it}[0]    operatingType
        ${operatingType}    get substring    ${operatingType0}        -1
        ${operatingType1}    get substring    ${operatingType0}    0    -1
        Run keyword if    "${operatingType}" == "9"    run keywords
        ...    set to dictionary    ${it}[0]    operatingType    ${operatingType1}
        ...    AND    append to list    ${templist}    ${it}
        ...    AND    log to console    ${templist}
    END
    ${templistcount}    get length    ${templist}
    
    ${objDataList}   run keyword if    ${templistcount}>0    set variable    ${templist} 
    ...    ELSE      set variable    ${objDataList}   
    log to console    优先执行的数据------${objDataList}    
    [Return]    ${objDataList}
    #优先级筛选执行结束
OpenPage
    [Arguments]    ${openCreateOrEditPage}
    [Documentation]    打开测试页面
    ${pagePosition}    Get From Dictionary    ${openCreateOrEditPage}    create
    ${pagePosition}    get substring    ${pagePosition}    0    2
    FOR    ${i}    IN    @{pagePosition}
        click element    ${i}
        sleep    ${sleep}
    END
    
TestPageVerifyOperation
    [Arguments]    ${openCreateOrEditPage}    ${data}    ${tempData}
    [Documentation]    测试页面操作验证
    ...    ${openCreateOrEditPage}:模板文件中openCreateOrEditPage中数据,打开页面定位信息
    #登录后打开测试页面
    OpenPage    ${openCreateOrEditPage}
    OperatPage    ${tempData}    ${data}


ColumnSetup    
    [Arguments]    ${openCreateOrEditPage}    ${data}    ${tempData}
    [Documentation]    列设置验证关键字
    ...    ${openCreateOrEditPage}:模板文件中openCreateOrEditPage中数据,打开页面定位信息
    #登录后打开测试页面
    OpenPage    ${openCreateOrEditPage}
    OperatPage    ${tempData}    ${data}
    # 断言页面不存在列
    ${columnList}    Get From Dictionary    ${data}    cancel_show
    ${assertPosition}    Get From Dictionary    ${data}    assertPosition
    FOR    ${position}    IN    @{assertPosition}
        ${text}    Get text    ${position}
        TextContain    ${columnList}    ${text}
    END
    
TurnPage
    [Arguments]    ${openCreateOrEditPage}    ${okOrCancel}
    [Documentation]    翻页功能
    
    OpenPage    ${openCreateOrEditPage}
    ${number}    Get Text    xpath=//*[@id="app"]/div/div[2]/div[2]/div/div/div/div[2]/div[3]/div/div/span
    log    ${number}
    ${number}    get substring    ${number}    6
    log    ${number}
    Run keyword if    ${number} > 20    Run keywords    log    执行翻页操作
    ...    AND    TurnPageAssert    ${okOrCancel}

TurnPageAssert
    [Arguments]    ${okOrCancel}
    [Documentation]    验证翻页功能
    ${idPosition}    Get From Dictionary    ${okOrCancel}    ID
    ${id1}    Get Text    ${idPosition}
    click element    xpath=//*[@id="app"]/div/div[2]/div[2]/div/div/div/div/div[2]/div[3]/div/div/button[2]
    sleep    ${sleep}
    ${id2}    Get Text    ${idPosition}
    click element    xpath=//*[@id="app"]/div/div[2]/div[2]/div/div/div/div/div[2]/div[3]/div/div/button[1]
    sleep    ${sleep}
    ${id3}    Get Text    ${idPosition}
    click element    xpath=//*[@id="app"]/div/div[2]/div[2]/div/div/div[1]/div/div[2]/div[3]/div/div/ul/li[2]
    sleep    ${sleep}
    ${id4}    Get Text    ${idPosition}
    Should Not Be Equal    ${id1}    ${id2}
    Should Not Be Equal    ${id2}    ${id3}
    Should Not Be Equal    ${id3}    ${id4}
    



UserOperationLog
    [Arguments]    ${openCreateOrEditPage}
    [Documentation]    验证user页面账号日志功能
    
    OpenPage    ${openCreateOrEditPage}
    SearchType1    ${username}    User
    click element    xpath=//*[@id="userTable"]/div[4]/div[2]/table/tbody/tr/td[11]/div/div/button
    sleep    ${sleep}
    ${text}    Get Text    xpath=//*[@id="roleTable"]/div[3]/table/tbody/tr[1]/td[4]/div/span
    Should Be Equal As Strings    ${text}    ${testClentIP}