- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我为@Test设置了父测试,为@Methods设置了子节点,当我发送多个测试状态(通过或失败)来报告测试失败时不会添加屏幕截图,但仅当为该@method发送一个状态时才会添加屏幕截图。
This method has only one status sent so the screenshot is added
这里我将测试和节点设置为@Test和@method
package modules;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import com.aventstack.extentreports.ExtentTest;
import io.github.bonigarcia.wdm.WebDriverManager;
public class openBrowser implements auto_constant {
public static WebDriver driver;
public static String extBrowser;
public static ThreadLocal<ExtentTest> parentTest = new ThreadLocal<ExtentTest>();
public static ThreadLocal<ExtentTest> test = new ThreadLocal<ExtentTest>();
// static String screenShotPath = screenPath + "/screenshot " + dateFunc.getShotDate();
@BeforeSuite
public void setupExtent() {
extentReports.attRepo();
}
@BeforeMethod
public void setChildTests() {
ExtentTest child = parentTest.get().createNode(extBrowser);
test.set(child);
}
@BeforeTest(description = "Checking the browser and launching it")
@Parameters({ "browser" })
public void beforeTest(String browser) {
/*
* Setting every @Test as parent node
* Name will be the class name of that @Test
*/
ExtentTest parent = extentReports.extent.createTest(getClass().getName());
parentTest.set(parent);
/*
* This assigns the browser driver to use for the extent reports for setting child node
*/
openBrowser.extBrowser = browser;
if (browser.equalsIgnoreCase("Chrome")) {
WebDriverManager.chromedriver().arch64().setup();
if (Property.getProperty("head").equalsIgnoreCase("false")) {
setDriver(new ChromeDriver());
} else {
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
setDriver(new ChromeDriver(options));
}
} else if (browser.equalsIgnoreCase("Firefox")) {
WebDriverManager.firefoxdriver().arch64().setup();
if (Property.getProperty("head").equalsIgnoreCase("false")) {
setDriver(new FirefoxDriver());
} else {
FirefoxOptions options = new FirefoxOptions();
options.addArguments("--headless");
setDriver(new FirefoxDriver(options));
}
}
driver.manage().window().maximize();
driver.get(url);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
@AfterTest(description = "Terminating the browser instance and reports")
public void afterTest() {
if (Property.getProperty("extent").equalsIgnoreCase("on")) {
extentReports.extent.flush();
}
driver.close();
}
@AfterMethod
public void afterMethod(ITestResult result) {
if (Property.getProperty("extent").equalsIgnoreCase("on")) {
if (result.getStatus() == ITestResult.FAILURE)
test.get().fail(result.getThrowable());
else if (result.getStatus() == ITestResult.SKIP)
test.get().skip(result.getThrowable());
else
test.get().pass("Test passed");
}
}
public void setDriver(WebDriver driver) {
openBrowser.driver = driver;
// driver = drive;
}
}
这里我通过调用断言方法将状态发送到报告
package pageModels;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import com.aventstack.extentreports.ExtentTest;
import modules.Assertion;
import modules.Property;
import modules.excelUtils;
import modules.extentReports;
import modules.openBrowser;
public class signup_login_Page extends openBrowser {
ExtentTest extTest;
/*
* Login page Web Elements
*/
@FindBy(xpath = "//div[@class='block-content']/form/fieldset/div[4]/div/button/span")
private WebElement sign_Submit;
@FindBy(xpath = "//div[@id='email-error']")
private WebElement email_error;
@FindBy(xpath = "//div[@id='pass-error']")
private WebElement pass_error;
@FindBy(xpath = "//div[@class='panel header'] //li[@class='greet welcome']/span")
private WebElement userName;
@FindBy(xpath = "//input[@id='email']")
private WebElement emailBox;
@FindBy(xpath = "(//input[@id='pass'])[1]")
private WebElement passBox;
@FindBy(xpath = "//div[@class='messages']/div/div")
private WebElement emptyLogErr;
/*
* Constructor Sets the driver to Current page
*/
public signup_login_Page(WebDriver driver) {
PageFactory.initElements(driver, this);
}
/*
* Checks if error messages are displayed when fields are empty
*/
public void checkError() throws Exception {
extTest = extentReports.extentTest();
sign_Submit.click();
modules.wait.waitVisible(email_error);
// Comparing Error Messages
Assertion.assertEquals(email_error.getText(), excelUtils.getData(Property.getProperty("sheetName"), 2, 6),
extTest, "Proper error msg for 'Email Field' is displayed",
"Proper error msg for 'Email Field' is NOT displayed");
Assertion.assertEquals(pass_error.getText(), excelUtils.getData(Property.getProperty("sheetName"), 2, 6),
extTest, "Proper error msg for 'Password Field' is displayed",
"Proper error msg for 'Password Field' is NOT displayed");
}
/*
* Login with valid credentials Checks the header for username to verify
* Successful login
*/
public void signin() throws Exception {
extTest = extentReports.extentTest();
int cell = 4;
for (int i = 1; i <= 2; i++) {
driver.findElement(By.xpath("(//form[@class='form form-login']/fieldset/div/div)[" + i + "]/input"))
.sendKeys(excelUtils.getData("userData", 2, cell++));
}
// actions.moveClick(sign_Submit);
sign_Submit.click();
Thread.sleep(10000);
// modules.wait.fluentVisible(userName);
String fullName = excelUtils.getData(Property.getProperty("sheetName"), 2, 2) + " "
+ excelUtils.getData(Property.getProperty("sheetName"), 2, 3);
String[] acName = userName.getText().split(",");
Assertion.assertContains(acName[1].trim().substring(0, acName[0].trim().length() - 1), fullName, extTest,
"Logged in Successfully", "User could NOT login");
}
}
在这里,我将在断言后发送状态报告以及屏幕截图
package modules;
import java.io.IOException;
import org.testng.Assert;
import org.testng.IReporter;
import com.aventstack.extentreports.ExtentTest;
import com.aventstack.extentreports.MediaEntityBuilder;
import com.aventstack.extentreports.Status;
public class Assertion implements IReporter {
/*
* Asserting the two Strings The result is recorded in Report if reports are
* enabled
*/
public static void assertEquals(String actual, String expected, ExtentTest extTest, String passMsg,
String failMsg) {
try {
Assert.assertEquals(actual, expected);
if (extentReports.xclude(extTest)) {
extTest.log(Status.PASS, passMsg);
}
System.out.println(passMsg);
/*
* Handling Assertion Error
*/
} catch (AssertionError error) {
if (extentReports.xclude(extTest)) {
/*
* Adding the Screen capture to the ExtentReports and handling it if file not
* found
*/
try {
extTest.fail(failMsg,
MediaEntityBuilder.createScreenCaptureFromPath(screenshot.shot(failMsg)).build());
} catch (IOException e) {
System.out.println("Could NOT find the Screenshot");
}
}
System.out.println(failMsg);
}
}
使用下面的方法为每个方法创建子节点
/*
* Creates a new Extent test and returns the extentTest object
*/
public static ExtentTest extentTest() {
if(Property.getProperty("extent").equalsIgnoreCase("on")) {
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
ExtentTest child = parentTest.get().createNode(stackTrace[2].getMethodName());
return child;
}else {
return null;
}
}
如果这个问题得到解决,将会有很大帮助。我也没有收到任何需要调试的错误。
谢谢。
最佳答案
Assertion.assertEquals(email_error.getText(), excelUtils.getData(Property.getProperty("sheetName"), 2, 6),
extTest, "Proper error msg for 'Email Field' is displayed",
"Proper error msg for 'Email Field' is NOT displayed");
Assertion.assertEquals(pass_error.getText(), excelUtils.getData(Property.getProperty("sheetName"), 2, 6),
extTest, "Proper error msg for 'Password Field' is displayed",
"Proper error msg for 'Password Field' is NOT displayed");
图像未上传,因为在删除图像上传的失败消息中的单引号后,我发送了单引号中包含文本的失败消息。
我不知道为什么,但它有效。
Assertion.assertEquals(email_error.getText(), excelUtils.getData(Property.getProperty("sheetName"), 2, 6),
extTest, "Proper error msg for Email Field is displayed",
"Proper error msg for Email Field is NOT displayed");
Assertion.assertEquals(pass_error.getText(), excelUtils.getData(Property.getProperty("sheetName"), 2, 6),
extTest, "Proper error msg for Password Field is displayed",
"Proper error msg for Password Field is NOT displayed");
关于java - 当多个测试状态发送到报告时,屏幕截图未添加到范围报告 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59422749/
我正在通读 Windows Phone 7.5 Unleashed,有很多代码看起来像这样(在页面的代码隐藏中): bool loaded; protected override void OnNav
在cgi服务器中,我这样返回 print ('Status: 201 Created') print ('Content-Type: text/html') print ('Location: htt
我正在查看 esh(easy shell)的实现,无法理解在这种情况下什么是 22 和 9 信号。理想情况下,有一个更具描述性的常量,但我找不到列表。 最佳答案 信号列表及其编号(包括您看到的这两个)
我的Oozie Hive Action 永远处于运行模式。 oozie.log文件中没有显示错误。
我正在编写一个使用 RFCOMM 通过蓝牙连接到设备的 Android 应用程序。我使用 BluetoothChat 示例作为建立连接的基础,大部分时间一切正常。 但是,有时由于出现套接字已打开的消息
我有一个云调度程序作业,它应该每小时访问我的 API 以更新一些价格。这些作业大约需要 80 秒才能运行。 这是它的作用: POST https://www.example.com/api/jobs/
我正在 Tomcat 上访问一个简单的 JSP 页面: 但是当我使用 curl 测试此页面时,我得到了 200 响应代码而不是预期的 202: $ curl -i "http://localhos
有时 JAR-RS 客户端会发送错误的语法请求正文。服务器应响应 HTTP status 400 (Bad Request) , 但它以 HTTP status 500 (Internal Serve
我正在尝试通过 response.send() 发送一个整数,但我不断收到此错误 express deprecated res.send(status): Use res.sendStatus(sta
我已经用 Excel 和 Java 做过很多次了……这次我需要用 Stata 来做,因为保存变量更方便'labels .如何将 dataset_1 重组为下面的 dataset_2? 我需要转换以下
我正在创建一个应用程序,其中的对象具有状态查找功能。为了提供一些上下文,让我们使用以下示例。 帮助台应用程序,其中创建作业并通过以下工作流程移动: 新 - 工作已创建但未分配 进行中 - 分配给工作人
我想在 Keras 中运行 LSTM 并获得输出和状态。在 TF 中有这样的事情 with tf.variable_scope("RNN"): for time_step in range
有谁知道 Scala-GWT 的当前状态 项目? 那里的主要作者 Grzegorz Kossakowski 似乎退出了这个项目,在 Spring 中从事 scalac 的工作。 但是,在 interv
我正在尝试编写一个 super 简单的 applescript 来启动 OneDrive App , 或确保打开,当机器的电源设置为插入时,将退出,或确保关闭,当电源设置为电池时。 我无法找到如何访问
目前我正在做这样的事情 link.on('click', function () { if (link.attr('href') !== $route.current.originalPath
是否可以仅通过查看用户代理来检测浏览器上是否启用/禁用 Javascript。 如果是,我应该寻找什么。如果否,检测用户浏览器是否启用/禁用 JavaScript 的最佳方法是什么 最佳答案 不,没有
Spring 和 OSGi 目前的开发状况如何? 最近好像有点安静了。 文档的最新版本 ( http://docs.spring.io/osgi/ ) 来自 2009 年。 我看到一些声明 Sprin
我正在从主函数为此类创建一个线程,但即使使用 Thread.currentThread().interrupt() 中断它,输出仍然包含“Still Here”行。 public class Writ
为了满足并发要求,我想知道如何在 Godog 中的多个步骤之间传递参数或状态。 func FeatureContext(s *godog.Suite) { // This step is ca
我有一个UIButton子类,它不使用UIImage背景,仅使用背景色。我注意到的一件事是,当您设置按钮的背景图像时,有一个默认的突出显示状态,当按下按钮时,该按钮会稍微变暗。 这是我当前的代码。
我是一名优秀的程序员,十分优秀!