略显尴尬,做 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 是可以设置用例超时时间的