如何在Shirates中使用屏幕昵称
#android #ios #appium #testautomation

本文是如何使用Shirates的介绍,一种移动测试自动化工具。

屏幕昵称

在Shirates中,您可以将屏幕昵称定义为JSON文件。屏幕昵称使测试代码可读且富有成效。

屏幕昵称功能


材料

您可以从[https://github.com/wave1008/shirates-samples-nicknames]获得完整的示例项目。


示例1:计算器

  • 开始 Android Emulator
  • 启动计算器 app。

Start Android Emulator

  • 启动 Appium Inspector
  • 捕获计算器 app。

Launch Appium Inspector

  • testConfig/screens/calculator目录下创建[Calculator Main Screen].json

[Calculator Main Screen].json

  • 使用 Appium Inspector 检查屏幕元素,编辑屏幕昵称文件如下。

[计算器主屏幕] .json

{
  "key": "[Calculator Main Screen]",

  "identity": "[AC][()]",

  "selectors": {
    "[formula]": "#formula",
    "[result final]": "#result_final",
    "[result preview]": "#result_preview",

    "[√]": "#op_sqrt",
    "[π]": "#const_pi",
    "[^]": "#op_pow",
    "[!]": "#op_fact",

    "[AC]": "#clr",
    "[()]": "#parens",
    "[%]": "#op_pct",

    "[÷]": "#op_div",
    "[×]": "#op_mul",
    "[-]": "#op_sub",
    "[+]": "#op_add",
    "[=]": "#eq",
    "[⌫]": "#del",

    "[0]": "#digit_0",
    "[1]": "#digit_1",
    "[2]": "#digit_2",
    "[3]": "#digit_3",
    "[4]": "#digit_4",
    "[5]": "#digit_5",
    "[6]": "#digit_6",
    "[7]": "#digit_7",
    "[8]": "#digit_8",
    "[9]": "#digit_9",
    "[.]": "#dec_point"
  }

}

您可以在运行测试中标识带有Identity "[AC][()]"的Identity "[AC][()]"的屏幕。
例如,您可以断言当前屏幕是[Calculator Main Screen]

it.screenIs("[Calculator Main Screen]")

计算

以下是无需或使用屏幕昵称文件的计算器测试代码。如果没有屏幕昵称文件,则必须使用低级标识符,例如Resource-ID。另一方面,如果使用屏幕昵称文件,您可以使用摘要屏幕昵称/选择器昵称

package calculator

import org.junit.jupiter.api.Test
import shirates.core.driver.commandextension.*
import shirates.core.testcode.UITest

class CalculatorTest : UITest() {

    @Test
    @Order(10)
    fun withoutNickname() {

        scenario {
            case(1) {
                condition {
                    it.tapAppIcon("Calculator")
                }.expectation {
                    it.exist("#clr")
                    it.exist("#parens")
                }
            }
            case(2) {
                action {
                    it.tap("#clr")
                }.expectation {
                    it.select("#formula")
                        .textIsEmpty()
                    it.select("#result_preview")
                        .textIsEmpty()
                }
            }
            case(3) {
                action {
                    it.tap("#digit_1")
                }.expectation {
                    it.select("#formula")
                        .textIs("1")
                    it.select("#result_preview")
                        .textIsEmpty()
                }
            }
            case(4) {
                action {
                    it.tap("#op_add")
                }.expectation {
                    it.select("#formula")
                        .textIs("1+")
                    it.select("#result_preview")
                        .textIsEmpty()
                }
            }
            case(5) {
                action {
                    it.tap("#digit_2")
                }.expectation {
                    it.select("#formula")
                        .textIs("1+2")
                    it.select("#result_preview")
                        .textIs("3")
                }
            }
            case(6) {
                action {
                    it.tap("#eq")
                }.expectation {
                    it.select("#result_final")
                        .textIs("3")
                }
            }
        }
    }

    @Test
    @Order(20)
    fun withNickname() {

        scenario {
            case(1) {
                condition {
                    it.tapAppIcon("Calculator")
                }.expectation {
                    it.screenIs("[Calculator Main Screen]")
                }
            }
            case(2) {
                action {
                    it.tap("[AC]")
                }.expectation {
                    it.select("[formula]")
                        .textIsEmpty()
                    it.select("[result preview]")
                        .textIsEmpty()
                }
            }
            case(3) {
                action {
                    it.tap("[1]")
                }.expectation {
                    it.select("[formula]")
                        .textIs("1")
                    it.select("[result preview]")
                        .textIsEmpty()
                }
            }
            case(4) {
                action {
                    it.tap("[+]")
                }.expectation {
                    it.select("[formula]")
                        .textIs("1+")
                    it.select("[result preview]")
                        .textIsEmpty()
                }
            }
            case(5) {
                action {
                    it.tap("[2]")
                }.expectation {
                    it.select("[formula]")
                        .textIs("1+2")
                    it.select("[result preview]")
                        .textIs("3")
                }
            }
            case(6) {
                action {
                    it.tap("[=]")
                }.expectation {
                    it.select("[result final]")
                        .textIs("3")
                }
            }
        }
    }
}

测试结果

在没有屏幕昵称和的情况下,与屏幕昵称一起查看和比较。您可以发现带有屏幕昵称更容易理解。

_Report(simple).html

Comparison Html

CalculatorTest@a.xlsx

Comparison Spec-Report


结论

在Shirates中,您可以将屏幕昵称定义为JSON文件。屏幕昵称使测试代码可读且富有成效。