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

Fix issue

上级 982763ec
......@@ -61,3 +61,11 @@ func GetZtfPath() string {
}
return ztfPath
}
func GetZtfProductPath() string {
return fmt.Sprintf("%s%s%s%s%s%s%s%s", RootPath, "test", FilePthSep, "demo", FilePthSep, "php", FilePthSep, "product1")
}
func GetPhpWorkspacePath() string {
return fmt.Sprintf("%s%s%s%s%s%s%s", RootPath, "test", FilePthSep, "demo", FilePthSep, "php", FilePthSep)
}
......@@ -347,7 +347,7 @@ func InitZentaoData(version string, codeDir string) (err error) {
if err != nil {
return
}
headless := true
headless := false
var slowMo float64 = 100
runBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
......
package ztfTest
import (
"fmt"
"strings"
commonTestHelper "github.com/easysoft/zentaoatf/test/helper/common"
"github.com/playwright-community/playwright-go"
)
var expandTimes = 0
func createTestWorkspace(page playwright.Page) {
err := page.Click(`[title="新建工作目录"]`)
if err != nil {
return
}
_, err = page.WaitForSelector("#workspaceFormModal")
locator, err := page.Locator("#workspaceFormModal input")
if err != nil {
return
}
titleInput, err := locator.Nth(0)
if err != nil {
return
}
err = titleInput.Fill("单元测试工作目录")
if err != nil {
return
}
pathInput, err := locator.Nth(1)
if err != nil {
return
}
workspacePath := fmt.Sprintf("%stest%sdemo%sphp", commonTestHelper.RootPath, commonTestHelper.FilePthSep, commonTestHelper.FilePthSep)
err = pathInput.Fill(workspacePath)
if err != nil {
return
}
locator, err = page.Locator("#workspaceFormModal select")
if err != nil {
return
}
typeInput, err := locator.Nth(0)
if err != nil {
return
}
_, err = typeInput.SelectOption(playwright.SelectOptionValues{Values: &[]string{"ztf"}})
if err != nil {
return
}
langInput, err := locator.Nth(1)
if err != nil {
return
}
_, err = langInput.SelectOption(playwright.SelectOptionValues{Values: &[]string{"php"}})
if err != nil {
return
}
err = page.Click("#workspaceFormModal>>.modal-action>>span:has-text(\"确定\")")
if err != nil {
return
}
page.WaitForSelector("#workspaceFormModal", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached})
page.WaitForTimeout(1000)
locator, err = page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "testng工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
return
}
}
func RunScript(page playwright.Page, scriptName string) {
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
createTestWorkspace(page)
}
locator, err = page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err = locator.Count()
err = locator.Click()
if err != nil {
return
}
scriptLocator, err := locator.Locator("text=" + scriptName)
if err != nil {
return
}
err = scriptLocator.Click(playwright.PageClickOptions{Button: playwright.MouseButtonRight})
if err != nil {
return
}
err = page.Click(".tree-context-menu>>text=执行")
if err != nil {
return
}
_, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
if err != nil {
return
}
element, err := page.QuerySelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
innerText, err := element.InnerText()
if err != nil {
return
}
if !strings.Contains(innerText, "1(100.0%) 失败") {
return
}
resultTitleElement, err := page.QuerySelector("#rightPane .result-list-item .list-item-title")
if err != nil {
return
}
resultTitle, err := resultTitleElement.InnerText()
if err != nil || resultTitle != scriptName {
return
}
timeElement, err := page.QuerySelector("#log-list .item .time")
if err != nil {
return
}
logTime, err := timeElement.InnerText()
if err != nil {
return
}
resultTimeElement, err := page.QuerySelector("#rightPane .result-list-item .list-item-trailing-text")
if err != nil {
return
}
resultTime, err := resultTimeElement.InnerText()
if err != nil || logTime[:5] != resultTime {
return
}
}
func SelectSite(page playwright.Page) (err error) {
locator, err := page.Locator("#siteMenuToggle")
if err != nil {
return
}
err = locator.Click()
if err != nil {
return
}
_, err = page.WaitForSelector("#navbar .list-item")
if err != nil {
return
}
err = page.Click(".list-item-title>>text=单元测试站点")
if err != nil {
return
}
var waitTimeOut float64 = 5000
_, err = page.WaitForSelector("#siteMenuToggle:has-text('单元测试站点')", playwright.PageWaitForSelectorOptions{Timeout: &waitTimeOut})
if err != nil {
return
}
return nil
}
func ExpandWorspace(page playwright.Page) (err error) {
var waitTimeOut float64 = 5000
_, err = page.WaitForSelector(".tree-node:has-text('单元测试工作目录')", playwright.PageWaitForSelectorOptions{Timeout: &waitTimeOut})
if err != nil {
createTestWorkspace(page)
}
selector, _ := page.QuerySelector(".tree-node:has-text('单元测试工作目录')")
className, _ := selector.GetAttribute("class")
if !strings.Contains(className, "collapsed") {
return
}
err = page.Click(".tree-node-title:has-text(\"单元测试工作目录\")")
if err != nil {
return
}
_, err = page.WaitForSelector(".tree-node-item>>div:has-text('1_string_match.php')", playwright.PageWaitForSelectorOptions{Timeout: &waitTimeOut})
if err != nil {
if expandTimes > 5 {
expandTimes = 0
return err
}
expandTimes++
ExpandWorspace(page)
return
}
return nil
}
func ExpandProduct(page playwright.Page) (err error) {
ExpandWorspace(page)
var waitTimeOut float64 = 5000
_, err = page.WaitForSelector(".tree-node-item:has-text('product1')", playwright.PageWaitForSelectorOptions{Timeout: &waitTimeOut})
if err != nil {
return
}
selector, err := page.QuerySelector(".tree-node-root .tree-node:has-text('product1')")
className, err := selector.GetAttribute("class")
if !strings.Contains(className, "collapsed") {
return
}
page.Click(".tree-node-item:has-text('product1')")
page.WaitForTimeout(100)
selector, err = page.QuerySelector(".tree-node-root .tree-node:has-text('product1')")
className, err = selector.GetAttribute("class")
if strings.Contains(className, "collapsed") {
if expandTimes > 5 {
expandTimes = 0
return err
}
expandTimes++
ExpandProduct(page)
return
}
return nil
}
func DeleteWorkspace(page playwright.Page, workspaceName string) {
locator, err := page.Locator(".tree-node-item", playwright.PageLocatorOptions{HasText: workspaceName})
c, err := locator.Count()
if err != nil || c == 0 {
return
}
err = locator.Hover()
if err != nil {
return
}
err = page.Click(`[title="删除"]`)
if err != nil {
return
}
err = page.Click(".modal-action>>span:has-text(\"确定\")")
if err != nil {
return
}
page.WaitForTimeout(1000)
}
......@@ -8,6 +8,8 @@ import (
commConsts "github.com/easysoft/zentaoatf/internal/pkg/consts"
serverConfig "github.com/easysoft/zentaoatf/internal/server/config"
commonTestHelper "github.com/easysoft/zentaoatf/test/helper/common"
ztfTest "github.com/easysoft/zentaoatf/test/helper/ztf"
"github.com/playwright-community/playwright-go"
)
func main() {
......@@ -39,3 +41,32 @@ func main() {
}
commonTestHelper.TestUi()
}
func init() {
pw, err := playwright.Run()
if err != nil {
return
}
headless := true
var slowMo float64 = 100
browser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
return
}
page, err := browser.NewPage()
if err != nil {
return
}
if _, err = page.Goto("http://127.0.0.1:8000/", playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil {
return
}
ztfTest.SelectSite(page)
ztfTest.ExpandWorspace(page)
if err = browser.Close(); err != nil {
return
}
if err = pw.Stop(); err != nil {
return
}
}
......@@ -47,12 +47,38 @@ func ScriptBug(t provider.T) {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
locator, err := page.Locator("#siteMenuToggle")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.Errorf("The siteMenuToggle is missing: %v", err)
t.FailNow()
return
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
err = locator.Click()
if err != nil {
t.Errorf("The Click is fail: %v", err)
t.FailNow()
return
}
_, err = page.WaitForSelector("#mainContent .tree")
if err != nil {
t.Errorf("Wait for workspace list nav fail: %v", err)
t.FailNow()
return
}
err = page.Click(".list-item-title>>text=单元测试站点")
if err != nil {
t.Errorf("The Click workspace nav fail: %v", err)
t.FailNow()
return
}
_, err = page.WaitForSelector("#mainContent .tree:has-text('单元测试工作目录')")
if err != nil {
t.Errorf("Wait for workspace list fail: %v", err)
t.FailNow()
return
}
page.WaitForTimeout(100)
locator, err = page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
......@@ -63,7 +89,7 @@ func ScriptBug(t provider.T) {
t.Errorf("Click node fail: %v", err)
t.FailNow()
}
scriptLocator, err := locator.Locator("text=1_string_match.php")
scriptLocator, err := page.Locator(".tree-node-title:has-text('1_string_match.php')")
if err != nil {
t.Errorf("Find 1_string_match.php fail: %v", err)
t.FailNow()
......@@ -125,10 +151,11 @@ func ScriptsBug(t provider.T) {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
_, err = page.WaitForSelector("#mainContent .tree")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.Errorf("Wait for workspace list nav fail: %v", err)
t.FailNow()
return
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
......
......@@ -55,7 +55,7 @@ func CreateInterpreter(t provider.T) {
t.Errorf("The Click interpreter nav fail: %v", err)
t.FailNow()
}
err = page.Click("#proxyTable>>button:has-text('运行环境')")
err = page.Click("#proxyTable>>tr:has-text('本地节点')>>button:has-text('运行环境')")
if err != nil {
t.Errorf("Click open interpreter modal fail: %v", err)
t.FailNow()
......@@ -151,7 +151,7 @@ func EditInterpreter(t provider.T) {
t.Errorf("The Click interpreter nav fail: %v", err)
t.FailNow()
}
err = page.Click("#proxyTable>>button:has-text('运行环境')")
err = page.Click("#proxyTable>>tr:has-text('本地节点')>>button:has-text('运行环境')")
if err != nil {
t.Errorf("Click open interpreter modal fail: %v", err)
t.FailNow()
......@@ -255,7 +255,7 @@ func DeleteInterpreter(t provider.T) {
t.Errorf("The Click interpreter nav fail: %v", err)
t.FailNow()
}
err = page.Click("#proxyTable>>button:has-text('运行环境')")
err = page.Click("#proxyTable>>tr:has-text('本地节点')>>button:has-text('运行环境')")
if err != nil {
t.Errorf("Click open interpreter modal fail: %v", err)
t.FailNow()
......
......@@ -20,9 +20,7 @@ func SwitchLanguage(t provider.T) {
}
headless := true
var slowMo float64 = 100
if languageBrowser == nil || !languageBrowser.IsConnected() {
languageBrowser, err = pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
}
languageBrowser, err = pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web languageBrowser: %v", err)
t.FailNow()
......@@ -34,7 +32,7 @@ func SwitchLanguage(t provider.T) {
}
defer func() {
if err = languageBrowser.Close(); err != nil {
t.Errorf("The workspaceBrowser cannot be closed: %v", err)
t.Errorf("The languageBrowser cannot be closed: %v", err)
t.FailNow()
return
}
......@@ -56,29 +54,25 @@ func SwitchLanguage(t provider.T) {
t.FailNow()
}
err = page.Click(`input[type="radio"]>>nth=1`)
locator, err := page.Locator(".t-card-toolbar div")
locator, err := page.Locator(".t-card-toolbar div>>nth=2")
interpreterTitle, err := locator.InnerText()
if interpreterTitle != "Interpreter" {
t.Error("Switch language fail")
if interpreterTitle != "Remote Server" {
t.Error("Switch language fail, find interpreter fail")
t.FailNow()
}
locator, err = page.Locator(".t-card-toolbar button")
CreateInterpreterTitle, err := locator.InnerText()
if CreateInterpreterTitle != "Create Interpreter" {
t.Error("Switch language fail")
if CreateInterpreterTitle != "Create Remote Server" {
t.Error("Switch language fail, find create remote server btn fail")
t.FailNow()
}
locator, err = page.Locator("#settingModal .modal-title")
modalTitle, err := locator.InnerText()
if modalTitle != "Settings" {
t.Error("Switch language fail")
t.Error("Switch language fail, find modalTitle fail")
t.FailNow()
}
err = page.Click(`input[type="radio"]>>nth=0`)
if err = languageBrowser.Close(); err != nil {
t.Errorf("The languageBrowser cannot be closed: %v", err)
t.FailNow()
}
}
func TestUiLanguage(t *testing.T) {
......
......@@ -83,10 +83,10 @@ func SwitchProduct(t provider.T) {
t.Errorf("Wait for product list nav fail: %v", err)
t.FailNow()
}
err = page.Click("#navbar .list-item>>text=test")
err = page.Click("#navbar .list-item>>text=企业内部工时管理系统")
page.WaitForTimeout(100)
productName, err := page.InnerText("#productMenuToggle>>span")
if productName != "test" {
if productName != "企业内部工时管理系统" {
t.Error("Switch product fail")
t.FailNow()
}
......
......@@ -4,6 +4,7 @@ import (
"strings"
"testing"
ztfTest "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"
......@@ -54,31 +55,9 @@ func Detail(t provider.T) {
t.FailNow()
}
locator, err := page.Locator("#siteMenuToggle")
if err != nil {
t.Errorf("The siteMenuToggle is missing: %v", err)
t.FailNow()
}
err = locator.Click()
if err != nil {
t.Errorf("The Click is fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#navbar .list-item")
if err != nil {
t.Errorf("Wait for site list nav fail: %v", err)
t.FailNow()
}
err = page.Click(".list-item-title>>text=单元测试站点")
if err != nil {
t.Errorf("The Click site nav fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
ztfTest.SelectSite(page)
ztfTest.ExpandProduct(page)
ztfTest.RunScript(page, "1_string_match.php")
err = page.Click("#rightPane .result-list-item .list-item-title>>nth=0")
if err != nil {
t.Errorf("Click first result fail: %v", err)
......@@ -89,7 +68,7 @@ func Detail(t provider.T) {
t.Errorf("Wait result tabpage fail: %v", err)
t.FailNow()
}
locator, err = page.Locator(".page-result .single small")
locator, err := page.Locator(".page-result .single small")
if err != nil {
t.Errorf("Find result percent locator fail: %v", err)
t.FailNow()
......@@ -409,6 +388,7 @@ func SubmitBugTwoStep(t provider.T) {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
ztfTest.RunScript(page, "1_string_match.php")
err = page.Click("#rightPane .result-list-item .list-item-title>>nth=0")
if err != nil {
t.Errorf("Click first result fail: %v", err)
......
......@@ -4,6 +4,7 @@ import (
"strings"
"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"
......@@ -48,11 +49,6 @@ func RunReExecFailCase(t provider.T) {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#siteMenuToggle")
if err != nil {
......@@ -74,11 +70,6 @@ func RunReExecFailCase(t provider.T) {
t.Errorf("The Click site nav fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
err = page.Click("#rightPane .result-list-item .list-item-title>>nth=0")
if err != nil {
t.Errorf("Click first result fail: %v", err)
......@@ -175,12 +166,6 @@ func RunReExecAllCase(t provider.T) {
t.Errorf("The specific URL is missing: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#siteMenuToggle")
if err != nil {
t.Errorf("The siteMenuToggle is missing: %v", err)
......@@ -201,11 +186,7 @@ func RunReExecAllCase(t provider.T) {
t.Errorf("The Click site nav fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
ztfTestHelper.RunScript(page, "1_string_match.php")
err = page.Click("#rightPane .result-list-item .list-item-title>>nth=0")
if err != nil {
t.Errorf("Click first result fail: %v", err)
......@@ -214,12 +195,12 @@ func RunReExecAllCase(t provider.T) {
if err != nil {
t.Errorf("Click re-exec failed case btn fail: %v", err)
}
_, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行3个用例,耗时')")
_, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
if err != nil {
t.Errorf("Wait exec script result fail: %v", err)
t.FailNow()
}
locator, err = page.Locator("#log-list>>code:has-text('执行3个用例,耗时')")
locator, err = page.Locator("#log-list>>code:has-text('执行1个用例,耗时')")
if err != nil {
t.Errorf("Find exec script log fail: %v", err)
t.FailNow()
......@@ -229,7 +210,7 @@ func RunReExecAllCase(t provider.T) {
t.Errorf("Find exec script result fail: %v", err)
t.FailNow()
}
if !strings.Contains(innerText, "2(66.0%) 通过,1(33.0%) 失败") {
if !strings.Contains(innerText, "0(0.0%) 通过,1(100.0%) 失败") {
t.Errorf("Exec failed case fail: %v", err)
t.FailNow()
}
......@@ -239,7 +220,7 @@ func RunReExecAllCase(t provider.T) {
t.FailNow()
}
resultTitle, err := resultTitleElement.InnerText()
if err != nil || resultTitle != "单元测试工作目录(3)" {
if err != nil || resultTitle != "1_string_match.php" {
t.Errorf("Find result in rightPane fail: %v", err)
t.FailNow()
}
......
......@@ -9,49 +9,23 @@ import (
playwright "github.com/playwright-community/playwright-go"
)
var runStatisticPage playwright.Page
func RunFailStatistic(t provider.T) {
t.ID("5487")
t.AddParentSuite("执行脚本")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
runBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web runBrowser: %v", err)
t.FailNow()
}
page, err := runBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = runBrowser.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{
if _, err := runStatisticPage.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.WaitForSelector(".tree-node")
_, err := runStatisticPage.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator, err := runStatisticPage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
......@@ -72,23 +46,23 @@ func RunFailStatistic(t provider.T) {
t.Errorf("Click script fail: %v", err)
t.FailNow()
}
elements, _ := page.QuerySelectorAll(".statistic>>span")
elements, _ := runStatisticPage.QuerySelectorAll(".statistic>>span")
runTimes, _ := elements[0].InnerText()
failTimes, _ := elements[2].InnerText()
runTimesInt, _ := strconv.Atoi(runTimes)
failTimesInt, _ := strconv.Atoi(failTimes)
err = page.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
err = runStatisticPage.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
if err != nil {
t.Errorf("Click run fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
_, err = runStatisticPage.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
if err != nil {
t.Errorf("Wait exec result fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(200)
elements, _ = page.QuerySelectorAll(".statistic>>span")
runStatisticPage.WaitForTimeout(200)
elements, _ = runStatisticPage.QuerySelectorAll(".statistic>>span")
runTimes2, _ := elements[0].InnerText()
failTimes2, _ := elements[2].InnerText()
runTimes2Int, _ := strconv.Atoi(runTimes2)
......@@ -102,46 +76,18 @@ func RunFailStatistic(t provider.T) {
func RunSuccessStatistic(t provider.T) {
t.ID("5487")
t.AddParentSuite("执行脚本")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
runBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web runBrowser: %v", err)
t.FailNow()
}
page, err := runBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = runBrowser.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{
if _, err := runStatisticPage.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.WaitForSelector(".tree-node")
_, err := runStatisticPage.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator, err := runStatisticPage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
......@@ -152,9 +98,9 @@ func RunSuccessStatistic(t provider.T) {
t.Errorf("Click node fail: %v", err)
t.FailNow()
}
scriptLocator, err := locator.Locator("text=2_webpage_extract.php")
scriptLocator, err := locator.Locator("text=3_http_interface_call.php")
if err != nil {
t.Errorf("Find 2_webpage_extract.php fail: %v", err)
t.Errorf("Find 3_http_interface_call.php fail: %v", err)
t.FailNow()
}
err = scriptLocator.Click()
......@@ -162,23 +108,23 @@ func RunSuccessStatistic(t provider.T) {
t.Errorf("Click script fail: %v", err)
t.FailNow()
}
elements, _ := page.QuerySelectorAll(".statistic>>span")
elements, _ := runStatisticPage.QuerySelectorAll(".statistic>>span")
runTimes, _ := elements[0].InnerText()
succTimes, _ := elements[1].InnerText()
runTimesInt, _ := strconv.Atoi(runTimes)
succTimesInt, _ := strconv.Atoi(succTimes)
err = page.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
err = runStatisticPage.Click(".tabs-nav-toolbar>>[title=\"Run\"]")
if err != nil {
t.Errorf("Click run fail: %v", err)
t.FailNow()
}
_, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
_, err = runStatisticPage.WaitForSelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')")
if err != nil {
t.Errorf("Wait exec result fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(200)
elements, _ = page.QuerySelectorAll(".statistic>>span")
runStatisticPage.WaitForTimeout(200)
elements, _ = runStatisticPage.QuerySelectorAll(".statistic>>span")
runTimes2, _ := elements[0].InnerText()
succTimes2, _ := elements[1].InnerText()
runTimes2Int, _ := strconv.Atoi(runTimes2)
......@@ -192,46 +138,18 @@ func RunSuccessStatistic(t provider.T) {
func RunBugStatistic(t provider.T) {
t.ID("5487")
t.AddParentSuite("执行脚本")
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
}
headless := true
var slowMo float64 = 100
runBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web runBrowser: %v", err)
t.FailNow()
}
page, err := runBrowser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
}
defer func() {
if err = runBrowser.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{
if _, err := runStatisticPage.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.WaitForSelector(".tree-node")
_, err := runStatisticPage.WaitForSelector(".tree-node")
if err != nil {
t.Errorf("Wait tree-node fail: %v", err)
t.FailNow()
}
locator, err := page.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
locator, err := runStatisticPage.Locator(".tree-node", playwright.PageLocatorOptions{HasText: "单元测试工作目录"})
c, err := locator.Count()
if err != nil || c == 0 {
t.Errorf("Find workspace fail: %v", err)
......@@ -252,16 +170,16 @@ func RunBugStatistic(t provider.T) {
t.Errorf("Click script fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(200)
elements, _ := page.QuerySelectorAll(".statistic>>span")
runStatisticPage.WaitForTimeout(200)
elements, _ := runStatisticPage.QuerySelectorAll(".statistic>>span")
bugTimes, _ := elements[3].InnerText()
bugTimesInt, _ := strconv.Atoi(bugTimes)
err = page.Click(".statistic>>span>>nth=3")
err = runStatisticPage.Click(".statistic>>span>>nth=3")
if err != nil {
t.Errorf("Click bug btn fail: %v", err)
t.FailNow()
}
elements, _ = page.QuerySelectorAll("#bugsModal>>tr")
elements, _ = runStatisticPage.QuerySelectorAll("#bugsModal>>tr")
bugTimes2Int := len(elements)
if bugTimes2Int-1 != bugTimesInt {
......@@ -270,8 +188,44 @@ func RunBugStatistic(t provider.T) {
}
}
func TestUiRunToolbar(t *testing.T) {
func TestUiRunStatistic(t *testing.T) {
pw, err := playwright.Run()
if err != nil {
t.Error(err)
t.FailNow()
return
}
headless := true
var slowMo float64 = 100
browser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo})
if err != nil {
t.Errorf("Fail to launch the web browser: %v", err)
t.FailNow()
return
}
runStatisticPage, err = browser.NewPage()
if err != nil {
t.Errorf("Create the new page fail: %v", err)
t.FailNow()
return
}
if _, err = runStatisticPage.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
}
runner.Run(t, "客户端-确认执行统计成功数据", RunSuccessStatistic)
runner.Run(t, "客户端-确认执行统计失败数据", RunFailStatistic)
runner.Run(t, "客户端-确认执行统计bug数据", RunBugStatistic)
if err = browser.Close(); err != nil {
t.Errorf("The browser 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
}
}
此差异已折叠。
......@@ -92,6 +92,11 @@ func CreateServer(t provider.T) {
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 {
......@@ -146,12 +151,7 @@ func EditServer(t provider.T) {
t.Errorf("The Click server nav fail: %v", err)
t.FailNow()
}
locator, err := page.Locator("#settingModal .z-tbody-tr", playwright.PageLocatorOptions{HasText: "测试服务器"})
if err != nil {
t.Errorf("Find 测试服务器 tr fail: %v", err)
t.FailNow()
}
locator, err = locator.Locator("text=编辑")
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()
......@@ -182,6 +182,11 @@ func EditServer(t provider.T) {
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 {
......@@ -255,7 +260,11 @@ func DeleteServer(t provider.T) {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(1000)
_, 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 {
......
......@@ -126,7 +126,11 @@ func CreateSite(t provider.T) {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(1000)
_, err = page.WaitForSelector(".list-item-content span:has-text('单元测试站点')")
if err != nil {
t.Errorf("Wait created site fail: %v", err)
t.FailNow()
}
locator, err = page.Locator(".list-item-content span", playwright.PageLocatorOptions{HasText: "单元测试站点"})
c, err := locator.Count()
if err != nil || c == 0 {
......@@ -262,8 +266,12 @@ func EditSite(t provider.T) {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(1000)
locator, err = page.Locator(".list-item-content", playwright.PageLocatorOptions{HasText: "单元测试站点-update"})
_, err = page.WaitForSelector(".list-item-content span:has-text('单元测试站点-update')")
if err != nil {
t.Errorf("Wait updated site fail: %v", err)
t.FailNow()
}
locator, err = page.Locator(".list-item-content span", playwright.PageLocatorOptions{HasText: "单元测试站点-update"})
c, err = locator.Count()
if err != nil || c == 0 {
t.Errorf("Find update site fail: %v", err)
......@@ -347,7 +355,11 @@ func DeleteSite(t provider.T) {
t.Errorf("The Click submit form fail: %v", err)
t.FailNow()
}
page.WaitForTimeout(1000)
_, err = page.WaitForSelector(".list-item-content span:has-text('单元测试站点')", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached})
if err != nil {
t.Errorf("Wait updated site fail: %v", err)
t.FailNow()
}
locator, err = page.Locator(".list-item-content", playwright.PageLocatorOptions{HasText: "单元测试站点"})
c, err := locator.Count()
if err != nil || c > 0 {
......
package main
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 := true
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
}
}
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册