QAF:在 QAF 中实施自我修复Healenium

问题描述

我是 QAF 的新手,我需要在我们的测试方法中使用 healenium 实现自我修复。我在没有 QAF 的情况下实现了它,它工作正常。请参考以下代码

import com.epam.healenium.SelfhealingDriver;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.jupiter.api.Afterall;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.util.concurrent.TimeUnit;

public class BaseTest {
    static protected SelfhealingDriver driver;

    @BeforeAll
    static public void setUp() {
        WebDriverManager.chromedriver().setup();
        ChromeOptions options = new ChromeOptions();
        options.setHeadless(false);
        //declare delegate
        WebDriver delegate = new ChromeDriver(options);
        driver = SelfhealingDriver.create(delegate);
        driver.manage().timeouts().implicitlyWait(4,TimeUnit.SECONDS);
        driver.manage().window().setSize(new Dimension(1200,800));
    }

    @Afterall
    static public void afterall() {
        if (driver != null) {
            driver.quit();
        }
    }
}

我只想用上面的 QAF 网络驱动程序包装这个自我修复驱动程序。

解决方法

QAF 不鼓励对驱动程序使用静态类变量。所提供的代码不适用于并行执行。驱动程序管理由 qaf 负责,具有线程安全性和可使用 property selenium.singletone 设置的不同行为。

需要 SelfHealingDriver 时可以尝试以下方式:

public class SampleTest extends WebDriverTestCase {

   @Test
   public void yourTestCase(){
      SelfHealingDriver driver = SelfHealingDriver.create(getDriver());
      //your code goes below
   }
}

如果您想在创建驱动程序后做一些事情,您可以使用 driver listener。例如:

public class WDListener extends QAFWebDriverCommandAdapter {

   //this method will called when new driver object created
   public void onInitialize(QAFExtendedWebDriver driver){
        driver.manage().timeouts().implicitlyWait(4,TimeUnit.SECONDS);
        driver.manage().window().setSize(new Dimension(1200,800));
   }
}