提交 ee56162e 编写于 作者: 雨爱无痕

Merge branch 'main' into ztf-43_zhaoke

......@@ -6,23 +6,22 @@ pid=0
1. Load web page from url http://xxx
2. Retrieve img element zt-logo.png in html
3. Check img exist >> `.*.png`
3. Check img exist >> `必应`
*/
var http = require('http');
const https = require('https');
http.get('http://max.demo.zentao.net/user-login-Lw==.html', function(req) {
let html = '', image = '';
https.get('https://cn.bing.com', function(req) {
let html = ''
req.on('data', function(data) {
html += data;
});
req.on('end', () => {
var res = html.match(/<img\ssrc="(.*?)"/);
const res = html.match(/<title>(.*?)</);
if (res.length > 1) {
image = res[1]
console.log(image)
console.log(res[1])
}
});
});
......@@ -6,13 +6,13 @@ pid=0
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Validate its format >> `^[a-z0-9]{26}`
3. Validate its format >> `^[a-z0-9]{8}`
*/
var http = require('http');
const https = require('https');
http.get('http://max.demo.zentao.net/pms/?mode=getconfig', function(req) {
https.get('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1', function(req) {
let jsonStr = '';
req.on('data', function(data) {
......@@ -21,8 +21,8 @@ http.get('http://max.demo.zentao.net/pms/?mode=getconfig', function(req) {
req.on('end', () => {
if(req.statusCode === 200){
try{
var json = JSON.parse(jsonStr);
console.log(json.sessionID)
const json = JSON.parse(jsonStr);
console.log(json.images[0].startdate)
} catch(err){
console.log('ERR: ' + err);
}
......
......@@ -6,25 +6,13 @@ pid=0
1. Load web page from url http://xxx
2. Retrieve img element zt-logo.png in html
3. Check img exist >> `.*.png`
3. Check img exist >> `必应`
]]
local http = require("socket.http") -- need luasocket library (luarocks install luasocket)
local ltn12 = require("ltn12")
require("socket")
local https = require("ssl.https") -- need luasocket, luasec modules
local body, code, headers, status = https.request("https://cn.bing.com")
function http.get(u)
local t = {}
local r, c, h = http.request{
url = u,
sink = ltn12.sink.table(t)}
return r, c, h, table.concat(t)
end
r,c,h,body = http.get("http://max.demo.zentao.net/user-login-Lw==.html")
if c~= 200 then
print("ERR: " .. c)
else
_, _, src = string.find(body, "<img%ssrc=\"(.-)\" .*>")
print(src)
end
_, _, src = string.find(body, "<title>(.-)</title>")
print(src)
......@@ -6,26 +6,13 @@ pid=0
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Check its format >> `^[a-z0-9]{26}`
3. Check its format >> `^[a-z0-9]{8}`
]]
local http = require("socket.http") -- need luasocket library (luarocks install luasocket)
local ltn12 = require("ltn12")
require("socket")
local https = require("ssl.https") -- need luasocket, luasec modules
local body, code, headers, status = https.request("https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1")
function http.get(u)
local t = {}
local r, c, h = http.request{
url = u,
sink = ltn12.sink.table(t)
}
return r, c, h, table.concat(t)
end
r, c, h,body = http.get("http://max.demo.zentao.net/pms/?mode=getconfig")
if c~= 200 then
print("ERR: " .. c)
else
_, _, src = string.find(body, '"sessionID":"(.-)"')
print(src)
end
_, _, src = string.find(body, '"startdate":"(.-)"')
print(src)
......@@ -6,13 +6,13 @@ pid=0
1. Load web page from url http://xxx
2. Retrieve img element zt-logo.png in html
3. Check img exist >> `.*zt-logo.png`
3. Check img exist >> `必应`
=cut
use LWP::Simple; # need LWP::Simple module
$html = get('http://max.demo.zentao.net/user-login-Lw==.html');
$html = get('https://cn.bing.com');
if ( $html =~ /<img src="(.*?)" .*>/ ) {
if ( $html =~ /<title>(.*?)</ ) {
print "$1\n";
}
......@@ -7,13 +7,13 @@ pid=0
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Check its format >> `^[a-z0-9]{26}`
3. Check its format >> `^[a-z0-9]{8}`
=cut
use LWP::Simple; # need LWP::Simple module
$json = get('http://max.demo.zentao.net/pms/?mode=getconfig');
$json = get('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');
if ( $json =~ /"sessionID":"([^"]*)"/ ) {
if ( $json =~ /"startdate":"([^"]*)"/ ) {
print "$1\n";
}
......@@ -8,10 +8,10 @@ pid=0
1. Load web page from url http://xxx
2. Retrieve img element zt-logo.png in html
3. Check img exist >> `.*zt-logo.png`
3. Check img exist >> `必应`
*/
$resp = file_get_contents('http://max.demo.zentao.net/user-login-Lw==.html');
preg_match_all("/<img src=\"(.*)\" .*>/U", $resp, $matches);
$resp = file_get_contents('https://cn.bing.com');
preg_match_all("/<title>(.*)</U", $resp, $matches);
echo $matches[1][0] . "\n";
......@@ -8,10 +8,10 @@ pid=0
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Check its format >> `^[a-z0-9]{26}`
3. Check its format >> `^[a-z0-9]{8}`
*/
$resp = file_get_contents('http://max.demo.zentao.net/pms/?mode=getconfig');
$resp = file_get_contents('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1');
$json = json_decode($resp);
echo $json->sessionID . "\n";
echo $json->images[0]->startdate . "\n";
#!/usr/bin/env python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
......
#!/usr/bin/env python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
......@@ -8,13 +8,13 @@ pid=0
1. Load web page from url http://xxx
2. Retrieve img element zt-logo.png in html
3. Check img exist >> `.*zt-logo.png`
3. Check img exist >> `必应`
'''
import requests
import re
html = requests.get('http://max.demo.zentao.net/user-login-Lw==.html').content #need requests library (pip/pip3 install requests)
elem = re.search(r"<img src=\"(.*?)\" .*>", html.decode("utf-8")).group(1)
html = requests.get('https://cn.bing.com').content #need requests library (pip/pip3 install requests)
elem = re.search(r"<title>(.*?)<", html.decode("utf-8")).group(1)
print(elem)
#!/usr/bin/env python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'''
......@@ -8,13 +8,13 @@ pid=0
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Check its format >> `^[a-z0-9]{26}`
3. Check its format >> `^[a-z0-9]{8}`
'''
import requests
import json
jsonStr = requests.get('http://max.demo.zentao.net/pms/?mode=getconfig').content #need requests library (pip/pip3 install requests)
jsonStr = requests.get('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1').content
jsonObj = json.loads(jsonStr)
print(jsonObj['sessionID'])
print(jsonObj['images'][0]['startdate'])
......@@ -8,17 +8,16 @@ pid=0
1. Load web page from url http://xxx
2. Retrieve img element zt-logo.png in html
3. Check img exist >> `.*zt-logo.png`
3. Check img exist >> `必应`
=end
require "open-uri"
require 'uri'
require 'net/http'
uri = 'http://max.demo.zentao.net/user-login-Lw==.html'
html = nil
open(uri) do |http|
html = http.read
end
uri = URI('https://cn.bing.com')
res = Net::HTTP.get_response(uri)
html = res.body
elem = html.match(/<img src="(.*?)" .*>/).captures
puts ""+elem[0]
elem = html.match(/<title>(.*?)</).captures
puts ""+elem[0]
\ No newline at end of file
......@@ -7,18 +7,18 @@ pid=0
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Check its format >> `^[a-z0-9]{26}`
3. Check its format >> `^[0-9]{8}`
=end
require "open-uri"
require "json"
require 'uri'
require 'net/http'
require 'json'
uri = 'http://max.demo.zentao.net/pms/?mode=getconfig'
html = nil
open(uri) do |http|
html = http.read
end
uri = URI('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1')
res = Net::HTTP.get_response(uri)
json = JSON.parse(res.body)
puts json['images'][0]['startdate']
json = JSON.parse(html) # need json library (gem install json)
puts json['sessionID']
......@@ -8,11 +8,11 @@ pid=0
1. Load web page from url http://xxx
2. Retrieve img element zt-logo.png in html
3. Check img exist >> `.*zt-logo.png`
3. Check img exist >> `.*必应.*`
!
resp=$(curl -s http://max.demo.zentao.net/user-login-Lw==.html) # apt-get install curl if needed
elem=`echo $resp | grep -o '<img[^>]*src="[^"]*"'`
resp=$(curl -s https://cn.bing.com) # apt-get install curl if needed
elem=`echo $resp | grep -o '<title>.*</title>'`
echo "$elem"
......@@ -8,11 +8,11 @@ pid=0
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Validate its format >> `^[a-z0-9]{26}`
3. Validate its format >> `^[0-9]{8}`
!
resp=$(curl -s 'http://max.demo.zentao.net/pms/?mode=getconfig') # apt-get install curl if needed
elem=`echo $resp | grep -o '"sessionID":"[^"]*"' | sed 's/^.*:"//g' | sed 's/"//g'`
resp=$(curl -s 'https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1') # apt-get install curl if needed
elem=`echo $resp | grep -o '"startdate":"[^"]*"' | sed 's/^.*:"//g' | sed 's/"//g'`
echo "$elem"
......@@ -7,16 +7,19 @@ pid=0
1. Load web page from url http://xxx
2. Retrieve img element zt-logo.png in html
3. Check img exist >> `.*zt-logo.png`
3. Check img exist >> `Bing images`
}
package require http
package require tls
set url http://max.demo.zentao.net/user-login-Lw==.html
http::register https 443 tls::socket
set url https://cn.bing.com/images/trending
set http [::http::geturl $url]
set html [::http::data $http]
regexp -- {<img src="(.*?)" .*>} $html match elem
puts "$elem"
regexp -- {<title>(.*?)</title>} $html match title
puts "$title"
......@@ -5,20 +5,26 @@ title=check remote interface response
cid=0
pid=0
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Check its format >> `^[a-z0-9]{26}`
1. Send a request to interface http://xxx
2. Retrieve sessionID field from response json
3. Check its format >> `^[a-z0-9]{8}`
}
package require http
package require tls
package require json
set url http://max.demo.zentao.net/pms/?mode=getconfig
http::register https 443 tls::socket
set url https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
set http [::http::geturl $url]
set jsonStr [::http::data $http]
# need json library, you may use ActiveTcl
set jsonObj [json::json2dict $jsonStr]
puts "[dict get $jsonObj sessionID]"
regexp -- {"startdate":"(.*?)"} $jsonStr match date
puts "$date"
# set jsonObj [json::json2dict $jsonStr]
# set images [dict get $jsonObj images]
# puts [dict get $images startdate]
package script
import (
"github.com/easysoft/zentaoatf/test/ui/conf"
plw "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
"testing"
)
func Demo(t provider.T) {
webpage, _ := plw.OpenUrl("https://baidu.com", t)
defer func() { plw.Close(t) }()
webpage.GetLocator("//*[@id=\"kw1\"]", t).Click(t)
}
func TestDemo(t *testing.T) {
conf.ExitAllOnError = true
runner.Run(t, "设置界面语言", Demo)
}
package script
import (
"testing"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
var proxyBrowser playwright.Browser
func CreateProxy(t provider.T) {
t.ID("5740")
t.AddParentSuite("设置界面语言")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := false
var slowMo float64 = 100
if proxyBrowser == nil || !proxyBrowser.IsConnected() {
proxyBrowser, err = pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
}
if err != nil {
t.Errorf("Fail to launch the web proxyBrowser: %v", err)
t.FailNow()
}
page, err := proxyBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = proxyBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
return
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
return
}
}()
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
err = page.Click("#navbar>>[title=\"设置\"]")
if err != nil {
t.Errorf("The Click proxy nav fail: %v", err)
t.FailNow()
}
err = page.Click("#serverTable>>button:has-text('新建执行节点')")
if err != nil {
t.Errorf("Click open interpreter modal fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#proxyFormModal input")
if err != nil {
t.Errorf("Find create proxy input fail: %v", err)
t.FailNow()
}
nameInput, err := locator.Nth(0)
if err != nil {
t.Errorf("Find lang select fail: %v", err)
t.FailNow()
}
err = nameInput.Fill("测试执行节点")
if err != nil {
t.Errorf("Fill name fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(200)
pathSelect, err := locator.Nth(1)
if err != nil {
t.Errorf("Find path input fail: %v", err)
t.FailNow()
}
err = pathSelect.Fill("http://127.0.0.1:8085")
if err != nil {
t.Errorf("Fil path input fail: %v", err)
t.FailNow()
}
err = page.Click("#proxyFormModal>>text=确定")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
page.WaitForSelector("#proxyFormModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached})
page.WaitForTimeout(1000)
locator, err = page.Locator("#proxyTable .z-tbody-td >> :scope:has-text('测试执行节点')")
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find created proxy fail: %v", err)
t.FailNow()
}
}
func EditProxy(t provider.T) {
t.ID("5741")
t.AddParentSuite("设置界面语言")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := false
var slowMo float64 = 100
if proxyBrowser == nil || !proxyBrowser.IsConnected() {
proxyBrowser, err = pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
}
defer proxyBrowser.Close()
defer pw.Stop()
if err != nil {
t.Errorf("Fail to launch the web proxyBrowser: %v", err)
t.FailNow()
}
page, err := proxyBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = proxyBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
return
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
return
}
}()
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
err = page.Click("#navbar>>[title=\"设置\"]")
if err != nil {
t.Errorf("The Click proxy nav fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#proxyTable", playwright.PageLocatorOptions{HasText: "测试执行节点"})
if err != nil {
t.Errorf("Find 测试执行节点 tr fail: %v", err)
t.FailNow()
}
locator, err = locator.Locator("text=编辑")
if err != nil {
t.Errorf("Find 测试执行节点 edit btn fail: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("The Click update site fail: %v", err)
t.FailNow()
}
locator, err = page.Locator("#proxyFormModal input")
if err != nil {
t.Errorf("Find create proxy input fail: %v", err)
t.FailNow()
}
nameInput, err := locator.Nth(0)
if err != nil {
t.Errorf("Find name select fail: %v", err)
t.FailNow()
}
err = nameInput.Fill("测试执行节点-update")
if err != nil {
t.Errorf("Fill name input fail: %v", err)
t.FailNow()
}
err = page.Click("#proxyFormModal>>text=确定")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
page.WaitForSelector("#proxyFormModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached})
page.WaitForTimeout(1000)
locator, err = page.Locator("#proxyTable .z-tbody-td >> :scope:has-text('测试执行节点')")
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find updated proxy fail: %v", err)
t.FailNow()
}
}
func DeleteProxy(t provider.T) {
t.ID("5742")
t.AddParentSuite("设置界面语言")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := false
var slowMo float64 = 100
if proxyBrowser == nil || !proxyBrowser.IsConnected() {
proxyBrowser, err = pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web proxyBrowser: %v", err)
t.FailNow()
}
}
page, err := proxyBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = proxyBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
return
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
return
}
}()
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
err = page.Click("#navbar>>[title=\"设置\"]")
if err != nil {
t.Errorf("The Click proxy nav fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#proxyTable", playwright.PageLocatorOptions{HasText: "测试执行节点-update"})
if err != nil {
t.Errorf("Find python tr fail: %v", err)
t.FailNow()
}
locator, err = locator.Locator("text=删除")
if err != nil {
t.Errorf("Find 测试执行节点 del btn fail: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("The Click update site fail: %v", err)
t.FailNow()
}
err = page.Click(":nth-match(.modal-action > button, 1)")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(1000)
locator, err = page.Locator("#settingModal .z-tbody-tr", playwright.PageLocatorOptions{HasText: "测试执行节点-update"})
c, err := locator.Count()
if err != nil || c > 0 {
t.Errorf("Delete proxy fail: %v", err)
t.FailNow()
}
}
func TestUiProxy(t *testing.T) {
runner.Run(t, "客户端-创建执行节点", CreateProxy)
runner.Run(t, "客户端-编辑执行节点", EditProxy)
runner.Run(t, "客户端-删除执行节点", DeleteProxy)
}
此差异已折叠。
package script
import (
"testing"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
var serverBrowser playwright.Browser
func CreateServer(t provider.T) {
t.ID("5737")
t.AddParentSuite("管理服务器")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := false
var slowMo float64 = 100
if serverBrowser == nil || !serverBrowser.IsConnected() {
serverBrowser, err = pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
}
if err != nil {
t.Errorf("Fail to launch the web serverBrowser: %v", err)
t.FailNow()
}
page, err := serverBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = serverBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
return
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
return
}
}()
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
err = page.Click("#navbar>>[title=\"设置\"]")
if err != nil {
t.Errorf("The Click server nav fail: %v", err)
t.FailNow()
}
err = page.Click("text=新建服务器")
if err != nil {
t.Errorf("The Click create server fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#serverFormModal input")
if err != nil {
t.Errorf("Find create server input fail: %v", err)
t.FailNow()
}
nameInput, err := locator.Nth(0)
if err != nil {
t.Errorf("Find lang select fail: %v", err)
t.FailNow()
}
err = nameInput.Fill("测试服务器")
if err != nil {
t.Errorf("Fill name fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(200)
pathSelect, err := locator.Nth(1)
if err != nil {
t.Errorf("Find path input fail: %v", err)
t.FailNow()
}
err = pathSelect.Fill("http://127.0.0.1:8085")
if err != nil {
t.Errorf("Fil path input fail: %v", err)
t.FailNow()
}
err = page.Click("#serverFormModal>>text=确定")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#settingModal .z-tbody-td:has-text('测试服务器')")
if err != nil {
t.Errorf("Wait created server fail: %v", err)
t.FailNow()
}
locator, err = page.Locator("#settingModal .z-tbody-td", playwright.PageLocatorOptions{HasText: "测试服务器"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find created server fail: %v", err)
t.FailNow()
}
}
func EditServer(t provider.T) {
t.ID("5738")
t.AddParentSuite("管理服务器")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := false
var slowMo float64 = 100
if serverBrowser == nil || !serverBrowser.IsConnected() {
serverBrowser, err = pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
}
defer serverBrowser.Close()
defer pw.Stop()
if err != nil {
t.Errorf("Fail to launch the web serverBrowser: %v", err)
t.FailNow()
}
page, err := serverBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = serverBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
return
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
return
}
}()
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
err = page.Click("#navbar>>[title=\"设置\"]")
if err != nil {
t.Errorf("The Click server nav fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#settingModal .z-tbody-tr:has-text('测试服务器')>>td>>nth=-1>>text=编辑")
if err != nil {
t.Errorf("Find 测试服务器 edit btn fail: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("The Click update site fail: %v", err)
t.FailNow()
}
locator, err = page.Locator("#serverFormModal input")
if err != nil {
t.Errorf("Find create server input fail: %v", err)
t.FailNow()
}
nameInput, err := locator.Nth(0)
if err != nil {
t.Errorf("Find name select fail: %v", err)
t.FailNow()
}
err = nameInput.Fill("测试服务器-update")
if err != nil {
t.Errorf("Fill name input fail: %v", err)
t.FailNow()
}
err = page.Click("#serverFormModal>>text=确定")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
page.WaitForSelector("#serverFormModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached})
_, err = page.WaitForSelector("#settingModal .z-tbody-td:has-text('测试服务器-update')")
if err != nil {
t.Errorf("Wait updated server fail: %v", err)
t.FailNow()
}
locator, err = page.Locator("#settingModal .z-tbody-td", playwright.PageLocatorOptions{HasText: "测试服务器-update"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find updated server fail: %v", err)
t.FailNow()
}
}
func DeleteServer(t provider.T) {
t.ID("5739")
t.AddParentSuite("管理服务器")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := false
var slowMo float64 = 100
if serverBrowser == nil || !serverBrowser.IsConnected() {
serverBrowser, err = pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web serverBrowser: %v", err)
t.FailNow()
}
}
page, err := serverBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = serverBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
return
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
return
}
}()
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
err = page.Click("#navbar>>[title=\"设置\"]")
if err != nil {
t.Errorf("The Click server nav fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#settingModal .z-tbody-tr", playwright.PageLocatorOptions{HasText: "测试服务器-update"})
if err != nil {
t.Errorf("Find python tr fail: %v", err)
t.FailNow()
}
locator, err = locator.Locator("text=删除")
if err != nil {
t.Errorf("Find 测试服务器 del btn fail: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("The Click update site fail: %v", err)
t.FailNow()
}
err = page.Click(":nth-match(.modal-action > button, 1)")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#settingModal .z-tbody-td:has-text('测试服务器-update')", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached})
if err != nil {
t.Errorf("Wait updated server fail: %v", err)
t.FailNow()
}
locator, err = page.Locator("#settingModal .z-tbody-tr", playwright.PageLocatorOptions{HasText: "测试服务器-update"})
c, err := locator.Count()
if err != nil || c > 0 {
t.Errorf("Delete server fail: %v", err)
t.FailNow()
}
}
func TestUiServer(t *testing.T) {
runner.Run(t, "客户端-创建服务器", CreateServer)
runner.Run(t, "客户端-编辑服务器", EditServer)
runner.Run(t, "客户端-删除服务器", DeleteServer)
}
package script
import (
"testing"
ztfTestHelper "github.com/easysoft/zentaoatf/test/helper/ztf"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
var workspaceFilterPage playwright.Page
func FilterDir(t provider.T) {
t.ID("5494")
t.AddParentSuite("管理禅道站点下工作目录")
locator, err := workspaceFilterPage.Locator("#siteMenuToggle")
if err != nil {
t.Errorf("The siteMenuToggle is missing: %v", err)
t.FailNow()
return
}
err = locator.Click()
if err != nil {
t.Errorf("The Click is fail: %v", err)
t.FailNow()
return
}
_, err = workspaceFilterPage.WaitForSelector("#navbar .list-item")
if err != nil {
t.Errorf("Wait for workspace list nav fail: %v", err)
t.FailNow()
return
}
err = workspaceFilterPage.Click(".list-item-title>>text=单元测试站点")
if err != nil {
t.Errorf("The Click workspace nav fail: %v", err)
t.FailNow()
return
}
err = workspaceFilterPage.Click(`[title="筛选"]`)
if err != nil {
t.Errorf("The Click create workspace fail: %v", err)
t.FailNow()
return
}
_, err = workspaceFilterPage.WaitForSelector("#filterModal")
if err != nil {
t.Errorf("Wait filter modal fail: %v", err)
t.FailNow()
return
}
err = workspaceFilterPage.Click("#filterModal>>.list-item-title:has-text(\"单元测试工作目录\")")
if err != nil {
t.Errorf("The Click php filter fail: %v", err)
t.FailNow()
return
}
eleArr, err := workspaceFilterPage.QuerySelectorAll("#leftPane .tree .tree-node")
if len(eleArr) < 1 {
t.Errorf("Filter valid fail: %v", err)
t.FailNow()
return
}
}
func FilterSuite(t provider.T) {
t.ID("5495")
t.AddParentSuite("管理禅道站点下工作目录")
err := workspaceFilterPage.Click(`[title="筛选"]`)
if err != nil {
t.Errorf("The Click create workspace fail: %v", err)
t.FailNow()
return
}
_, err = workspaceFilterPage.WaitForSelector("#filterModal")
if err != nil {
t.Errorf("Wait filter modal fail: %v", err)
t.FailNow()
return
}
workspaceFilterPage.WaitForTimeout(1000)
err = workspaceFilterPage.Click("#filterModal>>.tab-nav:has-text(\"按套件\")")
if err != nil {
t.Errorf("The Click by suite fail: %v", err)
t.FailNow()
return
}
workspaceFilterPage.WaitForSelector("#filterModal>>.list-item-title:has-text(\"test_suite\")")
err = workspaceFilterPage.Click("#filterModal>>.list-item-title:has-text(\"test_suite\")")
if err != nil {
t.Errorf("The Click test_suite filter fail: %v", err)
t.FailNow()
return
}
workspaceFilterPage.WaitForTimeout(200)
workspaceFilterPage.WaitForSelector(".toolbar:has-text(\"按套件\")")
ztfTestHelper.ExpandWorspace(workspaceFilterPage)
workspaceFilterPage.WaitForTimeout(200)
scriptLocator, err := workspaceFilterPage.Locator(".tree-node>>text=1_string_match.php")
c, err := scriptLocator.Count()
if err != nil || c == 0 {
t.Errorf("Filter suite fail: %v", err)
t.FailNow()
return
}
}
func ByModule(t provider.T) {
t.ID("5493")
t.AddParentSuite("管理禅道站点下工作目录")
err := workspaceFilterPage.Click("#displayByMenuToggle")
if err != nil {
t.Errorf("The Click byModule btn fail: %v", err)
t.FailNow()
}
workspaceFilterPage.WaitForTimeout(1000)
err = workspaceFilterPage.Click(".dropdown-menu>>.list-item-content:has-text(\"按模块\")")
if err != nil {
t.Errorf("The Click by module fail: %v", err)
t.FailNow()
}
err = workspaceFilterPage.Click(".tree-node-title:has-text(\"module1\")")
if err != nil {
t.Errorf("The Click module1 dir fail: %v", err)
t.FailNow()
}
// scriptLocator, err := workspaceFilterPage.Locator(".tree-node>>:has-text(\"check string matches pattern\")")
// c, err := scriptLocator.Count()
// if err != nil || c == 0 {
// t.Errorf("Filter suite fail: %v", err)
// t.FailNow()
// }
}
func FilterTask(t provider.T) {
t.ID("5496")
t.AddParentSuite("管理禅道站点下工作目录")
locator, err := workspaceFilterPage.Locator("#siteMenuToggle")
if err != nil {
t.Errorf("The siteMenuToggle is missing: %v", err)
t.FailNow()
return
}
err = locator.Click()
if err != nil {
t.Errorf("The Click is fail: %v", err)
t.FailNow()
return
}
_, err = workspaceFilterPage.WaitForSelector("#navbar .list-item")
if err != nil {
t.Errorf("Wait for workspace list nav fail: %v", err)
t.FailNow()
return
}
err = workspaceFilterPage.Click(".list-item-title>>text=单元测试站点")
if err != nil {
t.Errorf("The Click workspace nav fail: %v", err)
t.FailNow()
return
}
err = workspaceFilterPage.Click(`[title="筛选"]`)
if err != nil {
t.Errorf("The Click create workspace fail: %v", err)
t.FailNow()
return
}
_, err = workspaceFilterPage.WaitForSelector("#filterModal")
if err != nil {
t.Errorf("Wait filter modal fail: %v", err)
t.FailNow()
return
}
workspaceFilterPage.WaitForTimeout(1000)
err = workspaceFilterPage.Click("#filterModal>>.tab-nav:has-text(\"按测试单\")")
if err != nil {
t.Errorf("The Click by suite fail: %v", err)
t.FailNow()
return
}
workspaceFilterPage.WaitForSelector("#filterModal>>.list-item-title:has-text(\"企业网站第一期测试任务\")")
err = workspaceFilterPage.Click("#filterModal>>.list-item-title:has-text(\"企业网站第一期测试任务\")")
workspaceFilterPage.WaitForTimeout(200)
if err != nil {
t.Errorf("The Click test_task filter fail: %v", err)
t.FailNow()
return
}
workspaceFilterPage.WaitForSelector(".toolbar:has-text(\"按测试单\")")
ztfTestHelper.ExpandWorspace(workspaceFilterPage)
scriptLocator, err := workspaceFilterPage.Locator(".tree-node>>text=1_string_match.php")
c, err := scriptLocator.Count()
if err != nil || c == 0 {
t.Errorf("Filter task fail: %v", err)
t.FailNow()
return
}
}
func TestUiWorkspaceFilter(t *testing.T) {
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
return
}
headless := false
var slowMo float64 = 100
workspaceBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web workspaceBrowser: %v", err)
t.FailNow()
return
}
workspaceFilterPage, err = workspaceBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
return
}
if _, err := workspaceFilterPage.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
return
}
ztfTestHelper.ExpandWorspace(workspaceFilterPage)
runner.Run(t, "客户端-按目录过滤禅道用例脚本", FilterDir)
runner.Run(t, "客户端-按套件过滤禅道用例脚本", FilterSuite)
runner.Run(t, "客户端-按测试单过滤禅道用例脚本", FilterTask)
runner.Run(t, "客户端-按模块展示禅道用例脚本", ByModule)
if err = workspaceBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
return
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
return
}
}
package script
import (
"fmt"
"os"
"strings"
"testing"
commonTestHelper "github.com/easysoft/zentaoatf/test/helper/common"
ztfTestHelper "github.com/easysoft/zentaoatf/test/helper/ztf"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
var pw, err = os.Getwd()
var (
workspacePath = fmt.Sprintf("%stest%sdemo%sphp", commonTestHelper.RootPath, commonTestHelper.FilePthSep, commonTestHelper.FilePthSep)
)
var workspacePage playwright.Page
func CreateWorkspace(t provider.T) {
t.ID("5468")
t.AddParentSuite("管理禅道站点下工作目录")
err = workspacePage.Click(`[title="新建工作目录"]`)
if err != nil {
t.Errorf("The Click create workspace fail: %v", err)
t.FailNow()
return
}
_, err = workspacePage.WaitForSelector("#workspaceFormModal")
locator, err := workspacePage.Locator("#workspaceFormModal input")
if err != nil {
t.Errorf("Find create workspace input fail: %v", err)
t.FailNow()
return
}
titleInput, err := locator.Nth(0)
if err != nil {
t.Errorf("Find title input fail: %v", err)
t.FailNow()
return
}
err = titleInput.Fill("单元测试工作目录")
if err != nil {
t.Errorf("Fil title input fail: %v", err)
t.FailNow()
return
}
pathInput, err := locator.Nth(1)
if err != nil {
t.Errorf("Find address input fail: %v", err)
t.FailNow()
return
}
err = pathInput.Fill(workspacePath)
if err != nil {
t.Errorf("Fil address input fail: %v", err)
t.FailNow()
return
}
locator, err = workspacePage.Locator("#workspaceFormModal select")
if err != nil {
t.Errorf("Find create workspace select fail: %v", err)
t.FailNow()
return
}
typeInput, err := locator.Nth(0)
if err != nil {
t.Errorf("Find name input fail: %v", err)
t.FailNow()
return
}
_, err = typeInput.SelectOption(playwright.SelectOptionValues{Values: &[]string{"ztf"}})
if err != nil {
t.Errorf("Fil name input fail: %v", err)
t.FailNow()
return
}
langInput, err := locator.Nth(1)
if err != nil {
t.Errorf("Find lang input fail: %v", err)
t.FailNow()
return
}
_, err = langInput.SelectOption(playwright.SelectOptionValues{Values: &[]string{"php"}})
if err != nil {
t.Errorf("Fil lang input fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click("#workspaceFormModal>>.modal-action>>span:has-text(\"确定\")")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
return
}
var waitTimeOut float64 = 5000
_, err = workspacePage.WaitForSelector(".tree-node", playwright.PageWaitForSelectorOptions{Timeout: &waitTimeOut})
if err != nil {
t.Errorf("Wait created workspace result fail: %v", err)
t.FailNow()
return
}
workspacePage.WaitForTimeout(1000)
locator, err = workspacePage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find created workspace fail: %v", err)
t.FailNow()
return
}
}
func SyncFromZentao(t provider.T) {
t.ID("5751")
t.AddParentSuite("管理禅道站点下工作目录")
var waitTimeOut float64 = 5000
_, err = workspacePage.WaitForSelector(".tree-node", playwright.PageWaitForSelectorOptions{Timeout: &waitTimeOut})
if err != nil {
CreateWorkspace(t)
SyncFromZentao(t)
return
}
locator, err := workspacePage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
CreateWorkspace(t)
SyncFromZentao(t)
return
}
locator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click node fail: %v", err)
t.FailNow()
return
}
workspacePage.Click(".tree-context-menu>>text=从禅道同步")
if err != nil {
t.Errorf("Click sync from zentao fail: %v", err)
t.FailNow()
return
}
_, err = workspacePage.WaitForSelector("#syncFromZentaoFormModal .z-tbody-checkbox")
if err != nil {
t.Errorf("Wait syncFromZentaoFormModal fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click("#syncFromZentaoFormModal>>.modal-action>>span:has-text(\"确定\")")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
return
}
_, err = workspacePage.WaitForSelector("#syncFromZentaoFormModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateHidden})
if err != nil {
t.Errorf("Wait syncFromZentaoFormModal hide fail: %v", err)
t.FailNow()
return
}
locator, err = workspacePage.Locator(".toast-notification-container", playwright.PageLocatorOptions{HasText: "成功从禅道同步"})
c, err = locator.Count()
if err != nil || c == 0 {
t.Errorf("Sync from zentao fail: %v", err)
t.FailNow()
return
}
}
func SyncTwoCaseFromZentao(t provider.T) {
t.ID("5752")
t.AddParentSuite("管理禅道站点下工作目录")
var waitTimeOut float64 = 5000
_, err = workspacePage.WaitForSelector(".tree-node", playwright.PageWaitForSelectorOptions{Timeout: &waitTimeOut})
if err != nil {
CreateWorkspace(t)
SyncFromZentao(t)
return
}
locator, err := workspacePage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
return
}
locator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click node fail: %v", err)
t.FailNow()
return
}
workspacePage.Click(".tree-context-menu>>text=从禅道同步")
if err != nil {
t.Errorf("Click sync from zentao fail: %v", err)
t.FailNow()
return
}
_, err = workspacePage.WaitForSelector("#syncFromZentaoFormModal .z-tbody-checkbox")
if err != nil {
t.Errorf("Wait syncFromZentaoFormModal fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click("text=编号标题类型状态结果 >> input[type=\"checkbox\"]")
workspacePage.Click("text=1check string matches pattern功能测试正常 >> input[type=\"checkbox\"]")
workspacePage.Click("text=2extract content from webpage功能测试 >> input[type=\"checkbox\"]")
err = workspacePage.Click("#syncFromZentaoFormModal>>.modal-action>>span:has-text(\"确定\")")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
return
}
_, err = workspacePage.WaitForSelector("#syncFromZentaoFormModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateHidden})
if err != nil {
t.Errorf("Wait syncFromZentaoFormModal hide fail: %v", err)
t.FailNow()
return
}
locator, err = workspacePage.Locator(".toast-notification-container", playwright.PageLocatorOptions{HasText: "成功从禅道同步2个用例"})
c, err = locator.Count()
if err != nil || c == 0 {
t.Errorf("Sync from zentao fail: %v", err)
t.FailNow()
return
}
}
func SyncToZentao(t provider.T) {
t.ID("5431")
t.AddParentSuite("管理禅道站点下工作目录")
var waitTimeOut float64 = 5000
_, err = workspacePage.WaitForSelector(".tree-node", playwright.PageWaitForSelectorOptions{Timeout: &waitTimeOut})
if err != nil {
CreateWorkspace(t)
SyncFromZentao(t)
return
}
locator, err := workspacePage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
return
}
err = locator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click node fail: %v", err)
t.FailNow()
return
}
workspacePage.Click(".tree-context-menu>>text=同步到禅道")
if err != nil {
t.Errorf("Click sync to zentao fail: %v", err)
t.FailNow()
return
}
_, err = workspacePage.WaitForSelector(".toast-notification-close")
if err != nil {
t.Errorf("Wait toast-notification-close fail: %v", err)
t.FailNow()
return
}
locator, err = workspacePage.Locator(".toast-notification-container", playwright.PageLocatorOptions{HasText: "成功同步"})
c, err = locator.Count()
if err != nil || c == 0 {
t.Errorf("Sync to zentao fail: %v", err)
t.FailNow()
return
}
}
func Copy(t provider.T) {
t.ID("5474")
t.AddParentSuite("管理禅道站点下工作目录")
ztfTestHelper.SelectSite(workspacePage)
ztfTestHelper.ExpandProduct(workspacePage)
scriptLocator, err := workspacePage.Locator(".tree-node:has-text('单元测试工作目录')>>.tree-node-title>>text=1_string_match.php")
if err != nil {
t.Errorf("Find 1_string_match.php fail: %v", err)
t.FailNow()
return
}
err = scriptLocator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click script fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".tree-context-menu>>text=复制")
if err != nil {
t.Errorf("Click copy fail: %v", err)
t.FailNow()
return
}
productLocator, err := workspacePage.Locator(".tree-node:has-text('单元测试工作目录')>>.tree-node-item:has-text('product1')")
err = productLocator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click workspace fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".tree-context-menu>>text=粘贴")
if err != nil {
t.Errorf("Click parse fail: %v", err)
t.FailNow()
return
}
workspacePage.WaitForTimeout(1000)
scriptLocator, err = workspacePage.Locator(".tree-node:has-text('单元测试工作目录')>>.tree-node-title>>text=1_string_match.php")
c, err := scriptLocator.Count()
if err != nil || c < 2 {
t.Errorf("Find 1_string_match fail: %v", err)
t.FailNow()
return
}
}
func DeleteScript(t provider.T) {
t.ID("5478")
t.AddParentSuite("管理禅道站点下工作目录")
locator, err := workspacePage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
return
}
scriptLocator, err := workspacePage.Locator(".tree-node-title>>text=1.php")
if err != nil {
t.Errorf("Find 1.php fail: %v", err)
t.FailNow()
return
}
err = scriptLocator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click script fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".tree-context-menu>>text=删除")
if err != nil {
t.Errorf("Click delete fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".modal-action>>span:has-text(\"确定\")")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
return
}
workspacePage.WaitForTimeout(1000)
scriptLocator, err = workspacePage.Locator(".tree-node-item>>div:has-text('1.php')")
c, err = scriptLocator.Count()
if err != nil || c > 0 {
t.Errorf("Delete script fail: %v", err)
t.FailNow()
return
}
}
func DeleteDir(t provider.T) {
t.ID("5477")
t.AddParentSuite("管理禅道站点下工作目录")
_, err = workspacePage.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
return
}
ztfTestHelper.ExpandWorspace(workspacePage)
productLocator, err := workspacePage.Locator(".tree-node:has-text('单元测试工作目录')>>.tree-node-item:has-text('product1')")
if err != nil {
t.Errorf("Find product1 fail: %v", err)
t.FailNow()
return
}
err = productLocator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click script fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".tree-context-menu>>text=删除")
if err != nil {
t.Errorf("Click delete fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".modal-action>>span:has-text(\"确定\")")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
return
}
workspacePage.WaitForTimeout(1000)
scriptLocator, err := workspacePage.Locator(".tree-node:has-text('单元测试工作目录')>>.tree-node-item:has-text('product1')")
c, err := scriptLocator.Count()
if err != nil || c > 0 {
t.Errorf("Delete workspace fail: %v", err)
t.FailNow()
return
}
}
func DeleteWorkspace(t provider.T) {
t.ID("5468")
t.AddParentSuite("管理禅道站点下工作目录")
_, err = workspacePage.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
return
}
locator, err := workspacePage.Locator(".tree-node-item", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
return
}
err = locator.Hover()
if err != nil {
t.Errorf("The hover workspace fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(`[title="删除"]`)
if err != nil {
t.Errorf("The click delete fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".modal-action>>span:has-text(\"确定\")")
if err != nil {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
return
}
workspacePage.WaitForTimeout(1000)
scriptLocator, err := workspacePage.Locator(".tree-node-title:has-text('单元测试工作目录')")
c, err = scriptLocator.Count()
if err != nil || c > 0 {
t.Errorf("Delete workspace fail: %v", err)
t.FailNow()
return
}
}
func Clip(t provider.T) {
t.ID("5476")
t.AddParentSuite("管理禅道站点下工作目录")
_, err = workspacePage.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
return
}
locator, err := workspacePage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
return
}
err = locator.Click()
if err != nil {
t.Errorf("Click node fail: %v", err)
t.FailNow()
return
}
ztfTestHelper.ExpandProduct(workspacePage)
scriptLocator, err := locator.Locator(".tree-node-title>>text=1.php")
if err != nil {
t.Errorf("Find 1.php fail: %v", err)
t.FailNow()
return
}
err = scriptLocator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click script fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".tree-context-menu>>text=剪切")
if err != nil {
t.Errorf("Click copy fail: %v", err)
t.FailNow()
return
}
workspaceLocator, err := workspacePage.Locator(".tree-node-title", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
if err != nil {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
return
}
err = workspaceLocator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
t.Errorf("Right click workspace fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".tree-context-menu>>text=粘贴")
if err != nil {
t.Errorf("Click parse fail: %v", err)
t.FailNow()
return
}
workspacePage.WaitForTimeout(1000)
scriptLocator, err = locator.Locator(".tree-node-item>>div:has-text('1.php')")
c, err = scriptLocator.Count()
if err != nil || c < 1 {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
return
}
}
func Collapse(t provider.T) {
t.ID("5472")
t.AddParentSuite("管理禅道站点下工作目录")
locator, err := workspacePage.Locator("#siteMenuToggle")
if err != nil {
t.Errorf("The siteMenuToggle is missing: %v", err)
t.FailNow()
return
}
err = locator.Click()
if err != nil {
t.Errorf("The Click is fail: %v", err)
t.FailNow()
return
}
_, err = workspacePage.WaitForSelector("#navbar .list-item")
if err != nil {
t.Errorf("Wait for workspace list nav fail: %v", err)
t.FailNow()
return
}
err = workspacePage.Click(".list-item-title>>text=单元测试站点")
if err != nil {
t.Errorf("The Click workspace nav fail: %v", err)
t.FailNow()
return
}
className, err := workspacePage.GetAttribute(".tree-node-title:has-text(\"单元测试工作目录\")", "class")
if err != nil {
t.Errorf("Find workspace fail: %v", err)
t.FailNow()
return
}
if strings.Contains(className, "collapsed") {
err = workspacePage.Click(`#leftPane>>.toolbar>>[title="展开"]`)
} else {
err = workspacePage.Click(`#leftPane>>.toolbar>>[title="折叠"]`)
}
if err != nil {
t.Errorf("Click expand workspace btn fail: %v", err)
t.FailNow()
return
}
workspacePage.WaitForTimeout(1000)
locator, _ = workspacePage.Locator("#leftPane>>.tree-node-item>>text=1_string_match.php")
count, _ := locator.Count()
if strings.Contains(className, "collapsed") && count == 0 {
t.Error("Expand workspace fail")
t.FailNow()
return
} else if !strings.Contains(className, "collapsed") && count > 0 {
}
if strings.Contains(className, "collapsed") {
err = workspacePage.Click(`#leftPane>>.toolbar>>[title="折叠"]`)
} else {
err = workspacePage.Click(`#leftPane>>.toolbar>>[title="展开"]`)
}
if err != nil {
t.Errorf("Click Collapse workspace btn fail: %v", err)
t.FailNow()
return
}
workspacePage.WaitForTimeout(100)
locator, _ = workspacePage.Locator("#leftPane>>.tree-node-item>>text=1_string_match.php")
count, _ = locator.Count()
if strings.Contains(className, "collapsed") && count == 0 {
t.Error("Expand workspace fail")
t.FailNow()
return
} else if !strings.Contains(className, "collapsed") && count > 0 {
}
}
func TestUiWorkspace(t *testing.T) {
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
return
}
headless := false
var slowMo float64 = 100
workspaceBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web workspaceBrowser: %v", err)
t.FailNow()
return
}
workspacePage, err = workspaceBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
return
}
if _, err = workspacePage.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
return
}
ztfTestHelper.SelectSite(workspacePage)
runner.Run(t, "客户端-同步到禅道", SyncToZentao)
runner.Run(t, "客户端-从禅道同步选中用例", SyncTwoCaseFromZentao)
runner.Run(t, "客户端-从禅道同步", SyncFromZentao)
runner.Run(t, "客户端-复制粘贴树状脚本文件", Copy)
runner.Run(t, "客户端-剪切粘贴树状脚本文件", Clip)
runner.Run(t, "客户端-删除树状脚本文件", DeleteScript)
runner.Run(t, "客户端-删除树状脚本文件夹", DeleteDir)
runner.Run(t, "客户端-显示展开折叠脚本树状结构", Collapse)
runner.Run(t, "客户端-删除禅道工作目录", DeleteWorkspace)
runner.Run(t, "客户端-创建禅道工作目录", CreateWorkspace)
if err = workspaceBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.FailNow()
return
}
if err = pw.Stop(); err != nil {
t.Errorf("The playwright cannot be stopped: %v", err)
t.FailNow()
return
}
}
package main
import (
"testing"
ztfTestHelper "github.com/easysoft/zentaoatf/test/helper/ztf"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
func ScriptBug(t provider.T) {
t.ID("5747")
t.AddParentSuite("查看bug列表")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
ztfTestHelper.SelectSite(webpage)
ztfTestHelper.ExpandWorspace(webpage)
ztfTestHelper.RunScript(webpage, "1_string_match.php")
ztfTestHelper.SubmitResult(webpage)
locator := webpage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator.Click()
scriptLocator := webpage.Locator(".tree-node-title:has-text('1_string_match.php')")
scriptLocator.Click()
webpage.WaitForTimeout(200)
webpage.Click(".statistic>>span>>nth=3")
elements := webpage.QuerySelectorAll("#bugsModal>>tr")
bugTimesInt := len(elements.ElementHandles)
if bugTimesInt < 2 {
t.Error("statistic error")
t.FailNow()
}
}
func ScriptsBug(t provider.T) {
t.ID("5748")
t.AddParentSuite("查看bug列表")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.WaitForSelector("#mainContent .tree")
locator := webpage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator.Click()
webpage.Click(`[title="批量选择"]`)
webpage.Click(".tree-node-item:has-text('1_string_match.php')>>.tree-node-check")
webpage.Click(".tree-node-item:has-text('2_webpage_extract.php')>>.tree-node-check")
webpage.Click(`[title="禅道BUG"]`)
elements := webpage.QuerySelectorAll("#bugsModal>>tr")
bugTimesInt := len(elements.ElementHandles)
if bugTimesInt < 2 {
t.Error("statistic error")
t.FailNow()
}
}
func TestUiBug(t *testing.T) {
runner.Run(t, "客户端-查看单个脚本bug列表", ScriptBug)
runner.Run(t, "客户端-查看选中脚本bug列表", ScriptsBug)
}
package main
import (
"testing"
plwConf "github.com/easysoft/zentaoatf/test/ui/conf"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
func CreateInterpreter(t provider.T) {
t.ID("5744")
t.AddParentSuite("管理解析器")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.Click("#navbar>>[title=\"设置\"]")
webpage.Click("#proxyTable>>tr:has-text('本地节点')>>button:has-text('运行环境')")
webpage.Click("text=新建运行环境")
locator := webpage.Locator("#interpreterFormModal select")
locator.Click()
locator.SelectNth(0, playwright.SelectOptionValues{Values: &[]string{"python"}})
webpage.WaitForTimeout(200)
locator.SelectNth(1, playwright.SelectOptionValues{Indexes: &[]int{1}})
webpage.Click("#interpreterFormModal>>text=确定")
_ = webpage.Locator("#settingModal .z-tbody-td", playwright.PageLocatorOptions{HasText: "Python"})
}
func EditInterpreter(t provider.T) {
t.ID("5745")
t.AddParentSuite("管理解析器")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.Click("#navbar>>[title=\"设置\"]")
webpage.Click("#proxyTable>>tr:has-text('本地节点')>>button:has-text('运行环境')")
locator := webpage.Locator("#settingModal .z-tbody-tr:has-text('Python')>>text=编辑")
locator.Click()
locator = webpage.Locator("#interpreterFormModal select")
locator.SelectNth(0, playwright.SelectOptionValues{Values: &[]string{"python"}})
webpage.WaitForTimeout(200)
locator.SelectNth(1, playwright.SelectOptionValues{Indexes: &[]int{1}})
webpage.Click("#interpreterFormModal>>text=确定")
locator = webpage.Locator("#settingModal .z-tbody-td", playwright.PageLocatorOptions{HasText: "Python"})
}
func DeleteInterpreter(t provider.T) {
t.ID("5465")
t.AddParentSuite("管理解析器")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.Click("#navbar>>[title=\"设置\"]")
webpage.Click("#proxyTable>>tr:has-text('本地节点')>>button:has-text('运行环境')")
locator := webpage.Locator("#settingModal .z-tbody-tr", playwright.PageLocatorOptions{HasText: "Python"})
locator = locator.Locator("text=删除")
locator.Click()
webpage.Click(":nth-match(.modal-action > button, 1)")
webpage.WaitForTimeout(1000)
plwConf.DisableErr()
locator = webpage.Locator("#settingModal .z-tbody-tr", playwright.PageLocatorOptions{HasText: "Python"})
c := locator.Count()
if c > 0 {
t.Errorf("Delete interpreter fail")
t.FailNow()
}
plwConf.EnableErr()
}
func TestUiInterpreter(t *testing.T) {
runner.Run(t, "客户端-创建语言解析器", CreateInterpreter)
runner.Run(t, "客户端-编辑语言解析器", EditInterpreter)
runner.Run(t, "客户端-删除语言解析器", DeleteInterpreter)
}
package main
import (
"testing"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
)
func SwitchLanguage(t provider.T) {
t.ID("5464")
t.AddParentSuite("设置界面语言")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.Click("#navbar>>[title=\"设置\"]")
webpage.Click(`input[type="radio"]>>nth=1`)
locator := webpage.Locator(".t-card-toolbar div>>nth=2")
interpreterTitle := locator.InnerText()
if interpreterTitle != "Remote Server" {
t.Error("Switch language fail, find interpreter fail")
t.FailNow()
}
locator = webpage.Locator(".t-card-toolbar button")
CreateInterpreterTitle := locator.InnerText()
if CreateInterpreterTitle != "Create Remote Server" {
t.Error("Switch language fail, find create remote server btn fail")
t.FailNow()
}
locator = webpage.Locator("#settingModal .modal-title")
modalTitle := locator.InnerText()
if modalTitle != "Settings" {
t.Error("Switch language fail, find modalTitle fail")
t.FailNow()
}
webpage.Click(`input[type="radio"]>>nth=0`)
}
func TestUiLanguage(t *testing.T) {
runner.Run(t, "设置界面语言", SwitchLanguage)
}
package main
import (
"testing"
plwConf "github.com/easysoft/zentaoatf/test/ui/conf"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
func CollapseLog(t provider.T) {
t.ID("5502")
t.AddParentSuite("脚本执行日志")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.WaitForSelector(".tree-node")
locator := webpage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator.Click()
scriptLocator := locator.Locator("text=1_string_match.php")
scriptLocator.Click()
webpage.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
webpage.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
webpage.Click(".btn[title=\"展开所有\"]")
locator = webpage.Locator("#log-list>>.show-detail>>:has-text('[Expect]')")
webpage.WaitForTimeout(100)
webpage.Click(".btn[title=\"折叠所有\"]")
plwConf.DisableErr()
defer plwConf.EnableErr()
locator = webpage.Locator("#log-list>>.show-detail>>:has-text('[Expect]')")
count := locator.Count()
if count > 0 {
t.Error("Find Collapsed log fail")
t.FailNow()
}
}
func FullScreenLog(t provider.T) {
t.ID("5749")
t.AddParentSuite("脚本执行日志")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.WaitForSelector(".tree-node")
locator := webpage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator.Click()
scriptLocator := locator.Locator("text=1_string_match.php")
scriptLocator.Click()
webpage.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
webpage.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
webpage.Click(".btn[title=\"向上展开\"]")
webpage.WaitForTimeout(100)
isHidden := webpage.IsHidden("#tabsPane")
if !isHidden {
t.Errorf("Check Full Screen fail")
t.FailNow()
}
}
func TestUiLog(t *testing.T) {
runner.Run(t, "客户端-展开折叠执行日志", CollapseLog)
runner.Run(t, "客户端-最大化脚本执行日志", FullScreenLog)
}
package main
import (
"testing"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
)
func SwitchProduct(t provider.T) {
t.ID("5496")
t.AddParentSuite("切换禅道产品")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.WaitForSelector(".tree-node")
locator := webpage.Locator("#siteMenuToggle")
locator.Click()
webpage.WaitForSelector("#navbar .list-item")
webpage.Click(".list-item-title>>text=单元测试站点")
webpage.Click("#productMenuToggle")
webpage.WaitForSelector("#navbar .list-item")
webpage.Click("#navbar .list-item>>text=企业内部工时管理系统")
webpage.WaitForTimeout(100)
productName := webpage.InnerText("#productMenuToggle>>span")
if productName != "企业内部工时管理系统" {
t.Error("Switch product fail")
t.FailNow()
}
webpage.Click("#productMenuToggle")
webpage.WaitForSelector("#navbar .list-item")
webpage.Click("#navbar .list-item>>text=公司企业网站建设")
}
func TestUiProduct(t *testing.T) {
runner.Run(t, "客户端-切换禅道产品", SwitchProduct)
}
package main
import (
"strings"
"testing"
ztfTest "github.com/easysoft/zentaoatf/test/helper/ztf"
ztfTestHelper "github.com/easysoft/zentaoatf/test/helper/ztf"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
func Detail(t provider.T) {
t.ID("5489")
t.AddParentSuite("测试结果")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
ztfTest.SelectSite(webpage)
ztfTest.ExpandWorspace(webpage)
ztfTest.RunScript(webpage, "1_string_match.php")
webpage.Click("#rightPane .result-list-item .list-item-title>>nth=0")
webpage.WaitForSelector(".result-action .btn:has-text('提交结果到禅道')")
locator := webpage.Locator(".page-result .single small")
result := locator.InnerText()
if result != "通过 0.00%" {
t.Error("Detail result error")
t.FailNow()
}
locator = webpage.Locator(".result-step-checkpoint code")
expectVal := locator.InnerText()
if strings.TrimSpace(expectVal) != "~c:!=2~" {
t.Error("Detail expect error")
t.FailNow()
}
locator = webpage.Locator(".result-step-checkpoint code>>nth=1")
actualVal := locator.InnerText()
if strings.TrimSpace(actualVal) != "2" {
t.Error("Detail actual error")
t.FailNow()
}
}
func SubmitResult(t provider.T) {
t.ID("5499")
t.AddParentSuite("测试结果")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
ztfTestHelper.SelectSite(webpage)
webpage.Click("#rightPane .result-list-item .list-item-title>>nth=0")
webpage.Click(".result-action .btn:has-text('提交结果到禅道')")
webpage.WaitForSelector("#syncToZentaoModal")
titleInput := webpage.Locator("#syncToZentaoModal>>.form-item:has-text('或输入新测试单标题')>>input")
titleInput.Fill("单元测试测试单")
webpage.Click("#syncToZentaoModal>>text=确定")
webpage.WaitForSelectorByOptions("#syncToZentaoModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateHidden})
webpage.Locator(".toast-notification-container:has-text('提交成功')")
}
func SubmitBug(t provider.T) {
t.ID("5500")
t.AddParentSuite("测试结果")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
ztfTestHelper.SelectSite(webpage)
webpage.Click("#rightPane .result-list-item .list-item-title>>nth=0")
webpage.Click(".page-result .btn:has-text('提交缺陷到禅道')")
webpage.WaitForSelector("#submitBugModal")
webpage.Click("#submitBugModal>>text=确定")
webpage.WaitForSelectorByOptions("#submitBugModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateHidden})
webpage.Locator(".toast-notification-container", playwright.PageLocatorOptions{HasText: "提交成功"})
}
func SubmitBugTwoStep(t provider.T) {
t.ID("5500")
t.AddParentSuite("测试结果")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
ztfTestHelper.SelectSite(webpage)
ztfTestHelper.ExpandWorspace(webpage)
ztfTest.RunScript(webpage, "1_string_match.php")
webpage.Click("#rightPane .result-list-item .list-item-title>>nth=0")
webpage.Click(".page-result .btn:has-text('提交缺陷到禅道')")
webpage.WaitForSelector("#submitBugModal")
webpage.Click("#cbox0")
webpage.Click("#submitBugModal>>text=确定")
webpage.WaitForSelectorByOptions("#submitBugModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateHidden})
webpage.Locator(".toast-notification-container", playwright.PageLocatorOptions{HasText: "提交成功"})
}
func TestUiResult(t *testing.T) {
runner.Run(t, "客户端-查看测试结果详情", Detail)
runner.Run(t, "客户端-提交禅道用例脚本测试结果", SubmitResult)
runner.Run(t, "客户端-提交禅道失败用例为缺陷", SubmitBug)
runner.Run(t, "客户端-提交禅道部分失败用例为缺陷", SubmitBugTwoStep)
}
package main
import (
"strings"
"testing"
ztfTestHelper "github.com/easysoft/zentaoatf/test/helper/ztf"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
)
func RunReExecFailCase(t provider.T) {
t.ID("5491")
t.AddParentSuite("测试结果页面执行脚本")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
locator := webpage.Locator("#siteMenuToggle")
locator.Click()
webpage.WaitForSelector("#navbar .list-item")
webpage.Click(".list-item-title>>text=单元测试站点")
webpage.Click("#rightPane .result-list-item .list-item-title>>nth=0")
webpage.Click(".result-action .btn:has-text('重新执行失败用例')")
webpage.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
locator = webpage.Locator("#log-list>>code:has-text('执行1个用例,耗时')")
innerText := locator.InnerText()
if !strings.Contains(innerText, "0(0.0%) 通过,1(100.0%) 失败") {
t.Errorf("Exec failed case fail")
t.FailNow()
}
resultTitle := webpage.InnerText("#rightPane .result-list-item .list-item-title")
if resultTitle != "1_string_match.php" {
t.Errorf("Find result in rightPane fail")
t.FailNow()
}
timeElement := locator.Locator(".time>>span")
if resultTitle != "1_string_match.php" {
t.Errorf("Find log time element in logPane fail")
t.FailNow()
}
logTime := timeElement.InnerText()
resultTime := webpage.InnerText("#rightPane .result-list-item .list-item-trailing-text")
if logTime[:5] != resultTime {
t.Errorf("Find result in rightPane fail")
t.FailNow()
}
}
func RunReExecAllCase(t provider.T) {
t.ID("5750")
t.AddParentSuite("测试结果页面执行脚本")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
locator := webpage.Locator("#siteMenuToggle")
locator.Click()
webpage.WaitForSelector("#navbar .list-item")
webpage.Click(".list-item-title>>text=单元测试站点")
ztfTestHelper.RunScript(webpage, "1_string_match.php")
webpage.Click("#rightPane .result-list-item .list-item-title>>nth=0")
webpage.Click(".result-action .btn:has-text('重新执行所有用例')")
webpage.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
locator = webpage.Locator("#log-list>>code:has-text('执行1个用例,耗时')")
innerText := locator.InnerText()
if !strings.Contains(innerText, "0(0.0%) 通过,1(100.0%) 失败") {
t.Errorf("Exec failed case fail")
t.FailNow()
}
resultTitle := webpage.InnerText("#rightPane .result-list-item .list-item-title")
if resultTitle != "1_string_match.php" {
t.Errorf("Find result in rightPane fail")
t.FailNow()
}
timeElement := locator.Locator(".time>>span")
logTime := timeElement.InnerText()
resultTime := webpage.InnerText("#rightPane .result-list-item .list-item-trailing-text")
if logTime[:5] != resultTime {
t.Errorf("Find result in rightPane fail")
t.FailNow()
}
}
func TestUiRunFromResult(t *testing.T) {
runner.Run(t, "客户端-结果中重新执行所有脚本", RunReExecAllCase)
runner.Run(t, "客户端-结果中重新执行失败脚本", RunReExecFailCase)
}
package main
import (
"strconv"
"testing"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
func RunFailStatistic(t provider.T) {
t.ID("5487")
t.AddParentSuite("执行脚本")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.WaitForSelector(".tree-node")
locator := webpage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator.Click()
scriptLocator := locator.Locator("text=1_string_match.php")
scriptLocator.Click()
elements := webpage.QuerySelectorAll(".statistic>>span")
runTimes := elements.InnerText(0)
failTimes := elements.InnerText(2)
runTimesInt, _ := strconv.Atoi(runTimes)
failTimesInt, _ := strconv.Atoi(failTimes)
webpage.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
webpage.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
webpage.WaitForTimeout(200)
elements = webpage.QuerySelectorAll(".statistic>>span")
runTimes2 := elements.InnerText(0)
failTimes2 := elements.InnerText(2)
runTimes2Int, _ := strconv.Atoi(runTimes2)
failTimes2Int, _ := strconv.Atoi(failTimes2)
if runTimes2Int-runTimesInt != 1 || failTimes2Int-failTimesInt != 1 {
t.Error("statistic error")
t.FailNow()
}
}
func RunSuccessStatistic(t provider.T) {
t.ID("5487")
t.AddParentSuite("执行脚本")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.WaitForSelector(".tree-node")
locator := webpage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator.Click()
scriptLocator := locator.Locator("text=3_http_interface_call.php")
scriptLocator.Click()
elements := webpage.QuerySelectorAll(".statistic>>span")
runTimes := elements.InnerText(0)
succTimes := elements.InnerText(1)
runTimesInt, _ := strconv.Atoi(runTimes)
succTimesInt, _ := strconv.Atoi(succTimes)
webpage.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
webpage.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
webpage.WaitForTimeout(200)
elements = webpage.QuerySelectorAll(".statistic>>span")
runTimes2 := elements.InnerText(0)
succTimes2 := elements.InnerText(1)
runTimes2Int, _ := strconv.Atoi(runTimes2)
succTimes2Int, _ := strconv.Atoi(succTimes2)
if runTimes2Int-runTimesInt != 1 || succTimes2Int-succTimesInt != 1 {
t.Error("statistic error")
t.FailNow()
}
}
func RunBugStatistic(t provider.T) {
t.ID("5487")
t.AddParentSuite("执行脚本")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
webpage.WaitForSelector(".tree-node")
locator := webpage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator.Click()
scriptLocator := locator.Locator("text=1_string_match.php")
scriptLocator.Click()
webpage.WaitForTimeout(200)
elements := webpage.QuerySelectorAll(".statistic>>span")
bugTimes := elements.InnerText(3)
bugTimesInt, _ := strconv.Atoi(bugTimes)
webpage.Click(".statistic>>span>>nth=3")
elements = webpage.QuerySelectorAll("#bugsModal>>tr")
bugTimes2Int := len(elements.ElementHandles)
if bugTimes2Int-1 != bugTimesInt {
t.Error("statistic error")
t.FailNow()
}
}
func TestUiRunStatistic(t *testing.T) {
runner.Run(t, "客户端-确认执行统计成功数据", RunSuccessStatistic)
runner.Run(t, "客户端-确认执行统计失败数据", RunFailStatistic)
runner.Run(t, "客户端-确认执行统计bug数据", RunBugStatistic)
}
package main
import (
"testing"
ztfTestHelper "github.com/easysoft/zentaoatf/test/helper/ztf"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
func SaveScript(t provider.T) {
t.ID("5470")
t.AddParentSuite("禅道站点脚本")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
ztfTestHelper.SelectSite(webpage)
ztfTestHelper.ExpandWorspace(webpage)
webpage.Click(".tree-node-title:has-text('1_string_match.php')")
locator := webpage.Locator(".view-line>>text=title=check string matches pattern")
var positionX, positionY float64 = 400, 0
force := true
locator.Click(playwright.PageClickOptions{Force: &force, Position: &playwright.PageClickOptionsPosition{X: &positionX, Y: &positionY}})
locator.Type("-test")
webpage.Click(".tabs-nav-toolbar>>[title=\"Save\"]")
webpage.WaitForSelector(".toast-notification-close")
locator = webpage.Locator(".toast-notification-container", playwright.PageLocatorOptions{HasText: "保存成功"})
locator.Click()
webpage.Click(".tree-node-title>>text=1_string_match.php")
locator = webpage.Locator(".view-line>>:has-text('title=check string matches pattern')")
locator.Click(playwright.PageClickOptions{Force: &force, Position: &playwright.PageClickOptionsPosition{X: &positionX, Y: &positionY}})
locator.Press("Backspace")
locator.Press("Backspace")
locator.Press("Backspace")
locator.Press("Backspace")
locator.Press("Backspace")
webpage.Click(".tabs-nav-toolbar>>[title=\"Save\"]")
}
func ViewScript(t provider.T) {
t.ID("5469")
t.AddParentSuite("禅道站点脚本")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
ztfTestHelper.SelectSite(webpage)
ztfTestHelper.ExpandWorspace(webpage)
scriptLocator := webpage.Locator(".tree-node-title:has-text('1_string_match.php')")
scriptLocator.Click()
webpage.Locator(".view-line>>text=title=check string matches pattern")
}
func TestUiScript(t *testing.T) {
runner.Run(t, "客户端-编辑保存禅道站点脚本", SaveScript)
runner.Run(t, "客户端-显示禅道站点脚本", ViewScript)
}
package main
import (
"testing"
plwConf "github.com/easysoft/zentaoatf/test/ui/conf"
plwHelper "github.com/easysoft/zentaoatf/test/ui/helper"
"github.com/ozontech/allure-go/pkg/framework/provider"
"github.com/ozontech/allure-go/pkg/framework/runner"
playwright "github.com/playwright-community/playwright-go"
)
func CreateSite(t provider.T) {
t.ID("5466")
t.AddParentSuite("配置禅道站点")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
locator := webpage.Locator("#siteMenuToggle")
locator.Click()
webpage.WaitForSelector("#navbar .list-item")
webpage.Click("text=禅道站点管理")
webpage.Click("text=新建站点")
locator = webpage.Locator("#siteFormModal input")
locator.FillNth(0, "单元测试站点")
locator.FillNth(1, "http://127.0.0.1:8081/")
locator.FillNth(2, "admin")
locator.FillNth(3, "Test123456.")
webpage.Click("text=确定")
webpage.WaitForSelector(".list-item-content span:has-text('单元测试站点')")
locator = webpage.Locator(".list-item-content span", playwright.PageLocatorOptions{HasText: "单元测试站点"})
}
func EditSite(t provider.T) {
t.ID("5466")
t.AddParentSuite("配置禅道站点")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
locator := webpage.Locator("#siteMenuToggle")
locator.Click()
webpage.WaitForSelector("#navbar .list-item")
webpage.Click("text=禅道站点管理")
plwConf.DisableErr()
locator = webpage.Locator(".list-item", playwright.PageLocatorOptions{HasText: "单元测试站点"})
c := locator.Count()
if c == 0 {
CreateSite(t)
EditSite(t)
plwConf.EnableErr()
return
}
plwConf.EnableErr()
locator = webpage.Locator(".list-item", playwright.PageLocatorOptions{HasText: "单元测试站点"})
webpage.Click("text=编辑")
locator = webpage.Locator("#siteFormModal input")
locator.FillNth(0, "单元测试站点-update")
locator.FillNth(1, "http://127.0.0.1:8081/")
locator.FillNth(2, "admin")
locator.FillNth(3, "Test123456.")
webpage.Click("#siteFormModal>>.modal-action>>span:has-text(\"确定\")")
webpage.WaitForSelector(".list-item-content span:has-text('单元测试站点-update')")
locator = webpage.Locator(".list-item-content span", playwright.PageLocatorOptions{HasText: "单元测试站点-update"})
}
func DeleteSite(t provider.T) {
t.ID("5466")
t.AddParentSuite("配置禅道站点")
webpage, _ := plwHelper.OpenUrl("http://127.0.0.1:8000/", t)
defer webpage.Close()
locator := webpage.Locator("#siteMenuToggle")
locator.Click()
webpage.WaitForSelector("#navbar .list-item")
webpage.Click("text=禅道站点管理")
locator = webpage.Locator(".list-item:has-text('单元测试站点')")
webpage.Click("text=删除")
webpage.WaitForTimeout(1000)
webpage.Click(":nth-match(.modal-action > button, 1)")
webpage.WaitForSelector(".list-item-content span:has-text('单元测试站点')", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached})
plwConf.DisableErr()
defer plwConf.EnableErr()
locator = webpage.Locator(".list-item-content:has-text('单元测试站点')")
c := locator.Count()
if c > 0 {
t.Errorf("Delete site fail")
t.FailNow()
}
}
func TestUiSite(t *testing.T) {
runner.Run(t, "客户端-编辑禅道站点", EditSite)
runner.Run(t, "客户端-删除禅道站点", DeleteSite)
runner.Run(t, "客户端-创建禅道站点", CreateSite)
}
文件已添加
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册