@eclipse-che/che-e2e 7.64.0-dev-20514b2 → 7.64.0-dev-db63138
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/README.md +11 -37
- package/build/dockerfiles/entrypoint.sh +1 -1
- package/configs/inversify.config.ts +11 -26
- package/configs/inversify.types.ts +3 -33
- package/configs/mocharc.ts +9 -3
- package/configs/sh-scripts/initDefaultValues.sh +0 -5
- package/constants/TestConstants.ts +34 -96
- package/dist/configs/inversify.config.js +8 -23
- package/dist/configs/inversify.config.js.map +1 -1
- package/dist/configs/inversify.types.js +3 -33
- package/dist/configs/inversify.types.js.map +1 -1
- package/dist/configs/mocharc.js +11 -4
- package/dist/configs/mocharc.js.map +1 -1
- package/dist/constants/TestConstants.js +31 -86
- package/dist/constants/TestConstants.js.map +1 -1
- package/dist/driver/ChromeDriver.js +1 -1
- package/dist/driver/ChromeDriver.js.map +1 -1
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/pageobjects/dashboard/CreateWorkspace.js +3 -11
- package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
- package/dist/pageobjects/dashboard/Dashboard.js +16 -1
- package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
- package/dist/pageobjects/dashboard/Workspaces.js +1 -3
- package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
- package/dist/pageobjects/git-providers/OauthPage.js +150 -0
- package/dist/pageobjects/git-providers/OauthPage.js.map +1 -0
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js +65 -0
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -0
- package/dist/pageobjects/login/OcpRedHatLoginPage.js +67 -0
- package/dist/pageobjects/login/OcpRedHatLoginPage.js.map +1 -0
- package/dist/pageobjects/login/RedHatLoginPage.js +78 -0
- package/dist/pageobjects/login/RedHatLoginPage.js.map +1 -0
- package/dist/pageobjects/login/RegularUserOcpCheLoginPage.js +3 -21
- package/dist/pageobjects/login/RegularUserOcpCheLoginPage.js.map +1 -1
- package/dist/pageobjects/openshift/CheLoginPage.js +0 -33
- package/dist/pageobjects/openshift/CheLoginPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpLoginPage.js +0 -14
- package/dist/pageobjects/openshift/OcpLoginPage.js.map +1 -1
- package/dist/specs/MochaHooks.js +2 -2
- package/dist/specs/MochaHooks.js.map +1 -1
- package/dist/specs/devfiles/EmptyWorkspace.spec.js +1 -0
- package/dist/specs/devfiles/EmptyWorkspace.spec.js.map +1 -1
- package/dist/specs/devfiles/Quarkus.spec.js +50 -0
- package/dist/specs/devfiles/Quarkus.spec.js.map +1 -0
- package/dist/specs/factory/Factory.spec.js +160 -0
- package/dist/specs/factory/Factory.spec.js.map +1 -0
- package/dist/specs/factory/NoSetupRepoFactory.spec.js +228 -0
- package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -0
- package/dist/specs/factory/RefusedOAuthFactory.spec.js +220 -0
- package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -0
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +66 -0
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -0
- package/dist/tests-library/LoginTests.js +10 -2
- package/dist/tests-library/LoginTests.js.map +1 -1
- package/dist/tests-library/WorkspaceHandlingTests.js +3 -6
- package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
- package/dist/utils/BrowserTabsUtil.js +2 -21
- package/dist/utils/BrowserTabsUtil.js.map +1 -1
- package/dist/utils/DriverHelper.js +11 -73
- package/dist/utils/DriverHelper.js.map +1 -1
- package/dist/utils/Logger.js +5 -0
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/Sanitizer.js.map +1 -1
- package/dist/utils/request-handlers/CheApiRequestHandler.js +1 -1
- package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
- package/dist/utils/vsc/GitUtil.js +41 -0
- package/dist/utils/vsc/GitUtil.js.map +1 -0
- package/dist/utils/workspace/ApiUrlResolver.js +0 -3
- package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
- package/dist/utils/workspace/TestWorkspaceUtil.js +2 -192
- package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
- package/driver/ChromeDriver.ts +1 -1
- package/index.ts +37 -0
- package/package.json +9 -5
- package/pageobjects/dashboard/CreateWorkspace.ts +4 -15
- package/pageobjects/dashboard/Dashboard.ts +29 -4
- package/pageobjects/dashboard/Workspaces.ts +1 -3
- package/pageobjects/git-providers/OauthPage.ts +156 -0
- package/pageobjects/ide/CheCodeLocatorLoader.ts +69 -0
- package/pageobjects/login/OcpRedHatLoginPage.ts +49 -0
- package/pageobjects/login/RedHatLoginPage.ts +62 -0
- package/pageobjects/login/RegularUserOcpCheLoginPage.ts +1 -20
- package/pageobjects/openshift/CheLoginPage.ts +6 -55
- package/pageobjects/openshift/OcpLoginPage.ts +0 -21
- package/specs/MochaHooks.ts +2 -2
- package/specs/devfiles/EmptyWorkspace.spec.ts +1 -0
- package/specs/devfiles/Quarkus.spec.ts +52 -0
- package/specs/factory/Factory.spec.ts +199 -0
- package/specs/factory/NoSetupRepoFactory.spec.ts +272 -0
- package/specs/factory/RefusedOAuthFactory.spec.ts +260 -0
- package/specs/miscellaneous/PredefinedNamespace.spec.ts +74 -0
- package/tests-library/LoginTests.ts +9 -1
- package/tests-library/WorkspaceHandlingTests.ts +3 -7
- package/utils/BrowserTabsUtil.ts +2 -24
- package/utils/DriverHelper.ts +9 -84
- package/utils/Logger.ts +5 -0
- package/utils/Sanitizer.ts +0 -1
- package/utils/request-handlers/CheApiRequestHandler.ts +1 -1
- package/utils/vsc/GitUtil.ts +28 -0
- package/utils/workspace/ApiUrlResolver.ts +0 -4
- package/utils/workspace/ITestWorkspaceUtil.ts +1 -56
- package/utils/workspace/TestWorkspaceUtil.ts +2 -243
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.js +0 -97
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.js.map +0 -1
- package/dist/pageobjects/login/MultiUserLoginPage.js +0 -49
- package/dist/pageobjects/login/MultiUserLoginPage.js.map +0 -1
- package/dist/pageobjects/login/UpdateAccountInformationPage.js +0 -74
- package/dist/pageobjects/login/UpdateAccountInformationPage.js.map +0 -1
- package/dist/pageobjects/third-parties/GitLoginPage.js +0 -85
- package/dist/pageobjects/third-parties/GitLoginPage.js.map +0 -1
- package/dist/pageobjects/third-parties/GitOauthAppsSettings.js +0 -110
- package/dist/pageobjects/third-parties/GitOauthAppsSettings.js.map +0 -1
- package/dist/specs/login/LinkCheAndOcpUsers.spec.js +0 -40
- package/dist/specs/login/LinkCheAndOcpUsers.spec.js.map +0 -1
- package/dist/utils/WorkspaceNameHandler.js +0 -60
- package/dist/utils/WorkspaceNameHandler.js.map +0 -1
- package/dist/utils/request-handlers/tokens/CheMultiuserTokenHandler.js +0 -50
- package/dist/utils/request-handlers/tokens/CheMultiuserTokenHandler.js.map +0 -1
- package/dist/utils/request-handlers/tokens/ITokenHandler.js +0 -12
- package/dist/utils/request-handlers/tokens/ITokenHandler.js.map +0 -1
- package/dist/utils/vsc/CheGitApi.js +0 -42
- package/dist/utils/vsc/CheGitApi.js.map +0 -1
- package/dist/utils/vsc/github/GitHubUtil.js +0 -126
- package/dist/utils/vsc/github/GitHubUtil.js.map +0 -1
- package/files/devfiles/plugins/GitHubPullRequestPlugin.yaml +0 -11
- package/files/devfiles/plugins/InstallPluginUsingUI.yaml +0 -3
- package/files/devfiles/plugins/Java11PluginTest.yaml +0 -17
- package/files/devfiles/plugins/PhpPluginTest.yaml +0 -47
- package/files/devfiles/plugins/PythonPluginTest.yaml +0 -14
- package/files/devfiles/plugins/TypescriptNodeDebug2PluginTest.yaml +0 -49
- package/files/devfiles/plugins/VscodeKubernetesPlugin.yaml +0 -12
- package/files/devfiles/plugins/VscodeShellcheckPlugin.yaml +0 -12
- package/files/devfiles/plugins/VscodeValePlugin.yaml +0 -42
- package/files/devfiles/plugins/VscodeXmlPlugin.yaml +0 -12
- package/files/devfiles/plugins/VscodeYamlPlugin.yaml +0 -12
- package/files/happy-path/containers-happy-path.yaml +0 -127
- package/files/happy-path/happy-path-workspace.yaml +0 -95
- package/files/happy-path/petclinic-classpath.txt +0 -49
- package/pageobjects/dashboard/workspace-details/WorkspaceDetailsPlugins.ts +0 -95
- package/pageobjects/login/MultiUserLoginPage.ts +0 -33
- package/pageobjects/login/UpdateAccountInformationPage.ts +0 -70
- package/pageobjects/third-parties/GitLoginPage.ts +0 -81
- package/pageobjects/third-parties/GitOauthAppsSettings.ts +0 -110
- package/specs/login/LinkCheAndOcpUsers.spec.ts +0 -49
- package/utils/WorkspaceNameHandler.ts +0 -48
- package/utils/request-handlers/tokens/CheMultiuserTokenHandler.ts +0 -41
- package/utils/request-handlers/tokens/ITokenHandler.ts +0 -14
- package/utils/vsc/CheGitApi.ts +0 -22
- package/utils/vsc/github/GitHubUtil.ts +0 -110
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
apiVersion: 1.0.0
|
|
3
|
-
metadata:
|
|
4
|
-
generateName: php-plugin-test
|
|
5
|
-
projects:
|
|
6
|
-
- name: php-web-simple
|
|
7
|
-
source:
|
|
8
|
-
type: git
|
|
9
|
-
location: "https://github.com/che-samples/web-php-simple"
|
|
10
|
-
components:
|
|
11
|
-
- type: chePlugin
|
|
12
|
-
id: bmewburn/vscode-intelephense-client/latest
|
|
13
|
-
- type: chePlugin
|
|
14
|
-
id: felixfbecker/php-debug/latest
|
|
15
|
-
- type: dockerimage
|
|
16
|
-
alias: php
|
|
17
|
-
image: quay.io/eclipse/che-php-7:next
|
|
18
|
-
memoryLimit: 512Mi
|
|
19
|
-
mountSources: true
|
|
20
|
-
endpoints:
|
|
21
|
-
- name: '8080-tcp'
|
|
22
|
-
port: 8080
|
|
23
|
-
volumes:
|
|
24
|
-
- name: composer
|
|
25
|
-
containerPath: "/home/user/.composer"
|
|
26
|
-
- name: symfony
|
|
27
|
-
containerPath: "/home/user/.symfony"
|
|
28
|
-
commands:
|
|
29
|
-
- name: Debug current file
|
|
30
|
-
actions:
|
|
31
|
-
- type: vscode-launch
|
|
32
|
-
referenceContent: |
|
|
33
|
-
{
|
|
34
|
-
"version": "0.2.0",
|
|
35
|
-
"configurations": [
|
|
36
|
-
{
|
|
37
|
-
"name": "Launch currently open script",
|
|
38
|
-
"type": "php",
|
|
39
|
-
"request": "launch",
|
|
40
|
-
"program": "${file}",
|
|
41
|
-
"stopOnEntry": true,
|
|
42
|
-
"cwd": "${fileDirname}",
|
|
43
|
-
"port": 9000,
|
|
44
|
-
"runtimeExecutable": "php"
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
apiVersion: 1.0.0
|
|
2
|
-
metadata:
|
|
3
|
-
name: python-plugin-test
|
|
4
|
-
projects:
|
|
5
|
-
- name: python-hello-world
|
|
6
|
-
source:
|
|
7
|
-
location: 'https://github.com/che-samples/python-hello-world.git'
|
|
8
|
-
type: git
|
|
9
|
-
components:
|
|
10
|
-
- id: ms-python/python/latest
|
|
11
|
-
type: chePlugin
|
|
12
|
-
- type: cheEditor
|
|
13
|
-
id: eclipse/che-theia/next
|
|
14
|
-
memoryLimit: 512Mi
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
apiVersion: 1.0.0
|
|
2
|
-
metadata:
|
|
3
|
-
name: typescript-debug-plugins
|
|
4
|
-
projects:
|
|
5
|
-
- name: nodejs-web-app
|
|
6
|
-
source:
|
|
7
|
-
location: 'https://github.com/che-samples/web-nodejs-sample.git'
|
|
8
|
-
branch: che-qe-tests
|
|
9
|
-
type: git
|
|
10
|
-
components:
|
|
11
|
-
- id: vscode/typescript-language-features/latest
|
|
12
|
-
type: chePlugin
|
|
13
|
-
- id: ms-vscode/node-debug2/latest
|
|
14
|
-
preferences:
|
|
15
|
-
debug.node.useV3: false
|
|
16
|
-
type: chePlugin
|
|
17
|
-
- mountSources: true
|
|
18
|
-
endpoints:
|
|
19
|
-
- name: nodejs
|
|
20
|
-
port: 3000
|
|
21
|
-
memoryLimit: 512Mi
|
|
22
|
-
type: dockerimage
|
|
23
|
-
alias: nodejs
|
|
24
|
-
image: 'quay.io/eclipse/che-nodejs10-ubi:next'
|
|
25
|
-
commands:
|
|
26
|
-
- name: run the web app (debugging enabled)
|
|
27
|
-
actions:
|
|
28
|
-
- workdir: '${CHE_PROJECTS_ROOT}/nodejs-web-app/app'
|
|
29
|
-
type: exec
|
|
30
|
-
command: npm install && nodemon --inspect app.js
|
|
31
|
-
component: nodejs
|
|
32
|
-
- name: Attach remote debugger
|
|
33
|
-
actions:
|
|
34
|
-
- referenceContent: |
|
|
35
|
-
{
|
|
36
|
-
"version": "0.2.0",
|
|
37
|
-
"configurations": [
|
|
38
|
-
{
|
|
39
|
-
"type": "node",
|
|
40
|
-
"request": "attach",
|
|
41
|
-
"name": "Attach to Remote",
|
|
42
|
-
"address": "localhost",
|
|
43
|
-
"port": 9229,
|
|
44
|
-
"localRoot": "${workspaceFolder}",
|
|
45
|
-
"remoteRoot": "${workspaceFolder}"
|
|
46
|
-
}
|
|
47
|
-
]
|
|
48
|
-
}
|
|
49
|
-
type: vscode-launch
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
apiVersion: 1.0.0
|
|
2
|
-
metadata:
|
|
3
|
-
name: nodejs-24lop
|
|
4
|
-
projects:
|
|
5
|
-
- name: nodejs-web-app
|
|
6
|
-
source:
|
|
7
|
-
location: 'https://github.com/che-samples/web-nodejs-sample.git'
|
|
8
|
-
branch: che-qe-tests
|
|
9
|
-
type: git
|
|
10
|
-
components:
|
|
11
|
-
- type: chePlugin
|
|
12
|
-
id: ms-kubernetes-tools/vscode-kubernetes-tools/latest
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
apiVersion: 1.0.0
|
|
2
|
-
metadata:
|
|
3
|
-
name: nodejs-zmecm
|
|
4
|
-
projects:
|
|
5
|
-
- name: nodejs-web-app
|
|
6
|
-
source:
|
|
7
|
-
location: 'https://github.com/che-samples/web-nodejs-sample.git'
|
|
8
|
-
branch: che-qe-tests
|
|
9
|
-
type: git
|
|
10
|
-
components:
|
|
11
|
-
- id: timonwong/shellcheck/latest
|
|
12
|
-
type: chePlugin
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
apiVersion: 1.0.0
|
|
2
|
-
metadata:
|
|
3
|
-
name: che-docs-test
|
|
4
|
-
projects:
|
|
5
|
-
- name: che-docs
|
|
6
|
-
source:
|
|
7
|
-
location: 'https://github.com/eclipse/che-docs.git'
|
|
8
|
-
type: git
|
|
9
|
-
branch: che-qe
|
|
10
|
-
components:
|
|
11
|
-
- mountSources: true
|
|
12
|
-
endpoints:
|
|
13
|
-
- name: Open-Livereload
|
|
14
|
-
port: 35729
|
|
15
|
-
- attributes:
|
|
16
|
-
path: /che-7/overview/introduction-to-eclipse-che/
|
|
17
|
-
name: Open-Preview-server
|
|
18
|
-
port: 4000
|
|
19
|
-
command:
|
|
20
|
-
- tail
|
|
21
|
-
args:
|
|
22
|
-
- '-f'
|
|
23
|
-
- /dev/null
|
|
24
|
-
memoryLimit: 512M
|
|
25
|
-
type: dockerimage
|
|
26
|
-
alias: che-docs
|
|
27
|
-
image: 'quay.io/eclipse/che-docs:latest'
|
|
28
|
-
- preferences:
|
|
29
|
-
vale.core.useCLI: true
|
|
30
|
-
type: chePlugin
|
|
31
|
-
reference: 'https://che-plugin-registry-main.surge.sh/v3/plugins/errata-ai/vale-server/latest/meta.yaml'
|
|
32
|
-
alias: vale-server
|
|
33
|
-
- id: redhat/vscode-yaml/latest
|
|
34
|
-
type: chePlugin
|
|
35
|
-
- id: redhat/vscode-xml/latest
|
|
36
|
-
type: chePlugin
|
|
37
|
-
- id: redhat/java/latest
|
|
38
|
-
type: chePlugin
|
|
39
|
-
- id: golang/go/latest
|
|
40
|
-
type: chePlugin
|
|
41
|
-
- id: vscode/typescript-language-features/latest
|
|
42
|
-
type: chePlugin
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
apiVersion: 1.0.0
|
|
2
|
-
metadata:
|
|
3
|
-
name: xml-plugin-test
|
|
4
|
-
projects:
|
|
5
|
-
- name: nodejs-web-app
|
|
6
|
-
source:
|
|
7
|
-
location: 'https://github.com/che-samples/web-nodejs-sample.git'
|
|
8
|
-
branch: che-qe-tests
|
|
9
|
-
type: git
|
|
10
|
-
components:
|
|
11
|
-
- id: redhat/vscode-xml/latest
|
|
12
|
-
type: chePlugin
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
apiVersion: 1.0.0
|
|
2
|
-
metadata:
|
|
3
|
-
name: nodejs-zmecm
|
|
4
|
-
projects:
|
|
5
|
-
- name: nodejs-web-app
|
|
6
|
-
source:
|
|
7
|
-
location: 'https://github.com/che-samples/web-nodejs-sample.git'
|
|
8
|
-
branch: che-qe-tests
|
|
9
|
-
type: git
|
|
10
|
-
components:
|
|
11
|
-
- id: redhat/vscode-yaml/latest
|
|
12
|
-
type: chePlugin
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
apiVersion: v1
|
|
3
|
-
kind: Service
|
|
4
|
-
metadata:
|
|
5
|
-
name: mysql
|
|
6
|
-
labels:
|
|
7
|
-
app.kubernetes.io/name: mysql
|
|
8
|
-
app.kubernetes.io/component: database
|
|
9
|
-
app.kubernetes.io/part-of: petclinic
|
|
10
|
-
spec:
|
|
11
|
-
ports:
|
|
12
|
-
- port: 3306
|
|
13
|
-
targetPort: 3306
|
|
14
|
-
selector:
|
|
15
|
-
app.kubernetes.io/name: mysql
|
|
16
|
-
app.kubernetes.io/component: database
|
|
17
|
-
app.kubernetes.io/part-of: petclinic
|
|
18
|
-
---
|
|
19
|
-
apiVersion: apps/v1
|
|
20
|
-
kind: Deployment
|
|
21
|
-
metadata:
|
|
22
|
-
name: db
|
|
23
|
-
labels:
|
|
24
|
-
app.kubernetes.io/name: mysql
|
|
25
|
-
app.kubernetes.io/component: database
|
|
26
|
-
app.kubernetes.io/part-of: petclinic
|
|
27
|
-
spec:
|
|
28
|
-
selector:
|
|
29
|
-
matchLabels:
|
|
30
|
-
app.kubernetes.io/name: mysql
|
|
31
|
-
app.kubernetes.io/component: database
|
|
32
|
-
app.kubernetes.io/part-of: petclinic
|
|
33
|
-
replicas: 1
|
|
34
|
-
template:
|
|
35
|
-
metadata:
|
|
36
|
-
labels:
|
|
37
|
-
app.kubernetes.io/name: mysql
|
|
38
|
-
app.kubernetes.io/component: database
|
|
39
|
-
app.kubernetes.io/part-of: petclinic
|
|
40
|
-
spec:
|
|
41
|
-
containers:
|
|
42
|
-
- name: mysql
|
|
43
|
-
image: quay.io/eclipse/che--centos--mysql-57-centos7:latest-e08ee4d43b7356607685b69bde6335e27cf20c020f345b6c6c59400183882764
|
|
44
|
-
resources:
|
|
45
|
-
requests:
|
|
46
|
-
memory: 256Mi
|
|
47
|
-
env:
|
|
48
|
-
- name: MYSQL_USER
|
|
49
|
-
value: petclinic
|
|
50
|
-
- name: MYSQL_PASSWORD
|
|
51
|
-
value: petclinic
|
|
52
|
-
- name: MYSQL_ROOT_PASSWORD
|
|
53
|
-
value: petclinic
|
|
54
|
-
- name: MYSQL_DATABASE
|
|
55
|
-
value: petclinic
|
|
56
|
-
ports:
|
|
57
|
-
- containerPort: 3306
|
|
58
|
-
---
|
|
59
|
-
apiVersion: v1
|
|
60
|
-
kind: Service
|
|
61
|
-
metadata:
|
|
62
|
-
name: spring-boot-app
|
|
63
|
-
labels:
|
|
64
|
-
app.kubernetes.io/name: petclinic
|
|
65
|
-
app.kubernetes.io/component: webapp
|
|
66
|
-
app.kubernetes.io/part-of: petclinic
|
|
67
|
-
spec:
|
|
68
|
-
ports:
|
|
69
|
-
- port: 8080
|
|
70
|
-
targetPort: 8080
|
|
71
|
-
selector:
|
|
72
|
-
app.kubernetes.io/name: petclinic
|
|
73
|
-
app.kubernetes.io/component: webapp
|
|
74
|
-
app.kubernetes.io/part-of: petclinic
|
|
75
|
-
---
|
|
76
|
-
apiVersion: apps/v1 # for k8s versions before 1.9.0 use apps/v1beta2 and before 1.8.0 use extensions/v1beta1
|
|
77
|
-
kind: Deployment
|
|
78
|
-
metadata:
|
|
79
|
-
name: spring-boot-app
|
|
80
|
-
labels:
|
|
81
|
-
app.kubernetes.io/name: petclinic
|
|
82
|
-
app.kubernetes.io/component: webapp
|
|
83
|
-
app.kubernetes.io/part-of: petclinic
|
|
84
|
-
spec:
|
|
85
|
-
selector:
|
|
86
|
-
matchLabels:
|
|
87
|
-
app.kubernetes.io/name: petclinic
|
|
88
|
-
app.kubernetes.io/component: webapp
|
|
89
|
-
app.kubernetes.io/part-of: petclinic
|
|
90
|
-
replicas: 1
|
|
91
|
-
template:
|
|
92
|
-
metadata:
|
|
93
|
-
labels:
|
|
94
|
-
app.kubernetes.io/name: petclinic
|
|
95
|
-
app.kubernetes.io/component: webapp
|
|
96
|
-
app.kubernetes.io/part-of: petclinic
|
|
97
|
-
spec:
|
|
98
|
-
containers:
|
|
99
|
-
- name: spring-boot
|
|
100
|
-
image: quay.io/mloriedo/spring-petclinic
|
|
101
|
-
resources:
|
|
102
|
-
requests:
|
|
103
|
-
memory: 512Mi
|
|
104
|
-
ports:
|
|
105
|
-
- containerPort: 8080
|
|
106
|
-
---
|
|
107
|
-
apiVersion: extensions/v1beta1
|
|
108
|
-
kind: Ingress
|
|
109
|
-
metadata:
|
|
110
|
-
name: spring-boot-app
|
|
111
|
-
labels:
|
|
112
|
-
app: spring-petclinic
|
|
113
|
-
tier: frontend
|
|
114
|
-
annotations:
|
|
115
|
-
kubernetes.io/ingress.class: "nginx"
|
|
116
|
-
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
|
|
117
|
-
nginx.ingress.kubernetes.io/proxy-connect-timeout: "3600"
|
|
118
|
-
nginx.ingress.kubernetes.io/ssl-redirect: "false"
|
|
119
|
-
spec:
|
|
120
|
-
rules:
|
|
121
|
-
- host: 192.168.99.100.nip.io
|
|
122
|
-
http:
|
|
123
|
-
paths:
|
|
124
|
-
- path: /
|
|
125
|
-
backend:
|
|
126
|
-
serviceName: spring-boot-app
|
|
127
|
-
servicePort: 8080
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
apiVersion: 1.0.0
|
|
3
|
-
metadata:
|
|
4
|
-
name: petclinic-dev-environment
|
|
5
|
-
projects:
|
|
6
|
-
- name: petclinic
|
|
7
|
-
source:
|
|
8
|
-
type: git
|
|
9
|
-
location: "https://github.com/spring-projects/spring-petclinic.git"
|
|
10
|
-
commitId: e7c879ed3abe10e446ff103887ad665ca6acf04e
|
|
11
|
-
components:
|
|
12
|
-
- type: cheEditor
|
|
13
|
-
id: eclipse/che-theia/next
|
|
14
|
-
memoryLimit: 512Mi
|
|
15
|
-
- type: kubernetes
|
|
16
|
-
alias: petclinic-web
|
|
17
|
-
reference: https://raw.githubusercontent.com/eclipse/che/master/tests/e2e/files/happy-path/containers-happy-path.yaml
|
|
18
|
-
selector:
|
|
19
|
-
app.kubernetes.io/component: webapp
|
|
20
|
-
entrypoints:
|
|
21
|
-
- containerName: spring-boot
|
|
22
|
-
command: ["tail"]
|
|
23
|
-
args: ["-f", "/dev/null"]
|
|
24
|
-
- type: kubernetes
|
|
25
|
-
alias: petclinic-db
|
|
26
|
-
reference: https://raw.githubusercontent.com/eclipse/che/master/tests/e2e/files/happy-path/containers-happy-path.yaml
|
|
27
|
-
selector:
|
|
28
|
-
app.kubernetes.io/component: database
|
|
29
|
-
- type: dockerimage
|
|
30
|
-
alias: maven-container
|
|
31
|
-
image: quay.io/eclipse/happy-path:next
|
|
32
|
-
env:
|
|
33
|
-
- name: MAVEN_CONFIG
|
|
34
|
-
value: /home/user/.m2
|
|
35
|
-
memoryLimit: 1500Mi
|
|
36
|
-
endpoints:
|
|
37
|
-
- name: '8080-tcp'
|
|
38
|
-
port: 8080
|
|
39
|
-
- name: 'debug'
|
|
40
|
-
port: 5005
|
|
41
|
-
attributes:
|
|
42
|
-
public: 'false'
|
|
43
|
-
mountSources: true
|
|
44
|
-
- type: chePlugin
|
|
45
|
-
id: redhat/java/latest
|
|
46
|
-
memoryLimit: "1000Mi"
|
|
47
|
-
preferences:
|
|
48
|
-
java.server.launchMode: Standard
|
|
49
|
-
- type: chePlugin
|
|
50
|
-
id: redhat/vscode-yaml/latest
|
|
51
|
-
commands:
|
|
52
|
-
- name: build
|
|
53
|
-
actions:
|
|
54
|
-
- type: exec
|
|
55
|
-
component: maven-container
|
|
56
|
-
command: mvn clean package | tee /workspace_logs/build.log && tail -n 40 /workspace_logs/build.log | grep 'BUILD SUCCESS' > /projects/petclinic/result-build.txt
|
|
57
|
-
workdir: /projects/petclinic
|
|
58
|
-
- name: build-file-output
|
|
59
|
-
actions:
|
|
60
|
-
- type: exec
|
|
61
|
-
component: maven-container
|
|
62
|
-
command: cd /projects/petclinic && mvn package | tee /workspace_logs/build-output.log && tail -n 40 /workspace_logs/build-output.log | grep 'BUILD SUCCESS' > /projects/petclinic/result-build-output.txt
|
|
63
|
-
- name: run
|
|
64
|
-
actions:
|
|
65
|
-
- type: exec
|
|
66
|
-
component: maven-container
|
|
67
|
-
command: java -jar spring-petclinic-2.4.5.jar --spring.profiles.active=mysql | tee /workspace_logs/run.log
|
|
68
|
-
workdir: /projects/petclinic/target
|
|
69
|
-
- name: run-with-changes
|
|
70
|
-
actions:
|
|
71
|
-
- type: exec
|
|
72
|
-
component: maven-container
|
|
73
|
-
command: java -jar spring-petclinic-2.4.5.jar --spring.profiles.active=mysql | tee /workspace_logs/run-with-changes.log
|
|
74
|
-
workdir: /projects/petclinic/target
|
|
75
|
-
- name: run-debug
|
|
76
|
-
actions:
|
|
77
|
-
- type: exec
|
|
78
|
-
component: maven-container
|
|
79
|
-
command: java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 spring-petclinic-2.4.5.jar --spring.profiles.active=mysql | tee /workspace_logs/run-debug.log
|
|
80
|
-
workdir: /projects/petclinic/target
|
|
81
|
-
- name: Debug remote java application
|
|
82
|
-
actions:
|
|
83
|
-
- type: vscode-launch
|
|
84
|
-
referenceContent: |
|
|
85
|
-
{
|
|
86
|
-
"version": "0.2.0",
|
|
87
|
-
"configurations": [
|
|
88
|
-
{
|
|
89
|
-
"type": "java",
|
|
90
|
-
"name": "Debug (Attach) - Remote",
|
|
91
|
-
"request": "attach",
|
|
92
|
-
"hostName": "localhost",
|
|
93
|
-
"port": 5005
|
|
94
|
-
}]
|
|
95
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<classpath>
|
|
3
|
-
<classpathentry kind="src" output="target/classes" path="src/main/java">
|
|
4
|
-
<attributes>
|
|
5
|
-
<attribute name="optional" value="true"/>
|
|
6
|
-
<attribute name="maven.pomderived" value="true"/>
|
|
7
|
-
</attributes>
|
|
8
|
-
</classpathentry>
|
|
9
|
-
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
|
|
10
|
-
<attributes>
|
|
11
|
-
<attribute name="maven.pomderived" value="true"/>
|
|
12
|
-
</attributes>
|
|
13
|
-
</classpathentry>
|
|
14
|
-
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
|
|
15
|
-
<attributes>
|
|
16
|
-
<attribute name="optional" value="true"/>
|
|
17
|
-
<attribute name="maven.pomderived" value="true"/>
|
|
18
|
-
<attribute name="test" value="true"/>
|
|
19
|
-
</attributes>
|
|
20
|
-
</classpathentry>
|
|
21
|
-
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
|
22
|
-
<attributes>
|
|
23
|
-
<attribute name="maven.pomderived" value="true"/>
|
|
24
|
-
</attributes>
|
|
25
|
-
</classpathentry>
|
|
26
|
-
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
|
27
|
-
<attributes>
|
|
28
|
-
<attribute name="maven.pomderived" value="true"/>
|
|
29
|
-
</attributes>
|
|
30
|
-
</classpathentry>
|
|
31
|
-
<classpathentry kind="src" path="target/generated-sources/annotations">
|
|
32
|
-
<attributes>
|
|
33
|
-
<attribute name="optional" value="true"/>
|
|
34
|
-
<attribute name="maven.pomderived" value="true"/>
|
|
35
|
-
<attribute name="ignore_optional_problems" value="true"/>
|
|
36
|
-
<attribute name="m2e-apt" value="true"/>
|
|
37
|
-
</attributes>
|
|
38
|
-
</classpathentry>
|
|
39
|
-
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
|
|
40
|
-
<attributes>
|
|
41
|
-
<attribute name="optional" value="true"/>
|
|
42
|
-
<attribute name="maven.pomderived" value="true"/>
|
|
43
|
-
<attribute name="ignore_optional_problems" value="true"/>
|
|
44
|
-
<attribute name="m2e-apt" value="true"/>
|
|
45
|
-
<attribute name="test" value="true"/>
|
|
46
|
-
</attributes>
|
|
47
|
-
</classpathentry>
|
|
48
|
-
<classpathentry kind="output" path="target/classes"/>
|
|
49
|
-
</classpath>
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/*********************************************************************
|
|
2
|
-
* Copyright (c) 2019-2023 Red Hat, Inc.
|
|
3
|
-
*
|
|
4
|
-
* This program and the accompanying materials are made
|
|
5
|
-
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
-
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
-
*
|
|
8
|
-
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
-
**********************************************************************/
|
|
10
|
-
import { DriverHelper } from '../../../utils/DriverHelper';
|
|
11
|
-
import { injectable, inject } from 'inversify';
|
|
12
|
-
import 'reflect-metadata';
|
|
13
|
-
import { CLASSES, TYPES } from '../../../configs/inversify.types';
|
|
14
|
-
import { By } from 'selenium-webdriver';
|
|
15
|
-
import { WorkspaceDetails } from './WorkspaceDetails';
|
|
16
|
-
import { WorkspaceStatus } from '../../../utils/workspace/WorkspaceStatus';
|
|
17
|
-
import { Logger } from '../../../utils/Logger';
|
|
18
|
-
import { TimeoutConstants } from '../../../constants/TimeoutConstants';
|
|
19
|
-
import { ITestWorkspaceUtil } from '../../../utils/workspace/ITestWorkspaceUtil';
|
|
20
|
-
|
|
21
|
-
@injectable()
|
|
22
|
-
export class WorkspaceDetailsPlugins {
|
|
23
|
-
constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper,
|
|
24
|
-
@inject(CLASSES.WorkspaceDetails) private readonly workspaceDetails: WorkspaceDetails,
|
|
25
|
-
@inject(TYPES.WorkspaceUtil) private readonly testWorkspaceUtil: ITestWorkspaceUtil) { }
|
|
26
|
-
|
|
27
|
-
async waitPluginListItem(pluginName: string) {
|
|
28
|
-
Logger.debug(`WorkspaceDetailsPlugins.waitPluginListItem ${pluginName}`);
|
|
29
|
-
|
|
30
|
-
const pluginListItemLocator: By = By.css(this.getPluginListItemCssLocator(pluginName));
|
|
31
|
-
|
|
32
|
-
await this.driverHelper.waitVisibility(pluginListItemLocator, TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async enablePlugin(pluginName: string, pluginVersion?: string) {
|
|
36
|
-
Logger.debug(`WorkspaceDetailsPlugins.enablePlugin ${pluginName}:${pluginVersion}`);
|
|
37
|
-
|
|
38
|
-
await this.waitPluginDisabling(pluginName, pluginVersion);
|
|
39
|
-
await this.clickOnPluginListItemSwitcher(pluginName, pluginVersion);
|
|
40
|
-
await this.waitPluginEnabling(pluginName, pluginVersion);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async disablePlugin(pluginName: string, pluginVersion?: string) {
|
|
44
|
-
Logger.debug(`WorkspaceDetailsPlugins.disablePlugin ${pluginName}:${pluginVersion}`);
|
|
45
|
-
|
|
46
|
-
await this.waitPluginEnabling(pluginName, pluginVersion);
|
|
47
|
-
await this.clickOnPluginListItemSwitcher(pluginName, pluginVersion);
|
|
48
|
-
await this.waitPluginDisabling(pluginName, pluginVersion);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
async addPluginAndOpenWorkspace(namespace: string, workspaceName: string, pluginName: string, pluginId: string, pluginVersion?: string) {
|
|
52
|
-
Logger.debug(`WorkspaceDetailsPlugins.addPluginAndOpenWorkspace ${namespace}/${workspaceName} plugin: ${pluginName}:${pluginVersion}`);
|
|
53
|
-
|
|
54
|
-
await this.workspaceDetails.selectTab('Plugins');
|
|
55
|
-
await this.enablePlugin(pluginName, pluginVersion);
|
|
56
|
-
await this.workspaceDetails.saveChanges();
|
|
57
|
-
await this.workspaceDetails.openWorkspace(namespace, workspaceName);
|
|
58
|
-
await this.testWorkspaceUtil.waitWorkspaceStatus(namespace, workspaceName, WorkspaceStatus.RUNNING);
|
|
59
|
-
await this.testWorkspaceUtil.waitPluginAdding(namespace, workspaceName, pluginId);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
private getPluginListItemCssLocator(pluginName: string, pluginVersion?: string): string {
|
|
63
|
-
if (pluginVersion) {
|
|
64
|
-
return `.plugin-item div[plugin-item-name*='${pluginName}'][plugin-item-version='${pluginVersion}']`;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return `.plugin-item div[plugin-item-name*='${pluginName}']`;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
private getPluginListItemSwitcherCssLocator(pluginName: string, pluginVersion?: string): string {
|
|
71
|
-
return `${this.getPluginListItemCssLocator(pluginName, pluginVersion)} md-switch`;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
private async clickOnPluginListItemSwitcher(pluginName: string,
|
|
75
|
-
pluginVersion?: string,
|
|
76
|
-
timeout: number = TimeoutConstants.TS_CLICK_DASHBOARD_ITEM_TIMEOUT) {
|
|
77
|
-
|
|
78
|
-
const pluginListItemSwitcherLocator = By.css(this.getPluginListItemSwitcherCssLocator(pluginName, pluginVersion));
|
|
79
|
-
|
|
80
|
-
await this.driverHelper.waitAndClick(pluginListItemSwitcherLocator, timeout);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
private async waitPluginEnabling(pluginName: string, pluginVersion?: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT) {
|
|
84
|
-
const enabledPluginSwitcherLocator: By = By.css(`${this.getPluginListItemCssLocator(pluginName, pluginVersion)} md-switch[aria-checked='true']`);
|
|
85
|
-
|
|
86
|
-
await this.driverHelper.waitVisibility(enabledPluginSwitcherLocator, timeout);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
private async waitPluginDisabling(pluginName: string, pluginVersion?: string, timeout: number = TimeoutConstants.TS_COMMON_DASHBOARD_WAIT_TIMEOUT) {
|
|
90
|
-
const disabledPluginSwitcherLocator: By = By.css(`${this.getPluginListItemCssLocator(pluginName, pluginVersion)} md-switch[aria-checked='false']`);
|
|
91
|
-
|
|
92
|
-
await this.driverHelper.waitVisibility(disabledPluginSwitcherLocator, timeout);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/*********************************************************************
|
|
2
|
-
* Copyright (c) 2019-2023 Red Hat, Inc.
|
|
3
|
-
*
|
|
4
|
-
* This program and the accompanying materials are made
|
|
5
|
-
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
-
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
-
*
|
|
8
|
-
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
-
**********************************************************************/
|
|
10
|
-
import 'reflect-metadata';
|
|
11
|
-
import { ICheLoginPage } from './ICheLoginPage';
|
|
12
|
-
import { CheLoginPage } from '../openshift/CheLoginPage';
|
|
13
|
-
import { injectable, inject } from 'inversify';
|
|
14
|
-
import { CLASSES } from '../../configs/inversify.types';
|
|
15
|
-
import { TestConstants } from '../../constants/TestConstants';
|
|
16
|
-
import { Logger } from '../../utils/Logger';
|
|
17
|
-
|
|
18
|
-
@injectable()
|
|
19
|
-
export class MultiUserLoginPage implements ICheLoginPage {
|
|
20
|
-
|
|
21
|
-
constructor(
|
|
22
|
-
@inject(CLASSES.CheLoginPage) private readonly cheLogin: CheLoginPage) { }
|
|
23
|
-
|
|
24
|
-
async login() {
|
|
25
|
-
Logger.debug('MultiUserLoginPage.login');
|
|
26
|
-
|
|
27
|
-
await this.cheLogin.waitEclipseCheLoginFormPage();
|
|
28
|
-
await this.cheLogin.inputUserNameEclipseCheLoginPage(TestConstants.TS_SELENIUM_USERNAME);
|
|
29
|
-
await this.cheLogin.inputPaswordEclipseCheLoginPage(TestConstants.TS_SELENIUM_PASSWORD);
|
|
30
|
-
await this.cheLogin.clickEclipseCheLoginButton();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/*********************************************************************
|
|
2
|
-
* Copyright (c) 2019-2023 Red Hat, Inc.
|
|
3
|
-
*
|
|
4
|
-
* This program and the accompanying materials are made
|
|
5
|
-
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
-
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
-
*
|
|
8
|
-
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
-
**********************************************************************/
|
|
10
|
-
import 'reflect-metadata';
|
|
11
|
-
import { injectable, inject } from 'inversify';
|
|
12
|
-
import { Logger } from '../../utils/Logger';
|
|
13
|
-
import { DriverHelper } from '../../utils/DriverHelper';
|
|
14
|
-
import { CLASSES } from '../../configs/inversify.types';
|
|
15
|
-
import { By } from 'selenium-webdriver';
|
|
16
|
-
|
|
17
|
-
@injectable()
|
|
18
|
-
export class UpdateAccountInformationPage {
|
|
19
|
-
|
|
20
|
-
constructor(@inject(CLASSES.DriverHelper) private readonly driverHelper: DriverHelper) { }
|
|
21
|
-
|
|
22
|
-
async enterEmail(email: string, timeout: number) {
|
|
23
|
-
Logger.debug('UpdateAccountInformationPage.enterEmail');
|
|
24
|
-
|
|
25
|
-
await this.driverHelper.enterValue(By.id('email'), email, timeout);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async enterFirstName(firstName: string, timeout: number) {
|
|
29
|
-
Logger.debug('UpdateAccountInformationPage.enterFirstName');
|
|
30
|
-
|
|
31
|
-
await this.driverHelper.enterValue(By.id('firstName'), firstName, timeout);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
async enterLastName(lastName: string, timeout: number) {
|
|
35
|
-
Logger.debug('UpdateAccountInformationPage.enterLastName');
|
|
36
|
-
|
|
37
|
-
await this.driverHelper.enterValue(By.id('lastName'), lastName, timeout);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
async clickConfirmButton(timeout: number) {
|
|
41
|
-
Logger.debug('UpdateAccountInformationPage.clickConfirmButton');
|
|
42
|
-
|
|
43
|
-
await this.driverHelper.waitAndClick(By.xpath('//input[@type=\'submit\']'), timeout);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async clickAddToExistingAccountButton(timeout: number) {
|
|
47
|
-
Logger.debug('UpdateAccountInformationPage.clickAddToExistingAccountButton');
|
|
48
|
-
|
|
49
|
-
await this.driverHelper.waitAndClick(By.id('linkAccount'), timeout);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async enterPassword(password: string, timeout: number) {
|
|
53
|
-
Logger.debug('UpdateAccountInformationPage.enterPassword');
|
|
54
|
-
|
|
55
|
-
await this.driverHelper.enterValue(By.id('password'), password, timeout);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async clickLogInButton(timeout: number) {
|
|
59
|
-
Logger.debug('UpdateAccountInformationPage.clickLogInButton');
|
|
60
|
-
|
|
61
|
-
await this.driverHelper.waitAndClick(By.id('kc-login'), timeout);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async clickToAllowSelectedPermissionsButton(timeout: number) {
|
|
65
|
-
Logger.debug('UpdateAccountInformationPage.clickToAllowSelectedPermissionsButton');
|
|
66
|
-
|
|
67
|
-
await this.driverHelper.waitAndClick(By.xpath('//input[@name=\'approve\']'), timeout);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
}
|