diff --git a/internal/version/VERSION b/internal/version/VERSION index 4b0bf81b..e7567135 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0+2503051629 +v5.0.0+2503051810 diff --git a/step_ui.go b/step_ui.go index 80bf6d11..4dafc3d5 100644 --- a/step_ui.go +++ b/step_ui.go @@ -103,7 +103,9 @@ func (s *StepMobile) Home() *StepMobile { return s } -// TapXY taps the point {X,Y}, X & Y is percentage of coordinates +// TapXY taps the point {X,Y} +// if X<1 & Y<1, {X,Y} will be considered as percentage +// else, X & Y will be considered as absolute coordinates func (s *StepMobile) TapXY(x, y float64, opts ...option.ActionOption) *StepMobile { action := uixt.MobileAction{ Method: uixt.ACTION_TapXY, diff --git a/tests/build_test.go b/tests/build_test.go index 010dd23a..5063da22 100644 --- a/tests/build_test.go +++ b/tests/build_test.go @@ -13,33 +13,20 @@ import ( func TestRun(t *testing.T) { err := hrp.BuildPlugin(tmpl("plugin/debugtalk.go"), "./debugtalk.bin") - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) genDebugTalkPyPath := filepath.Join(tmpl("plugin/"), hrp.PluginPySourceGenFile) err = hrp.BuildPlugin(tmpl("plugin/debugtalk.py"), genDebugTalkPyPath) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) contentBytes, err := builtin.LoadFile(genDebugTalkPyPath) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) content := string(contentBytes) - if !assert.Contains(t, content, "import funppy") { - t.Fatal() - } - - if !assert.Contains(t, content, "funppy.register") { - t.Fatal() - } + assert.Contains(t, content, "import funppy") + assert.Contains(t, content, "funppy.register") reg, _ := regexp.Compile(`funppy\.register`) matchedSlice := reg.FindAllStringSubmatch(content, -1) - if !assert.Len(t, matchedSlice, 10) { - t.Fatal() - } + assert.Len(t, matchedSlice, 10) } diff --git a/tests/loader_test.go b/tests/loader_test.go index 31f678cb..851c9fc8 100644 --- a/tests/loader_test.go +++ b/tests/loader_test.go @@ -12,44 +12,28 @@ func TestLoadTestCases(t *testing.T) { // load test cases from folder path tc := hrp.TestCasePath("../examples/demo-with-py-plugin/testcases/") testCases, err := hrp.LoadTestCases(&tc) - if !assert.Nil(t, err) { - t.Fatal() - } - if !assert.Equal(t, 4, len(testCases)) { - t.Fatal() - } + assert.Nil(t, err) + assert.Equal(t, 3, len(testCases)) // load test cases from folder path, including sub folders tc = hrp.TestCasePath("../examples/demo-with-py-plugin/") testCases, err = hrp.LoadTestCases(&tc) - if !assert.Nil(t, err) { - t.Fatal() - } - if !assert.Equal(t, 4, len(testCases)) { - t.Fatal() - } + assert.Nil(t, err) + assert.Equal(t, 3, len(testCases)) // load test cases from single file path tc = hrp.TestCasePath(demoTestCaseWithPluginJSONPath) testCases, err = hrp.LoadTestCases(&tc) - if !assert.Nil(t, err) { - t.Fatal() - } - if !assert.Equal(t, 1, len(testCases)) { - t.Fatal() - } + assert.Nil(t, err) + assert.Equal(t, 1, len(testCases)) // load test cases from TestCase instance testcase := &hrp.TestCase{ Config: hrp.NewConfig("TestCase").SetWeight(3), } testCases, err = hrp.LoadTestCases(testcase) - if !assert.Nil(t, err) { - t.Fatal() - } - if !assert.Equal(t, len(testCases), 1) { - t.Fatal() - } + assert.Nil(t, err) + assert.Equal(t, len(testCases), 1) // load test cases from TestCaseJSON testcaseJSON := hrp.TestCaseJSON(` @@ -61,36 +45,21 @@ func TestLoadTestCases(t *testing.T) { ] }`) testCases, err = hrp.LoadTestCases(&testcaseJSON) - if !assert.Nil(t, err) { - t.Fatal() - } - if !assert.Equal(t, len(testCases), 1) { - t.Fatal() - } + assert.Nil(t, err) + assert.Equal(t, len(testCases), 1) } func TestLoadCase(t *testing.T) { tcJSON := &hrp.TestCaseDef{} tcYAML := &hrp.TestCaseDef{} err := hrp.LoadFileObject(demoTestCaseWithPluginJSONPath, tcJSON) - if !assert.NoError(t, err) { - t.Fatal() - } - err = hrp.LoadFileObject(demoTestCaseWithPluginYAMLPath, tcYAML) - if !assert.NoError(t, err) { - t.Fatal() - } + assert.Nil(t, err) - if !assert.Equal(t, tcJSON.Config.Name, tcYAML.Config.Name) { - t.Fatal() - } - if !assert.Equal(t, tcJSON.Config.BaseURL, tcYAML.Config.BaseURL) { - t.Fatal() - } - if !assert.Equal(t, tcJSON.Steps[1].StepName, tcYAML.Steps[1].StepName) { - t.Fatal() - } - if !assert.Equal(t, tcJSON.Steps[1].Request, tcJSON.Steps[1].Request) { - t.Fatal() - } + err = hrp.LoadFileObject(demoTestCaseWithPluginYAMLPath, tcYAML) + assert.Nil(t, err) + + assert.Equal(t, tcJSON.Config.Name, tcYAML.Config.Name) + assert.Equal(t, tcJSON.Config.BaseURL, tcYAML.Config.BaseURL) + assert.Equal(t, tcJSON.Steps[1].StepName, tcYAML.Steps[1].StepName) + assert.Equal(t, tcJSON.Steps[1].Request, tcJSON.Steps[1].Request) } diff --git a/tests/parameters_test.go b/tests/parameters_test.go index 2f4a927f..2df83a68 100644 --- a/tests/parameters_test.go +++ b/tests/parameters_test.go @@ -79,12 +79,8 @@ func TestLoadParameters(t *testing.T) { parser := hrp.NewParser() for _, data := range testData { value, err := parser.LoadParameters(data.configParameters, variablesMapping) - if !assert.Nil(t, err) { - t.Fatal() - } - if !assert.Equal(t, data.loadedParameters, value) { - t.Fatal() - } + assert.Nil(t, err) + assert.Equal(t, data.loadedParameters, value) } } @@ -114,9 +110,7 @@ func TestLoadParametersError(t *testing.T) { parser := hrp.NewParser() for _, data := range testData { _, err := parser.LoadParameters(data.configParameters, map[string]interface{}{}) - if !assert.Error(t, err) { - t.Fatal() - } + assert.Error(t, err) } } @@ -250,23 +244,15 @@ func TestInitParametersIteratorCount(t *testing.T) { parser := hrp.NewParser() for _, data := range testData { iterator, err := parser.InitParametersIterator(data.cfg) - if !assert.Nil(t, err) { - t.Fatal() - } - if !assert.Equal(t, data.expectLimit, iterator.Limit) { - t.Fatal() - } + assert.Nil(t, err) + assert.Equal(t, data.expectLimit, iterator.Limit) for i := 0; i < data.expectLimit; i++ { - if !assert.True(t, iterator.HasNext()) { - t.Fatal() - } + assert.True(t, iterator.HasNext()) iterator.Next() // consume next parameters } // should not have next - if !assert.False(t, iterator.HasNext()) { - t.Fatal() - } + assert.False(t, iterator.HasNext()) } } @@ -299,28 +285,18 @@ func TestInitParametersIteratorUnlimitedCount(t *testing.T) { parser := hrp.NewParser() for _, data := range testData { iterator, err := parser.InitParametersIterator(data.cfg) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) // set unlimited mode iterator.SetUnlimitedMode() - if !assert.Equal(t, -1, iterator.Limit) { - t.Fatal() - } + assert.Equal(t, -1, iterator.Limit) for i := 0; i < 100; i++ { - if !assert.True(t, iterator.HasNext()) { - t.Fatal() - } + assert.True(t, iterator.HasNext()) iterator.Next() // consume next parameters } - if !assert.Equal(t, 100, iterator.Index) { - t.Fatal() - } + assert.Equal(t, 100, iterator.Index) // should also have next - if !assert.True(t, iterator.HasNext()) { - t.Fatal() - } + assert.True(t, iterator.HasNext()) } } @@ -382,22 +358,16 @@ func TestInitParametersIteratorContent(t *testing.T) { parser := hrp.NewParser() for _, data := range testData { iterator, err := parser.InitParametersIterator(data.cfg) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) // get expected parameters item for i := 0; i < data.checkIndex; i++ { - if !assert.True(t, iterator.HasNext()) { - t.Fatal() - } + assert.True(t, iterator.HasNext()) iterator.Next() // consume next parameters } parametersItem := iterator.Next() - if !assert.Equal(t, data.expectParameters, parametersItem) { - t.Fatal() - } + assert.Equal(t, data.expectParameters, parametersItem) } } @@ -439,9 +409,7 @@ func TestGenCartesianProduct(t *testing.T) { for _, data := range testData { parameters := hrp.GenCartesianProduct(data.multiParameters) - if !assert.Equal(t, data.expect, parameters) { - t.Fatal() - } + assert.Equal(t, data.expect, parameters) } } @@ -493,12 +461,8 @@ func TestConvertParameters(t *testing.T) { for _, data := range testData { value, err := hrp.ConvertParameters(data.key, data.parametersRawList) - if !assert.Nil(t, err) { - t.Fatal() - } - if !assert.Equal(t, data.expect, value) { - t.Fatal() - } + assert.Nil(t, err) + assert.Equal(t, data.expect, value) } } @@ -533,8 +497,6 @@ func TestConvertParametersError(t *testing.T) { for _, data := range testData { _, err := hrp.ConvertParameters(data.key, data.parametersRawList) - if !assert.Error(t, err) { - t.Fatal() - } + assert.Error(t, err) } } diff --git a/tests/plugin_test.go b/tests/plugin_test.go index 8aedd8b9..4764616a 100644 --- a/tests/plugin_test.go +++ b/tests/plugin_test.go @@ -11,38 +11,26 @@ import ( func TestLocateFile(t *testing.T) { // specify target file path _, err := hrp.LocateFile(tmpl("plugin/debugtalk.go"), hrp.PluginGoSourceFile) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) // specify path with the same dir _, err = hrp.LocateFile(tmpl("plugin/debugtalk.py"), hrp.PluginGoSourceFile) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) // specify target file path dir _, err = hrp.LocateFile(tmpl("plugin/"), hrp.PluginGoSourceFile) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) // specify wrong path _, err = hrp.LocateFile(".", hrp.PluginGoSourceFile) - if !assert.Error(t, err) { - t.Fatal() - } + assert.Error(t, err) _, err = hrp.LocateFile("/abc", hrp.PluginGoSourceFile) - if !assert.Error(t, err) { - t.Fatal() - } + assert.Error(t, err) } func TestLocatePythonPlugin(t *testing.T) { _, err := hrp.LocatePlugin(tmpl("plugin/debugtalk.py")) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) } func TestLocateGoPlugin(t *testing.T) { @@ -50,7 +38,5 @@ func TestLocateGoPlugin(t *testing.T) { defer removeHashicorpGoPlugin() _, err := hrp.LocatePlugin(tmpl("debugtalk.bin")) - if !assert.Nil(t, err) { - t.Fatal() - } + assert.Nil(t, err) } diff --git a/tests/testcase_test.go b/tests/testcase_test.go index 019cd486..fd9d8924 100644 --- a/tests/testcase_test.go +++ b/tests/testcase_test.go @@ -13,7 +13,7 @@ const ( // tmpl returns template file path func tmpl(relativePath string) string { - return filepath.Join("internal/scaffold/templates/", relativePath) + return filepath.Join("../internal/scaffold/templates/", relativePath) } var ( diff --git a/uixt/android_driver_adb.go b/uixt/android_driver_adb.go index f4290366..1026ce7c 100644 --- a/uixt/android_driver_adb.go +++ b/uixt/android_driver_adb.go @@ -314,11 +314,11 @@ func (ad *ADBDriver) TapAbsXY(x, y float64, opts ...option.ActionOption) error { func (ad *ADBDriver) DoubleTap(x, y float64, opts ...option.ActionOption) error { var err error - actionOptions := option.NewActionOptions(opts...) x, y, err = convertToAbsolutePoint(ad, x, y) if err != nil { return err } + actionOptions := option.NewActionOptions(opts...) x, y = actionOptions.ApplyOffset(x, y) // adb shell input tap x y diff --git a/uixt/driver_ext/browser_sub_driver.go b/uixt/driver_ext/browser_sub_driver.go index 0e2bf989..c57c7e25 100644 --- a/uixt/driver_ext/browser_sub_driver.go +++ b/uixt/driver_ext/browser_sub_driver.go @@ -4,9 +4,10 @@ import ( "encoding/json" "net/http" + "github.com/pkg/errors" + "github.com/httprunner/httprunner/v5/uixt" "github.com/httprunner/httprunner/v5/uixt/option" - "github.com/pkg/errors" ) type StubBrowserDriver struct {