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。这使得选择元素更容易。例如,

&lt;td id="receivedDate-1"&gt;2019-04-02 00:00&lt;/td&gt; 等等。

这是我的解决方案

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的主要内容,如果未能解决你的问题,请参考以下文章

软件测试 |属性获取与断言

selenium--断言和验证

如何为 Arquillian UI 测试重置数据库

Espresso - 使用异步加载的数据断言 TextView

AAA 是 Coded UI 测试的好习惯吗?

基于Puppeteer前端自动化框架PO模式,断言(如何更简便逻辑的写测试代码)