在WebDriver中的错误侦听器和测试执行之间同步

时间:2017-07-28 09:19:49

标签: java selenium selenium-webdriver synchronization listener

我正在尝试在我的Java项目中构建的Selenium测试中实现一个javaScript错误监听器。

为了检测控制台Java Script错误,我在JavaScript项目中实现了一个脚本,它将在主体底部推送控制台错误消息,其中包含一个包含特定ID和错误消息的元素。

我编码的侦听器错误如下:

file.txt:
Name: sam
email: email@email.com

我在测试方法中调用的内容如下:

<?php
    $myFile = "file.txt";
    $txt = 'thetxt';
    $file = file($myFile);
    foreach ($file as $row_num => $row) {
        //idk what i should do here
    }
    $file_o = fopen($myFile, "w");
    fwrite($file_o, $txt);
    fclose($file_o);
?>

问题是,因为我使用相同的Chrome实例来不断地监听特定的WebElement,所以我从两个方法(测试和监听器)并行地抛出请求,并且该过程最终因为崩溃而崩溃他们在同一时间而且没有被同步(一个接一个)。

我意识到一个选项可能是在每次执行某些操作后检查错误,但这会大大增加我的代码行,并且它只是部分解决方案,因为某些错误可能仅以毫秒为单位发生。 ..

这个问题有解决方案吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

首先,您必须创建TestListener.java文件

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

public class TestListener implements ITestListener {

@Override
public void onTestStart(ITestResult result) {
    System.out.println("Started Test: " + result.getName());
}

@Override
public void onTestSuccess(ITestResult result) {
    System.out.println("Finished Test: " + result.getName() + " :PASSED");
}

@Override
public void onTestFailure(ITestResult result) {
    System.out.println("Finished Test: " + result.getName() + " :FAILED");
}

@Override
public void onTestSkipped(ITestResult result) {
    System.out.println("Finished Test: " + result.getName() + " :SKIPPED");
}

@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
    System.out.println("Finished Test: " + result.getName()
            + " :FAILED BUT WITHIN SUCCESS PERCENTAGE");
}

@Override
public void onStart(ITestContext context) {
    // TODO Auto-generated method stub

}
@Override
public void onFinish(ITestContext context) {
    // TODO Auto-generated method stub

}
}

您可以根据自己自定义此文件。接下来你需要做的是你需要在Test类中提到这个监听器

@Listeners(TestListener.class)

public class TestClass{
@Test(dataProvider = "TestData" , dataProviderClass = DataProviderUtil.class)   
public void test(List data) throws Exception {

    try{

        // your code here

    }
    catch(Exception e){
        Log.exception(e);
    }finally {
        Log.endTestCase();
    }
}
}