• 请问是开源的吗

  • 不行

  • 谢谢你的建议,之前遇到这个问题,我就有这方面的意向,但是没有找到比较合适的教程,尝试下载了一个很常见的用于自动化测试的 iOS 的 demo 源代码,但是当时看了还是一头雾水,确实是需要再找找资料把这方面的基础补充一下。

  • 谢谢,我去确认一下这个方面的可能性。

  • login_tests_json_report = "./outputs/reports"
    login_tests_html_report = "./outputs/reports/login"
    pytest.main(["-m login", f"--alluredir={login_tests_json_report}", "--clean-alluredir"])
    pytest.main(["--lf", f"--alluredir={login_tests_json_report}"])
    os.system(f"allure generate {login_tests_json_report} -o {login_tests_html_report} --clean")
    os.system(f"allure serve {login_tests_json_report}")
    

    一次 clean alluredir,一次不 clean
    另外下面的--clean 不能删

  • 不是,输入新的值,即用 send_keys(),它是在已有的内容后面添加(这确实是 clear 的问题,我也确实可以用其他方法解决)。

    但是,我的意思是,我发现无法获取用户在输入框输入的值,并且对 qq 等 app 进行了验证,也问了公司 app 的开发,说输入框中的值存在于 text 中,然而公司的 app 打印出来为空,而 qq 的情况如上面所示(取得是 value 属性的值)。而且输入新的值后,再获取 text,是空的。

    我是问的这个情况。

  • 请问为何我去获取这个输入框的 text,会出现 11 楼我说的那种情况?

  • 可以看一下这个 page_source :

    <?xml version="1.0" encoding="UTF-8"?><AppiumAUT><XCUIElementTypeApplication type="XCUIElementTypeApplication" name="QQ" label="QQ" enabled="true" visible="true" accessible="false" x="0" y="0" width="375" height="667" index="0">
      <XCUIElementTypeWindow type="XCUIElementTypeWindow" enabled="true" visible="true" accessible="false" x="0" y="0" width="375" height="667" index="0">
        <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" accessible="false" x="0" y="0" width="375" height="667" index="0">
          <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" accessible="false" x="0" y="0" width="375" height="667" index="0">
            <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" accessible="false" x="0" y="0" width="375" height="667" index="0">
              <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" accessible="false" x="0" y="0" width="375" height="667" index="0">
                <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" accessible="false" x="0" y="0" width="375" height="667" index="0">
                  <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="false" accessible="false" x="0" y="0" width="375" height="667" index="0"/>
                  <XCUIElementTypeImage type="XCUIElementTypeImage" name="登录界面" label="登录界面" enabled="true" visible="false" accessible="true" x="0" y="0" width="375" height="667" index="1"/>
                  <XCUIElementTypeImage type="XCUIElementTypeImage" enabled="true" visible="true" accessible="false" x="0" y="0" width="375" height="667" index="2"/>
                  <XCUIElementTypeImage type="XCUIElementTypeImage" enabled="true" visible="false" accessible="false" x="133" y="108" width="109" height="51" index="3"/>
                  <XCUIElementTypeOther type="XCUIElementTypeOther" name="帐号框" enabled="true" visible="true" accessible="false" x="40" y="190" width="295" height="56" index="4">
                    <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" accessible="false" x="40" y="190" width="295" height="56" index="0"/>
                    **<XCUIElementTypeTextField type="XCUIElementTypeTextField" value="QQ号/手机号/邮箱" name="帐号" label="" enabled="true" visible="true" accessible="true" x="102" y="190" width="170" height="56" index="1"/>**
                    <XCUIElementTypeButton type="XCUIElementTypeButton" name="帐号列表" label="帐号列表" enabled="true" visible="true" accessible="true" x="292" y="190" width="25" height="56" index="2"/>
                    <XCUIElementTypeButton type="XCUIElementTypeButton" name="头像" label="头像" enabled="false" visible="false" accessible="false" x="50" y="198" width="40" height="40" index="3">
                      <XCUIElementTypeImage type="XCUIElementTypeImage" enabled="true" visible="false" accessible="false" x="50" y="198" width="40" height="40" index="0"/>
                    </XCUIElementTypeButton>
                  </XCUIElementTypeOther>
                  <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="true" accessible="false" x="40" y="258" width="295" height="56" index="5">
                    <XCUIElementTypeSecureTextField type="XCUIElementTypeSecureTextField" value="输入密码" name="密码" label="" enabled="true" visible="true" accessible="true" x="90" y="258" width="195" height="56" index="0"/>
                  </XCUIElementTypeOther>
                  <XCUIElementTypeButton type="XCUIElementTypeButton" name="登录按钮" label="登录" enabled="true" visible="true" accessible="true" x="152" y="371" width="71" height="71" index="6"/>
                  <XCUIElementTypeButton type="XCUIElementTypeButton" name="手机号登录" label="手机号登录" enabled="true" visible="true" accessible="true" x="47" y="585" width="62" height="26" index="7"/>
                  <XCUIElementTypeButton type="XCUIElementTypeButton" enabled="true" visible="true" accessible="false" x="135" y="593" width="2" height="10" index="8"/>
                  <XCUIElementTypeButton type="XCUIElementTypeButton" name="找回密码" label="找回密码" enabled="true" visible="true" accessible="true" x="162" y="585" width="51" height="26" index="9"/>
                  <XCUIElementTypeButton type="XCUIElementTypeButton" enabled="true" visible="true" accessible="false" x="239" y="593" width="2" height="10" index="10"/>
                  <XCUIElementTypeButton type="XCUIElementTypeButton" name="新用户注册" label="新用户注册" enabled="true" visible="true" accessible="true" x="266" y="585" width="62" height="26" index="11"/>
                </XCUIElementTypeOther>
              </XCUIElementTypeOther>
            </XCUIElementTypeOther>
          </XCUIElementTypeOther>
        </XCUIElementTypeOther>
      </XCUIElementTypeWindow>
      <XCUIElementTypeWindow type="XCUIElementTypeWindow" enabled="true" visible="false" accessible="false" x="0" y="0" width="375" height="667" index="1">
        <XCUIElementTypeOther type="XCUIElementTypeOther" enabled="true" visible="false" accessible="false" x="0" y="0" width="375" height="667" index="0"/>
      </XCUIElementTypeWindow>
      <XCUIElementTypeWindow type="XCUIElementTypeWindow" enabled="true" visible="false" accessible="false" x="0" y="0" width="375" height="667" index="2">
        <XCUIElementTypeStatusBar type="XCUIElementTypeStatusBar" enabled="true" visible="false" accessible="false" x="0" y="0" width="375" height="20" index="0"/>
      </XCUIElementTypeWindow>
    </XCUIElementTypeApplication></AppiumAUT>
    

    加粗部分是我取的元素,我想我应该没有取错?

    print("2", driver.find_element_by_ios_predicate('name == "帐号"').text)
    
  • 关于第二条的补充:
    用腾讯 qq 进行测试,也是和我用公司软件测试一样,测试脚本:

    sleep(10)
    print("1", driver.find_element_by_ios_predicate('name == "帐号"').text)
    driver.find_element_by_ios_predicate('name == "帐号"').clear()
    print("2", driver.find_element_by_ios_predicate('name == "帐号"').text)
    driver.find_element_by_ios_predicate('name == "帐号"').send_keys("123456")
    print("3", driver.find_element_by_ios_predicate('name == "帐号"').text)
    

    输出结果:

    1 QQ号/手机号/邮箱  # 说明这里text取得是value
    2 QQ号/手机号/邮箱  # 我看了app,这里clear无效了
    3    # 这个地方,是在默认的qq号后面连着添加的
    

    APP Inpector:

    开始怀疑自己是不是真的哪里做的不对?还是这是常见现象

  • 这不是 ios 的自带键盘吗

  • 这就是完整的键盘,上面没有一行,我知道,有的上面有一个 Done,但是我的没有

  • 开发和我都不知道怎么弄

  • 好的,我试试。谢谢你

  • 这两句生成 allure 报告,请问如果注释掉如何生成呢

  • 是我写的哪里不对吗?

  • 你可以看到我上面的问题是你写的方式,但是,遇到了 allure 报告无法获取到前面一次的执行结果的问题

  • 请问 clear 无效的情况遇到过吗

  • 而且对输入框 clear() 无效,appium ios 坑这么多的吗 😭

  • 请问如何设置?我搜到的关于这个的资料比较少。

  • 谢谢!!

  • 尝试了 element.send_keys("\n") 也没有用。

  • 我尝试了,但是 allure 报告中只会出现第二次的部分错误的测试用例,不会出现所有的测试用例。如( https://testerhome.com/topics/30265 )所展示的报告。请问是我的命令哪里写的不对吗,还是这是 pytest 的一个缺陷。

  • pytest-xdist 我没有注意过,因为我觉得 ui 自动化测试应该无法实现分布式,参数--looponfail 可以直接用吗,另外,最重要的是,这个可以和 allure 结合嘛

  • 我想问一下,怎么实现所有用例跑完之后再将失败了的用例重跑一次?我发现 pytest-rerunfailures 是一个用例失败之后马上重跑的

  • 不好意思,被网上的资料误导了,我懂了,插件 pytest-repeat 没有 reruns 这个参数