设置等待时间
- 硬等待: 不管结果真么样等待时间一过立马执行以后代码
// 线程休眠5秒
Thread.sleep(5000)
-
每条语句等待: 每一个WebUI.方法都等待一段时间,这就要手动设置一下了。
路径 project → settings → Execution → Web Ui → delay Between actions……
单位是秒钟,默认:0,设置了之后,每条语句都会隔几秒在执行!
-
隐式等待: 有条件性的等待比如等待页面加载10秒钟,5 秒钟页面加载完成,开始执行下面代码,10 秒之后页面还是没有加载完成也执行后面代码!
WebUI 先说一下 webUi这个对象里面的方法的共同的一个特点。详细的都有什么第四章再介绍。下面的介绍的都是不带FailureHandling参数的方法。
// WebUI 的函数中每个方法都有一个重写的方法FailureHandling 失败之后测处理方式,默认终止当前Case。
// WebUI.waitForAlert(int timeOut, FailureHandling flowControl)
// WebUI.waitForAlert(int timeOut)
WebUI.waitForAlert(5000 , FailureHandling.STOP_ON_FAILURE)
WebUI.waitForAlert(5000)
说道重点了↓ 这可是一大片的代码,做好心理准备。
WebUI.openBrowser(null)
// 等待警报出现
WebUI.waitForAlert(5000)
//等待Angular/ajax在第二个单元中的给定时间内加载。
WebUI.waitForAngularLoad(5000)
// 等待,直到给定的web元素具有特定名称和值的属性。
WebUI.waitForElementAttributeValue(TestObject to, String attributeName, String attributeValue, int timeOut)
//等待给定的元素在给定的时间内单击(以秒为单位)。
WebUI.waitForElementClickable(TestObject to, int timeOut)
//等待,直到给定的web元素具有特定名称的属性。
WebUI.waitForElementHasAttribute(TestObject to, String attributeName, int timeOut)
//等待给定的元素在给定的时间内不可单击(以秒为单位)。
WebUI.waitForElementNotClickable(TestObject to, int timeOut)
// 等待,直到给定的web元素没有具有特定名称的属性
WebUI.waitForElementNotHasAttribute(TestObject to, String attributeName, int timeOut)
// 等待给定的元素在第二个单元中的给定时间内不出现(消失)。
WebUI.waitForElementNotPresent(TestObject to, int timeOut)
//等待,直到给定的web元素在超时时间内不可见。
WebUI.waitForElementNotVisible(TestObject to, int timeOut)
//等待给定的元素在给定的时间内出现在第二个单元中。
WebUI.waitForElementPresent(TestObject to, int timeOut)
//等待,直到给定的web元素在超时内可见。
WebUI.waitForElementVisible(TestObject to, int timeOut)
//等待图像出现在页面上
WebUI.waitForImagePresent(TestObject to, int timeOutInSeconds)
// 等待jQuery在第二个单元中的给定时间内加载。
WebUI.waitForJQueryLoad(int seconds)
// 等待网页在第二个单元中的给定时间内加载。
WebUI.waitForPageLoad(int seconds)
WebUI.closeBrowser()
断言
断言就简单了,就一个关键字,assert
// assert 需要一个条件表达式 ,返回结果是True 或者 False
// 断言通过
assert 1 == 1
// 断言失败
assert 1 != 1
// 断言通过
assert true
// 断言失败
assert false
还有其他验证方法,等我研究明白了在补充!
先给你网址:https://docs.katalon.com/katalon-studio/docs/verification-snippets.html#list-of-available-verification-snippets 我是通过这个网址研究的!
调试脚本
录制完脚本后一运行,之后报错!
在调试前先给代码打上断点。在没行代码的行首双击就可以了!
使用调试功能对脚本进行调试,按F6方代码一步一步执行,看代码执行到哪里为什么报错!
第一次调试会有一个提示窗口,让你进入调试界面。(我忘了截图了)
也可以通过下图方块位置 来回切换 编码视图和调试视图
你们写的代码你们去调试吧,我的问题是,录制脚本的时候,多个图片保存成一个对象了,因为对象操作不对所以才出问题!
就是这里,这里应该点击订票按钮,结果点击了退出按钮!
踩坑了!!! TMD 这个气人,我感觉我应该找个没有frame的网站做测试了!这个真心难受!
第三个 freme 框架读对象需要自己定义,这要是真的测试要多久才行!
用例前置函数与后置函数
在Test Case 中写的函数
每一个前置函数都有一个参数skipped 默认是跳过的,需要手动修改成 false 让他不跳过。
不多说,直接看代码!
import com.kms.katalon.core.annotation.SetUp
import com.kms.katalon.core.annotation.TearDown
import com.kms.katalon.core.annotation.TearDownIfError
import com.kms.katalon.core.annotation.TearDownIfFailed
import com.kms.katalon.core.annotation.TearDownIfPassed
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
// 当次用例执行前执行的函数
@SetUp(skipped = false)
void setup(){
WebUI.openBrowser('')
this.println("@SetUp run")
}
// 随便录制的一个用例
WebUI.navigateToUrl('http://127.0.0.1:1080/WebTours/')
WebUI.setText(findTestObject('Object Repository/Page_Web Tours/input_Username_username'), 'jack')
WebUI.setEncryptedText(findTestObject('Object Repository/Page_Web Tours/input_Password_password (1)'), 'HeCM15nHKBI=')
WebUI.click(findTestObject('Object Repository/Page_Web Tours/input_Password_login'))
def String welComeUserName = WebUI.getText(findTestObject('Object Repository/Page_Web Tours/b_jack'))
assert welComeUserName.contains('jack')
// 当次用例执行后结果为失败执行的函数
@TearDownIfFailed(skipped = false)
void TearDownIfFailed(){
this.println("@TearDownIfFailed run")
}
// 当次用例执行后结果为错误执行的函数
@TearDownIfError(skipped = false)
void TearDownIfError(){
this.println("@TearDownIfError run")
}
// 当次用例执行后结果为通过执行的函数
@TearDownIfPassed(skipped = false)
void TearDownIfPassed(){
this.println("@TearDownIfPassed run")
}
// 当次用例执行后不管结果执行的函数
@TearDown(skipped = false)
void TearDown(){
WebUI.closeBrowser()
this.println("@TearDown run")
}
在Test Suites 中写的函数
/**
* test suite 执行前执行的函数
*/
@SetUp(skipped = false) // Please change skipped to be false to activate this method.
def setUp() {
this.println("suite in @@SetUp run")
}
/**
* test suites 执行后执行的函数
*/
@TearDown(skipped = false) // Please change skipped to be false to activate this method.
def tearDown() {
this.println("suite in @@TearDown run")
}
/**
* 运行每个 test case前执行的函数
*/
@SetupTestCase(skipped = false) // Please change skipped to be false to activate this method.
def setupTestCase() {
this.println("suite in @@SetupTestCase run")
}
/**
* 每个 test case运行后执行的函数
*/
@TearDownTestCase(skipped = false) // Please change skipped to be false to activate this method.
def tearDownTestCase() {
this.println("suite in @@TearDownTestCase run")
}
执行结果:
黄色线是 在 test Case 中写的函数
红色线是 在 test Suites 中写的函数
转载https://blog.csdn.net/weixin_43664254/article/details/89491130