• #3 楼 @luis 我点了更新但是提示我版本是最新的了。是需要重新下载吗?

  • #2 楼 @neyo 额,谢谢!早知道直接在社区里搜了。。。一个人埋头坑此坑次的搞,终于搞定问题了发出来给大家共享。。。没想到社区已经有人发了

  • #1 楼 @chenhengjie123
    Appium
    我的是这样的,我用了客户端的检查最新版本,没有提示我更新,应该是最新的了?或者官方更新了要重新下?


    你说的是对的,启动参数要求用 8.4,但是我的 xcode 里面只有 9.3 的模拟器,所以启动报错了,最后是下的 8.4 版本的模拟器正常启动了。

  • 原来 MonkeyRunner 还可以这样用。我研究了一段时间发现只能点坐标,然后我就放弃了 MonkeyRunner。感谢 1 楼的分享。话说我不懂回帖怎么 @ 人= =!

  • LZ 说的是哪个端?IOS 是有自带的方法:

    desired_capabilities={
                    'app': app,
                    'platformName': 'iOS',
                    'deviceName': 'iPhone 6',
                    'autoAcceptAlerts': 'true',
                })
    

    'autoAcceptAlerts': 'true',这句话就是自动接收系统权限的方法。如果是安卓,就等弹出之后捕获元素丢到 try 里面去处理吧

  • 楼主要的是点击 click 之后执行下一步的时候进行智能等待,发现元素了就再去执行方法,没发现元素就等待。不知道我有没有理解错误,如果我没有理解错误,我的实现方案是这样的:

    from selenium.webdriver.support.ui import WebDriverWait
    
    def find_element(self, *loc):
            """
            定位元素,定位正确后返回元素的信息,外部调用传入元组参数必须有*,
            例如:
            find_element(*self.native_caixun)
    
            :param loc: 元组类型,结构必须是(By.NAME, u'财讯')
            :return: element
            """
            try:
                element = WebDriverWait(self.driver, 30).until(lambda x: x.find_element(*loc))
                return element
            except NoSuchElementException, e:
                print 'Error details :%s' % (e.args[0])
    
        def find_elements(self, *loc):
            """
            定位元素,定位正确后返回元素的信息,外部调用传入元组参数必须有*,
            例如:
            find_elements(*self.native_caixun)
    
            :param loc: 元组类型,结构必须是(By.NAME, u'财讯')
            :return: elements
            """
            try:
                # return self.driver.find_elements(*loc)
                elements = WebDriverWait(self.driver, 10).until(lambda x: x.find_elements(*loc))
                return elements
            except NoSuchElementException, e:
                print 'Error details :%s' % (e.args[0])
    

    这样执行的好处就是每次找元素的时候都会智能等待 30 秒。超过 30 秒则超时报错。下面是我自己封装的方式:

    def clickHangQing(self):
            """
            点击导航栏的行情按钮
            :return: None
            """
            self.find_element(*self.native_hangqing).click()
    
        def clickEditSelect(self):
            """
            点击编辑自选,进入编辑自选页面
            :return: None
            """
            self.find_elements(*self.edit_select)[0].click()
    
        def clickFindStock(self):
            """
            点击放大镜,进入查询自选股界面
            :return: None
            """
            self.find_elements(*self.edit_select)[1].click()
    

    这样实现起来就无需考虑网络等原因造成的不必要的硬等待,都会智能等待 30 秒。

  • appium 到底有什么优势? at 2016年05月05日

    #18 楼 @codeskyblue 恩,我先按线性走代码写了完整的一个流程,然后才转 PO 的,我本来是没有基础的,都是从头开始,Python 也是从头开始学的,总之加油吧。慢慢写下去总会懂的

  • appium 到底有什么优势? at 2016年05月04日

    好像还好吧,如果是 dmg 或者 exe,直接就可以用了,安装命令行也就是几小时的事情,并不复杂。

    我从没接触过 Appium 到现在能写出 PO 的测试案例,总共也就话了一个月,写的不见得多好,但是起码能跑起来,文档的话也不是很难,感觉 LZ 是没有真正动手去写吧。

  • #3 楼 @debugtalk 噢噢噢,我看错了

  • 有时间试试,我之前用的是'adb shell cat /proc/pid/net/dev | grep wlan0'这个方法获取的流量,每次都要清空数据,并且杀掉其他所有可能会使用流量的进程,有点麻烦。感谢分享!!

    不过有一个问题想请教一下,如果这个 APK 是首次安装,那么这样通过 PID 获取会不会出问题?首次安装的 APK 好像没有 PID,不知道我有没有记错

  • #11 楼 @qwerty 明白了,非常感谢

  • #9 楼 @qwerty 不好意思我没太明白,是指用 GUI 来设置所有元素的参数吗?

  • #4 楼 @abcfleeting 你倒是说呀,我这强迫症看着好难受

  • #6 楼 @jamesparagon 一起加油

  • #3 楼 @pacerron 我想想要怎么修改,现在每一个测试用例都是单独的,除了调用基类的东西基本上没有做复用,就像
    #1 楼 @jacexh 说的那样,代码写的还不够抽象

  • #1 楼 @jacexh 刚好那部分需要用截图处理,其他部分还没传到 github 上

    def testJiangXu(self):
            """测试自选页面降序排列"""
            num = self.getLength() - 1
            self.clickNameNum()
            a = 999999
            for x in range(num):
                try:
                    int(self.getStockNum(x))
                    self.assertTrue(int(a) > int(self.getStockNum(x)))
                    a = self.getStockNum(x)
                except ValueError:
                    pass
    
        def testShengXu(self):
            """测试自选页面升序排列"""
            num = self.getLength() - 1
            self.clickNameNum()
            self.clickNameNum()
            a = 0
            for x in range(num):
                try:
                    int(self.getStockNum(x))
                    self.assertTrue(int(a) < int(self.getStockNum(x)))
                    a = self.getStockNum(x)
                except ValueError:
                    pass
    

    我自己的代码大概是这样的。

    2、你的 pageobject 不够抽象,感觉还是过程式的代码

    我也是这么觉得的,所以才想请教一下这部分要怎么处理

    3、可以增加 Action 层,把常用的点击流程封装起来

    这部分我是这么处理的

    def clickHangQing(self):
            """
            点击导航栏的行情按钮
            :return: None
            """
            self.find_element(*self.native_hangqing).click()
    
        def clickEditSelect(self):
            """
            点击编辑自选,进入编辑自选页面
            :return: None
            """
            self.find_elements(*self.edit_select)[0].click()
    
        def clickFindStock(self):
            """
            点击放大镜,进入查询自选股界面
            :return: None
            """
            self.find_elements(*self.edit_select)[1].click()
    
        def clickZiXuan(self):
            """
            点击行情页面的自选
            :return: None
            """
            if self.get_title() != u'行情':
                try:
                    self.clickHangQing()
                except Exception as e:
                    print e
                    print '行情导航栏无法点击,请检查APP的状态'
            else:
                self.find_element(*self.zixuan).click()
    

    但是感觉耦合性还是比较差。

  • 好吧,我好像是第二个填的

  • TesterHome [性能专项] 系列 at 2016年03月02日

    非常期待,周末时间太少了,没办法来看直播,好可惜,还好有视频,希望有一个周末我也可以安静的坐下来看直播

  • 看完了我只能说佩服,今年 26.希望在 33 的时候也能和达到这样的高度

  • 赞,回复 mark,抽空学习一下

  • 请使用微信扫描二维码以登录
    成功扫描,请在手机上点击确认以登录
    正在登录...
    通讯录共 97 位好友
    开始查找...
    [ ########## ] (当前,你被 2 人删除,好友共 97 人
    ---------- 被删除的好友列表 ----------
    追梦
    阿奔

    A 蕊希

    回车键结束

    还是有 BUG 的,统计的明显不正确

  • #10 楼 @hxhapppppy 恩恩,互相学习