测试人社区

勇敢发问,appium0216作业3断言感觉写得不太对(附个人思路)

作业3

添加某只股票到自选,然后再次搜索并验证,股票已经加入自选。(不要使用文字内容判断,使用get attribute)
帖子地址:https://testerhome.com/topics/22235

思寒给的要求是:不要使用文字内容判断,使用get attribute。

我猜想这么做的初衷是担心“已添加”这个按钮名字改变,所以最好选择一个不容易变化的属性来判断。

助教的做法是:通过“已添加”的resource-id属性“followed_btn”定位到该元素,再通过get_attribute获取到text属性,断言text属性是否等于”已添加“

这么做可能会有2个问题:

  1. 假如没有添加成功,定位“followed_btn”的时候一定会报错
  2. 假如添加成功,但是按钮的text改变,也会断言失败

我的思路是:通过层级关系获取该按钮的父元素,再取子元素,再通过get_attribute获取resource-id属性,判断是否等于"followed_btn"。

重新写了下断言,case可以跑通过

followed_button = self.driver.find_element(
            By.XPATH,
            '//*[@text="09988"]/../../..//*[contains(@resource-id,"add_attention")]//*[contains(@class,"TextView")]'
        )
assert "followed_btn" in followed_button.get_attribute('resource-id')

对事不对人,欢迎一起讨论~

1 Like

使用 contains 包含follow的xpath表达式就可以了,这样无论是followed还是follow都可以定位到,然后再用getattribute。

助教的确想的太简单了,没理解我上期的作业答案。给你点个赞。

这个写法精简好多!我想复杂了点哈哈~谢谢思寒大佬~~ :blush:

:+1: 谢谢宝贵建议,确实应该要考虑到这个问题,我只定位了follow_ed,可以选用follow,也可以利用异常来判断

“利用异常来判断”,你的意思是,用“已添加”来断言,如果断言失败,刚好也验证了开发代码有改动,或者case跑不通过,是吗?

对,只是一个临时想法,异常可以封装到装饰器