UI 测试 - 断言排序数据 (Katalon/Selenium) Java
Posted
技术标签:
【中文标题】UI 测试 - 断言排序数据 (Katalon/Selenium) Java【英文标题】:UI Testing - Asserting on Sorting Data (Katalon/Selenium) Java 【发布时间】:2019-11-25 08:58:37 【问题描述】:我将围绕表格排序编写一些自动化 UI 测试。
排序允许表中的所有列按升序和降序排列。列可以是字符串、日期时间、int 等。
任何人都可以就断言列已按预期排序的实用方法提供建议吗?
是否有一种方法不依赖于每次测试的数据相同?
【问题讨论】:
您使用哪种编程语言? 我使用 Katalon 作为工具,但这允许使用 Selenium 和 Java 编写自定义脚本。 【参考方案1】:这是我的看法:
-
转到https://the-internet.herokuapp.com/tables页面
单击第一个表格上的“姓氏”标题以对表格进行排序
用
Collections.sort()
方法比较UI值看是否排序
WebUI.openBrowser("https://the-internet.herokuapp.com/tables")
WebDriver driver = DriverFactory.getWebDriver()
driver.findElement(By.xpath("//table[@id='table1']//span[contains(.,'Last Name')]")).click()
List<WebElement> tableElements = driver.findElements(By.cssSelector("#table1 tr td:nth-child(1)"));
ArrayList<String> tableValues = new ArrayList<String>();
for(int i=0; i < tableElements.size(); i++)
String str = tableElements.get(i).getText();
tableValues.add(str);
ArrayList<String> referenceValues = new ArrayList<String>();
for(int i=0; i < tableValues.size(); i++)
referenceValues.add(tableValues.get(i))
Collections.sort(referenceValues)
assert referenceValues.equals(tableValues)
【讨论】:
注意 - 这比我上面的解决方案执行起来要快得多。【参考方案2】:我想出了以下使用 selenium 和 Groovy (Java) 的解决方案。使用这种脚本语言的原因是因为我的组织使用了一个名为 Katalon 的工具,它支持上面的自定义脚本。
先决条件
为我要声明的列的表格中的每个单元格添加 ID。这使得选择元素更容易。例如,<td id="receivedDate-1">2019-04-02 00:00</td>
等等。
这是我的解决方案
import org.openqa.selenium.By as By
import org.openqa.selenium.WebDriver as WebDriver
import org.openqa.selenium.WebElement as WebElement
import com.kms.katalon.core.webui.driver.DriverFactory as DriverFactory
import com.kms.katalon.core.util.KeywordUtil as Log
WebDriver driver = DriverFactory.getWebDriver()
int untracedPostTableRowCount = driver.findElements(By.xpath('//table[@id=\'UntracedPostTable\']/tbody/tr')).size()
Log.logInfo('untracedPostTableRowCount: ' + untracedPostTableRowCount)
// Start iteration from second row to compare against the first row
for (int rowIndex = 2; rowIndex <= untracedPostTableRowCount; rowIndex++)
//Get the UTC date from within the hidden span element
String currentRowReceivedDate = driver.findElement(By.id("receivedDate-$rowIndex-utc")).getAttribute('innerhtml');
int previousRowIndex = rowIndex - 1;
String previousRowReceivedDate = driver.findElement(By.id("receivedDate-$previousRowIndex-utc")).getAttribute('innerHTML');
// compareTo() - https://beginnersbook.com/2013/12/java-string-compareto-method-example/
// compareTo method converts strings into a Unicode value for comparison
// If strings are equal, compareTo will return 0
// if first string is lexicographically greater than the second string, compareTo will return a positive int
// if first string is lexicographically small than the first string, compareTo will return a negative int
assert currentRowReceivedDate.compareTo(previousRowReceivedDate) >= 0;
参考:https://forum.katalon.com/t/testing-data-that-has-been-sorted/36785
【讨论】:
以上是关于UI 测试 - 断言排序数据 (Katalon/Selenium) Java的主要内容,如果未能解决你的问题,请参考以下文章