From 9324c40ebe5e88f14dd7194a6b8917f34064067c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E7=88=B1=E6=97=A0=E7=97=95?= Date: Wed, 28 Sep 2022 16:58:50 +0800 Subject: [PATCH] Add server,proxy test script --- test/helper/zentao/ui/zentao.go | 134 ++++++++- test/ui/ui_interpreter_test.go | 15 + test/ui/ui_proxy_test.go | 274 ++++++++++++++++++ test/ui/ui_run_test.go | 12 +- test/ui/ui_server_test.go | 271 +++++++++++++++++ ui/src/views/interpreter/interpreterModal.vue | 1 + ui/src/views/proxy/FormProxy.vue | 1 + ui/src/views/proxy/ProxyNav.vue | 6 +- ui/src/views/server/FormServer.vue | 1 + ui/src/views/settings/SettingsModal.vue | 3 + 10 files changed, 708 insertions(+), 10 deletions(-) create mode 100644 test/ui/ui_proxy_test.go create mode 100644 test/ui/ui_server_test.go diff --git a/test/helper/zentao/ui/zentao.go b/test/helper/zentao/ui/zentao.go index cb48e942..9d7b03e7 100644 --- a/test/helper/zentao/ui/zentao.go +++ b/test/helper/zentao/ui/zentao.go @@ -14,8 +14,8 @@ import ( var page playwright.Page var zentaoVersion = "" -func Login() (err error) { - if _, err = page.Goto("http://127.0.0.1:8081/", playwright.PageGotoOptions{ +func Login(url string) (err error) { + if _, err = page.Goto(url, playwright.PageGotoOptions{ WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil { return } @@ -172,12 +172,111 @@ func createSuite() (err error) { return } -func goToLastUnitTestResult() { - +func getLastUnitTestResult() (results []map[string]string, err error) { + if _, err = page.Goto("http://127.0.0.1:8081/", playwright.PageGotoOptions{ + WaitUntil: playwright.WaitUntilStateDomcontentloaded}); err != nil { + return + } + page.Click(".nav>>li>>text=测试") + iframeName := "app-qa" + iframe := page.Frame(playwright.PageFrameOptions{Name: &iframeName}) + results = []map[string]string{} + if iframe != nil { + iframe.Click(".nav>>li>>text=用例") + iframe.Click("#mainMenu>>a>>text=单元测试") + iframe.Click("#taskList>>tr>>nth=1>>td>>nth=1>>a") + iframe.WaitForSelector("#taskList", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached}) + tds, err := iframe.QuerySelectorAll("table>>tr") + if err != nil { + return results, err + } + for index := 1; index < len(tds); index++ { + titleNth := "2" + statusNth := "5" + if index == 1 { + titleNth = "3" + statusNth = "6" + } + titleSelector, err := iframe.QuerySelector("table>>tr>>nth=" + strconv.Itoa(index) + ">>td>>nth=" + titleNth) + if err != nil || titleSelector == nil { + continue + } + title, err := titleSelector.InnerText() + if err != nil { + continue + } + statusSelector, err := iframe.QuerySelector("table>>tr>>nth=" + strconv.Itoa(index) + ">>td>>nth=" + statusNth) + if err != nil { + continue + } + status, err := statusSelector.InnerText() + if err != nil { + continue + } + results = append(results, map[string]string{ + "title": title, + "status": status, + }) + } + } else { + page.Hover(".nav>>li>>text=用例") + page.Click(".nav>>li>>text=单元测试") + page.Click("#currentItem") + page.Click("#dropMenu>>a>>text=公司企业网站建设") + page.Click("#taskList>>tr>>nth=1>>td>>nth=1>>a") + page.WaitForSelector("#taskList", playwright.PageWaitForSelectorOptions{State: playwright.WaitForSelectorStateDetached}) + tds, err := page.QuerySelectorAll("table>>tr") + if err != nil { + return results, err + } + for index := 1; index < len(tds); index++ { + titleNth := "2" + statusNth := "5" + if index == 1 { + titleNth = "3" + statusNth = "6" + } + titleSelector, err := page.QuerySelector("table>>tr>>nth=" + strconv.Itoa(index) + ">>td>>nth=" + titleNth) + if err != nil || titleSelector == nil { + continue + } + title, err := titleSelector.InnerText() + if err != nil { + continue + } + statusSelector, err := page.QuerySelector("table>>tr>>nth=" + strconv.Itoa(index) + ">>td>>nth=" + statusNth) + if err != nil { + continue + } + status, err := statusSelector.InnerText() + if err != nil { + continue + } + results = append(results, map[string]string{ + "title": title, + "status": status, + }) + } + } + return results, err } -func checkUnitTestResult() { - +func CheckUnitTestResult() bool { + results, err := getLastUnitTestResult() + if err != nil { + return false + } + titleExist := map[string]bool{} + for _, result := range results { + titleExist[result["title"]] = true + if result["title"] == "loginFail" && result["status"] != "通过" { + return false + } + if result["title"] == "loginSuccess" && result["status"] != "失败" { + return false + } + } + return true && titleExist["loginFail"] == true && titleExist["loginSuccess"] == true } func InstallExt(version, codeDir string) error { @@ -334,7 +433,7 @@ func InitZentaoData(version string, codeDir string) (err error) { if err != nil { return } - err = Login() + err = Login("http://127.0.0.1:8081") if err != nil { return } @@ -355,3 +454,24 @@ func InitZentaoData(version string, codeDir string) (err error) { pw.Stop() return } + +func init() { + if page != nil { + return + } + pw, err := playwright.Run() + if err != nil { + return + } + headless := true + var slowMo float64 = 100 + runBrowser, err := pw.Chromium.Launch(playwright.BrowserTypeLaunchOptions{Headless: &headless, SlowMo: &slowMo}) + if err != nil { + return + } + page, err = runBrowser.NewPage() + if err != nil { + return + } + Login("http://127.0.0.1:8081") +} diff --git a/test/ui/ui_interpreter_test.go b/test/ui/ui_interpreter_test.go index 6f279877..8110209b 100644 --- a/test/ui/ui_interpreter_test.go +++ b/test/ui/ui_interpreter_test.go @@ -55,6 +55,11 @@ func CreateInterpreter(t provider.T) { t.Errorf("The Click interpreter nav fail: %v", err) t.FailNow() } + err = page.Click("#proxyTable>>button:has-text('运行环境')") + if err != nil { + t.Errorf("Click open interpreter modal fail: %v", err) + t.FailNow() + } err = page.Click("text=新建运行环境") if err != nil { t.Errorf("The Click create interpreter fail: %v", err) @@ -146,6 +151,11 @@ func EditInterpreter(t provider.T) { t.Errorf("The Click interpreter nav fail: %v", err) t.FailNow() } + err = page.Click("#proxyTable>>button:has-text('运行环境')") + if err != nil { + t.Errorf("Click open interpreter modal fail: %v", err) + t.FailNow() + } locator, err := page.Locator("#settingModal .z-tbody-tr", playwright.PageLocatorOptions{HasText: "Python"}) if err != nil { t.Errorf("Find python tr fail: %v", err) @@ -245,6 +255,11 @@ func DeleteInterpreter(t provider.T) { t.Errorf("The Click interpreter nav fail: %v", err) t.FailNow() } + err = page.Click("#proxyTable>>button:has-text('运行环境')") + if err != nil { + t.Errorf("Click open interpreter modal fail: %v", err) + t.FailNow() + } locator, err := page.Locator("#settingModal .z-tbody-tr", playwright.PageLocatorOptions{HasText: "Python"}) if err != nil { t.Errorf("Find python tr fail: %v", err) diff --git a/test/ui/ui_proxy_test.go b/test/ui/ui_proxy_test.go new file mode 100644 index 00000000..cc03c9e8 --- /dev/null +++ b/test/ui/ui_proxy_test.go @@ -0,0 +1,274 @@ +package main + +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("5465") + t.AddParentSuite("设置界面语言") + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + headless := true + 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("5465") + t.AddParentSuite("设置界面语言") + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + headless := true + 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("5465") + t.AddParentSuite("设置界面语言") + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + headless := true + 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) +} diff --git a/test/ui/ui_run_test.go b/test/ui/ui_run_test.go index 562cccb5..8f8dfcb8 100644 --- a/test/ui/ui_run_test.go +++ b/test/ui/ui_run_test.go @@ -7,6 +7,7 @@ import ( "testing" commonTestHelper "github.com/easysoft/zentaoatf/test/helper/common" + zentaoTestHelper "github.com/easysoft/zentaoatf/test/helper/zentao/ui" "github.com/ozontech/allure-go/pkg/framework/provider" "github.com/ozontech/allure-go/pkg/framework/runner" playwright "github.com/playwright-community/playwright-go" @@ -1163,7 +1164,11 @@ func RunUnit(t provider.T) { t.FailNow() } } - + isSuccess := zentaoTestHelper.CheckUnitTestResult() + if !isSuccess { + t.Errorf("Exec testng unit fail") + t.FailNow() + } } func createWorkspace(t provider.T, workspacePath string, page playwright.Page) { @@ -1218,7 +1223,9 @@ func createWorkspace(t provider.T, workspacePath string, page playwright.Page) { t.Errorf("The Click submit form fail: %v", err) t.FailNow() } - locator, err = page.Locator(".tree-node-title", playwright.PageLocatorOptions{HasText: "testng工作目录"}) + 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 { t.Errorf("Find created workspace fail: %v", err) @@ -1235,4 +1242,5 @@ func TestUiRun(t *testing.T) { runner.Run(t, "客户端-执行所有的脚本文件", RunAll) runner.Run(t, "客户端-右键执行工作目录", RunWorkspace) runner.Run(t, "客户端-右键执行文件夹", RunDir) + runner.Run(t, "客户端-执行TestNG单元测试", RunUnit) } diff --git a/test/ui/ui_server_test.go b/test/ui/ui_server_test.go new file mode 100644 index 00000000..d0bda3aa --- /dev/null +++ b/test/ui/ui_server_test.go @@ -0,0 +1,271 @@ +package main + +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("5465") + t.AddParentSuite("设置界面语言") + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + headless := true + 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() + } + 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("5465") + t.AddParentSuite("设置界面语言") + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + headless := true + 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", 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("#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}) + 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("5465") + t.AddParentSuite("设置界面语言") + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + headless := true + 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() + } + 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 server fail: %v", err) + t.FailNow() + } +} + +func TestUiServer(t *testing.T) { + runner.Run(t, "客户端-创建解析器", CreateServer) + runner.Run(t, "客户端-编辑解析器", EditServer) + runner.Run(t, "客户端-删除解析器", DeleteServer) +} diff --git a/ui/src/views/interpreter/interpreterModal.vue b/ui/src/views/interpreter/interpreterModal.vue index f705640e..b6f2bab3 100644 --- a/ui/src/views/interpreter/interpreterModal.vue +++ b/ui/src/views/interpreter/interpreterModal.vue @@ -196,6 +196,7 @@ const remove = (item) => { onOk: async () => { await removeInterpreter(item.value.id, props.proxyInfo.path); list(); + store.dispatch('proxy/fetchInterpreters', {}) }, }); }; diff --git a/ui/src/views/proxy/FormProxy.vue b/ui/src/views/proxy/FormProxy.vue index a2f6bb82..9cb28684 100644 --- a/ui/src/views/proxy/FormProxy.vue +++ b/ui/src/views/proxy/FormProxy.vue @@ -1,5 +1,6 @@