katalon系列十六:代码运行时实时创建元素对象或列表

Katalon的常规方法是先抓取元素并保存到仓库,在脚本中需要用到的时候调取,但假如元素属性和个数是可变的,就不能事先保存到仓库了,需要在脚本运行时实时创建。

 

一、代码运行时,实时创建一个元素对象的例子

 1 import com.kms.katalon.core.testobject.ConditionType
 2 import com.kms.katalon.core.testobject.TestObject
 3 import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
 4 
 5 String dynamicId = 'Katalon123'
 6 String xpath = '//div[@id="' + dynamicId + '"]'
 7 TestObject to = new TestObject("objectName")
 8 to.addProperty("xpath", ConditionType.EQUALS, xpath)
 9 WebUI.click(to)
10 
11 //'Change selection method from another selector to XPATH selector'
12 element.setSelectorMethod(SelectorMethod.XPATH)
13 
14 //'Change value of CSS selector'
15 element.setSelectorValue(SelectorMethod.CSS, 'your_desired_value')

 

二、但如果是有一组对象需要点击呢?比如每次页面生成不等的button,全部要点击一遍。

 1 import org.openqa.selenium.WebDriver as Webdriver
 2 import org.openqa.selenium.WebElement as WebElement
 3 import org.openqa.selenium.By as By
 4 import com.kms.katalon.core.webui.driver.DriverFactory as DriverFactory
 5 
 6 //'获取driver'
 7 Webdriver driver = DriverFactory.getWebDriver()
 8 //'查找一组元素对象'
 9 List elementsList = driver.findElements(By.xpath('//span[@class="menu-text"]'))
10 //'循环遍历每个对象'
11 for (WebElement ele : elementsList) {
12     ele.click()
13     println(ele.text)
14 }

注意上面循环中我曾经踩过的坑,就是元素会实时变化,比如10个button,当你点击第1个button后,第10个会消失。这样for循环到第10个的时候,你再去点击,此时页面DOM已刷新,第10个button不存在了,就会报错元素not found。

所以这里可以用一个计数变量配合continue、break结束循环;或者用while循环判断;也可以加入try catch截获异常。不会的话就先学下JAVA吧。

 

参考:
https://docs.katalon.com/katalon-studio/tutorials/handling_static_dynamic_test_objects.html
https://docs.katalon.com/katalon-studio/tutorials/using_selenium_webdriver_katalon_studio.html
https://docs.katalon.com/katalon-studio/docs/statements.html#in-manual-view-3

---------------------------------------------------------------------------------

关注微信公众号即可在手机上查阅,并可接收更多测试分享~

posted @ 2018-12-31 16:08  ☆星空物语☆  阅读(1152)  评论(0编辑  收藏  举报