[英]Selenium Web Driver - Java - TestNG - Assert.assertEquals how to compare actual result with the range between expected result
我有一個測試方案,其中實際結果是固定百分比,例如135.68%,但我想將實際結果與預期結果進行比較,例如范圍在130.00到136.00之間。 如果實際結果在130.00到136.00之間,則測試通過,否則測試失敗。
我正在使用以下Assert語句,但沒有運氣:
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.io.File;
import java.io.FileInputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import jxl.Sheet;
import jxl.Workbook;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.Assertion;
import org.testng.asserts.SoftAssert;
@Test
public class TC20042 extends BaseClass{
private SoftAssert m_assert = new SoftAssert();
public void registration() throws Exception, InterruptedException {
FileInputStream fi=new FileInputStream("C:\\File\\Book2.xls");
Workbook w=Workbook.getWorkbook(fi);
Sheet s=w.getSheet(2);
try
{
for (int i = 0; i < s.getRows(); i++)
{
//Read data from excel sheet
String s1 = s.getCell(0,i).getContents();
String xPath = "//*[@id='mainForm']/div/div[3]/div/div/table/tbody/tr[1]/td[6]";
String text = driver.findElement(By.xpath(xPath)).getText();
double percentage = Double.parseDouble(text);
assertThat(percentage).isBetween(130.0, 136.0);
private Object assertThat(double percentage) {
// TODO Auto-generated method stub
return null;
}
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}
只需解析並檢查:
String expectedPercentage = driver.findElement(By.xpath("//*[@id='app-banner']/div[1]/div/h2")).getText().replace("%", "");
double percentage = Double.parseDouble(expectedPercentage);
// Do this parsing if range is in string format. Otherwise skip this block
String range = "130.00 to 136.00";
String[] numbers = range.replaceAll(" ", "").split("to");
double min = Double.parseDouble(numbers[0]);
double max = Double.parseDouble(numbers[1]);
Assert.assertTrue(expectedPercentage + " is not between the range", min <= percentage && percentage <= max);
解析文本並聲明結果:
String xPath = "//*[@id='app-banner']/div[1]/div/h2";
String text = driver.findElement(By.xpath(xPath)).getText();
double percentage = Double.parseDouble(text.replace("%", ""));
assertThat(percentage).isBetween(130.0, 136.0);
此解決方案使用來自AssertJ的 isBetween(Double, Double)
作為靜態導入 。 另外,您可以使用我在comment中提到的TestNG斷言。
public static void assertEquals(double actual,
double expected,
double delta,
java.lang.String message)
Asserts that two floats are equal concerning a delta. If they are not, an AssertionError, with the given message, is thrown. If the expected value is infinity then the delta value is ignored.
assertEquals(133.00,expected,3.00,"ERROR")
我使用常規的testNg Assert,對我來說如下所示:
String xPath = "//*[@id='mainForm']/div/div[3]/div/div/table/tbody/tr[1]/td[6]";
String text = driver.findElement(By.xpath(xPath)).getText();
text = text.replace("%", "");
double percentage = Double.parseDouble(text);
Assert.assertTrue(percentage > 130.67 && percentage < 135.69);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.