• 略显尴尬,做 UI 自动化的同行,难道不做查询的黑盒测试?

  • 公众号上回复了,感觉那个不太好交流,在这边重新发一遍吧。
    个人观点:
    感觉完全可以把检验模块和请求过程进行解耦,检验代码不应依托于具体的某类接口。所以我觉得可以把检验模块独立出来,做成一个引擎。不管任何接口,他们的工作模式都是一样的,完全可以把各步骤拆分为类似于引擎的,这样只往引擎中添加新需求,而不会否定整个框架。

  • 这是等待对象出现的方法:

    /**
         * 等待对象出现
         * 
         * @param type
         *            对象类型:id,name,css,xpath,class,linktext,tagname,partialLinkText
         * @param value
         *            对象的值
         * @param iTimeout
         *            超时时间
         * @return FALSE:对象未在规定时间内出现 TRUE:对象在规定时间内出现
         */
        public boolean dynamicWaitAppear(WebElementType type, String value, Integer iTimeout) {
            try {
                switch (type) {
                case ID:
                    new WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(By.id(value)));
                    break;
                case NAME:
                    new WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(By.name(value)));
                    break;
                case CSS:
                    new WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(value)));
                    break;
                case XPATH:
                    new WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(By.xpath(value)));
                    break;
                case CLASS:
                    new WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(By.className(value)));
                    break;
                case LINKTEXT:
                    new WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(By.linkText(value)));
                    break;
                case TAGNAME:
                    new WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(By.tagName(value)));
                    break;
                case PARTIALLINKTEXT:
                    new WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(By.partialLinkText(value)));
                    break;
                default:
                    break;
                }
    
                String message = "等待对象" + value + "出现成功.";
                LogHelper.LogMessage(Variable.DONE, "WebManager.DynamicWaitAppear", message);
            } catch (Exception ex) {
                String screenshot = LogHelper.Capscreenshot();
                String message = "等待对象" + value + "出现失败.错误详情请见:" + screenshot;
                LogHelper.LogMessage(Variable.FAILD, "WebManager.DynamicWaitAppear", message);
                softAssert.assertFalse(true);
            }
            return true;
        }
    
  • 不知道为什么要想的如此复杂,selenium 提供的方法就可以解决啊。

    WebDriverWait(webDriver, Integer.valueOf(iTimeout))
                            .until(ExpectedConditions.presenceOfElementLocated(webelement(ID,xpath,name,css等等));
    

    这个方法用于,动态等待对象出现,如果在设置的时间段内没有出现,即返回 false。
    所以,你用 get(url) 之后,直接加上这个方法,判断跳转的登录页面是否出现了某元素。
    贴一段我的登录代码:

    /**
     * 登录
     * 
     */
    public void login(String url, String email, String pwd) {
        // 打开登录网址
        webManager.NavigateTo(url);
        webManager.threadWait(3);
        // 浏览器最大化
        webManager.maximizeBroswer();
        webManager.threadWait(1);
        // 等待登录页面用户名输入框出现,60秒未出现则按超时处理
        webManager.dynamicWaitAppear(WebElementType.ID, "email", 60);
        // 输入用户名
        webManager.sendKeys(WebElementType.ID, "email", email);
        webManager.threadWait(1);
        // 输入密码
        webManager.sendKeys(WebElementType.ID, "pwd", pwd);
        webManager.threadWait(1);
        // 输入验证码
        webManager.sendKeys(WebElementType.ID, "jcaptcha", "1");
        webManager.threadWait(1);
        // 单击登录按钮
        webManager.click(WebElementType.ID, "login");
        webManager.threadWait(2);
    }
    
  • 离职无非 2 方面的原因,
    内在 (个人发展、工资等)
    外在 (环境、上下级关系)
    委婉、如实回答就好,忌讳抱怨

  • 今年给自己多发几个月,哈哈

  • 现在也做测试开发,自己写过 UI 和接口的框架(一个人写,因为现在公司只有我一个人做自动化),使用 java+testNG+maven+reportNG 实现,6 年开发经验和 1 年半测试开发经验。不过学历不是非全日制学历,不知能否有机会?

  • 百度 reportNG,以及自定义 reportNG 样式等主题,有很多答案。
    以前碰到过同样的问题,自己修改 reportNG 中的源码后,可以显示中文

  • 没有使用测试框架吗?比如 testNG 之类的,我知道 TESTNG 是可以设置用例超时时间的