diff --git a/.gitignore b/.gitignore index 37ba176e5b272464da91104e61832e71ef3b51e9..0a09544e354067bc2dd9690b494c22e5e364ffa3 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ logs/ /test/demo/ci_test* test/demo/php/conf test/demo/php/log +test/demo/php/product1 diff --git a/test/demo/php/2_webpage_extract.php b/test/demo/php/2_webpage_extract.php index 9e6f4ae294dae483ac64daa6f43faaa1c261a69a..7b41164ae75623a47de111e876877c69f082c51c 100644 --- a/test/demo/php/2_webpage_extract.php +++ b/test/demo/php/2_webpage_extract.php @@ -8,7 +8,7 @@ pid=1 1. Load web page from url http://xxx 2. Retrieve img element zt-logo.png in html -3. Check img exist >> `.*zt-logo.png1` +3. Check img exist >> `.*zt-logo.png` */ diff --git a/test/demo/php/3_http_interface_call.php b/test/demo/php/3_http_interface_call.php new file mode 100644 index 0000000000000000000000000000000000000000..eca9c3ed559972c5c192cbb0298daa7891539bd1 --- /dev/null +++ b/test/demo/php/3_http_interface_call.php @@ -0,0 +1,17 @@ +#!/usr/bin/env php +> `^[a-z0-9]{26}` + +*/ + +$resp = file_get_contents('http://max.demo.zentao.net/pms/?mode=getconfig'); +$json = json_decode($resp); +echo $json->sessionID . "\n"; diff --git a/test/ui_run_test.go b/test/ui_run_test.go new file mode 100644 index 0000000000000000000000000000000000000000..195aa326ad5a4ec185a2c46e747654b93e123277 --- /dev/null +++ b/test/ui_run_test.go @@ -0,0 +1,302 @@ +package main + +import ( + "strings" + "testing" + + playwright "github.com/playwright-community/playwright-go" +) + +var runBrowser playwright.Browser + +func RunScript(t *testing.T) { + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + 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() + } + page, err := workspaceBrowser.NewPage() + if err != nil { + t.Errorf("Create the new page fail: %v", err) + t.FailNow() + } + 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.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: "单元测试工作目录"}) + c, err := Locator.Count() + if err != nil || c == 0 { + t.Errorf("Find workspace fail: %v", err) + t.FailNow() + } + err = Locator.Click() + if err != nil { + t.Errorf("Click node fail: %v", err) + t.FailNow() + } + scriptLocator, err := Locator.Locator("text=1_string_match.php") + if err != nil { + t.Errorf("Find 1_string_match.php fail: %v", err) + t.FailNow() + } + err = scriptLocator.Click() + if err != nil { + t.Errorf("Click script fail: %v", err) + t.FailNow() + } + err = page.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个用例,耗时')") + if err != nil { + t.Errorf("Wait exec result fail: %v", err) + t.FailNow() + } + element, err := page.QuerySelector("#log-list>>.msg-span>>:has-text('执行1个用例,耗时')") + innerText, err := element.InnerText() + if err != nil { + t.Errorf("Find result fail: %v", err) + t.FailNow() + } + if !strings.Contains(innerText, "1(100.0%) 失败") { + t.Errorf("Exec 1_string_match.php fail: %v", err) + t.FailNow() + } + + if err = workspaceBrowser.Close(); err != nil { + t.Errorf("The workspaceBrowser cannot be closed: %v", err) + t.FailNow() + } + if err = pw.Stop(); err != nil { + t.Errorf("The playwright cannot be stopped: %v", err) + t.FailNow() + } +} + +func RunSelectedScripts(t *testing.T) { + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + 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() + } + page, err := workspaceBrowser.NewPage() + if err != nil { + t.Errorf("Create the new page fail: %v", err) + t.FailNow() + } + 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.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: "单元测试工作目录"}) + c, err := Locator.Count() + if err != nil || c == 0 { + t.Errorf("Find workspace fail: %v", err) + t.FailNow() + } + err = Locator.Click() + if err != nil { + t.Errorf("Click node fail: %v", err) + t.FailNow() + } + err = page.Click(`[title="批量选择"]`) + if err != nil { + t.Errorf("The Click select btn fail: %v", err) + t.FailNow() + } + scriptLocator, err := Locator.Locator(".tree-node-item:has-text('1_string_match.php')") + if err != nil { + t.Errorf("Find 1_string_match.php fail: %v", err) + t.FailNow() + } + scriptLocator, err = scriptLocator.Locator(".tree-node-check") + if err != nil { + t.Errorf("Find 1_string_match.php checkbox fail: %v", err) + t.FailNow() + } + err = scriptLocator.Click() + if err != nil { + t.Errorf("Click 1_string_match.php checkbox fail: %v", err) + t.FailNow() + } + scriptLocator, err = Locator.Locator(".tree-node-item:has-text('2_webpage_extract.php')") + if err != nil { + t.Errorf("Find 2_webpage_extract.php fail: %v", err) + t.FailNow() + } + scriptLocator, err = scriptLocator.Locator(".tree-node-check") + if err != nil { + t.Errorf("Find 2_webpage_extract.php checkbox fail: %v", err) + t.FailNow() + } + err = scriptLocator.Click() + if err != nil { + t.Errorf("Click 2_webpage_extract.php checkbox fail: %v", err) + t.FailNow() + } + err = page.Click(".run-selected") + if err != nil { + t.Errorf("Click run fail: %v", err) + t.FailNow() + } + _, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行2个用例,耗时')") + if err != nil { + t.Errorf("Wait exec result fail: %v", err) + t.FailNow() + } + element, err := page.QuerySelector("#log-list>>.msg-span>>:has-text('执行2个用例,耗时')") + innerText, err := element.InnerText() + if err != nil { + t.Errorf("Find result fail: %v", err) + t.FailNow() + } + if !strings.Contains(innerText, "1(50.0%) 通过,1(50.0%) 失败") { + t.Errorf("Exec 1_string_match.php,2_webpage_extract.php fail: %v", err) + t.FailNow() + } + + if err = workspaceBrowser.Close(); err != nil { + t.Errorf("The workspaceBrowser cannot be closed: %v", err) + t.FailNow() + } + if err = pw.Stop(); err != nil { + t.Errorf("The playwright cannot be stopped: %v", err) + t.FailNow() + } +} + +func RunOpenedAndLast(t *testing.T) { + pw, err := playwright.Run() + if err != nil { + t.Error(err) + t.FailNow() + } + 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() + } + page, err := workspaceBrowser.NewPage() + if err != nil { + t.Errorf("Create the new page fail: %v", err) + t.FailNow() + } + 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.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) + 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.Click(".tree-node-item:has-text('1_string_match.php')") + if err != nil { + t.Errorf("Click 1_string_match.php fail: %v", err) + t.FailNow() + } + err = page.Click(".tree-node-item:has-text('2_webpage_extract.php')") + if err != nil { + t.Errorf("Click 2_webpage_extract.php fail: %v", err) + t.FailNow() + } + err = page.Click("#batchRunMenuToggle") + if err != nil { + t.Errorf("Click batchRunMenuToggle fail: %v", err) + t.FailNow() + + } + err = page.Click("list-item-content>>:has-text('执行上次')") + if err != nil { + t.Errorf("The Click Run last time fail: %v", err) + t.FailNow() + + } + _, err = page.WaitForSelector("#log-list>>.msg-span>>:has-text('执行2个用例,耗时')") + if err != nil { + t.Errorf("Wait exec result fail: %v", err) + t.FailNow() + } + element, err := page.QuerySelector("#log-list>>.msg-span>>:has-text('执行2个用例,耗时')") + innerText, err := element.InnerText() + if err != nil { + t.Errorf("Find result fail: %v", err) + t.FailNow() + } + if !strings.Contains(innerText, "1(50.0%) 通过,1(50.0%) 失败") { + t.Errorf("Exec 1_string_match.php,2_webpage_extract.php fail: %v", err) + t.FailNow() + } + + if err = workspaceBrowser.Close(); err != nil { + t.Errorf("The workspaceBrowser cannot be closed: %v", err) + t.FailNow() + } + if err = pw.Stop(); err != nil { + t.Errorf("The playwright cannot be stopped: %v", err) + t.FailNow() + } +} + +func TestUiRun(t *testing.T) { + // t.Run("RunScript", RunScript) + // t.Run("RunSelectedScripts", RunSelectedScripts) + t.Run("RunOpenedAndLast", RunOpenedAndLast) +} diff --git a/test/ui_site_test.go b/test/ui_site_test.go index f1f6e11b88e92fe9e0fe158334d02e33bf4479e7..29932badc1e29200ac90fa8bece6f9507af0b46d 100644 --- a/test/ui_site_test.go +++ b/test/ui_site_test.go @@ -181,7 +181,6 @@ func EditSite(t *testing.T) { t.FailNow() } - // page.WaitForSelector(".tree") Locator, err := page.Locator("#siteMenuToggle") if err != nil { t.Errorf("The siteMenuToggle is missing: %v", err) @@ -204,7 +203,6 @@ func EditSite(t *testing.T) { if err != nil { t.Errorf("The Click site nav fail: %v", err) t.FailNow() - } // page.WaitForSelector(".modal-title") Locator, err = page.Locator(".list-item", playwright.PageLocatorOptions{HasText: "单元测试站点"})