使用Java Spring Cucumber注入PageObject实现时管理WebDriver会话

q8l4jmvw  于 2023-06-28  发布在  Spring
关注(0)|答案(1)|浏览(74)

我需要根据某些属性注入不同的PageObject实现,但在管理WebDriver会话时遇到了问题。页面配置:

@Configuration
public class PageImplConfig {

    @Value("${application.url}")
    private String url;

    @Bean
    public IProductDetailsPage pdp() {
        if(url.contains("www.somesite.com")) {
            return new ProductDetailsPageHG();
        } else {
            return new ProductDetailsPageDefault();
        }
    }

}

WD配置:

@Bean
    @Scope("browserscope")
    @Documented
    @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    public WebDriver chromeDriver(){
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");
        WebDriverManager.chromedriver().setup();
        return new ChromeDriver(options);
    }

Autowire接口:

public class PdpSteps extends SpringBaseTestNGTest {

    @Autowired
    protected IProductDetailsPage pdp;
}

当在Scenarion Outline(cucumber)中使用它时-第一个示例正常工作,但是当pdp用于第二个示例时-它崩溃了'org.openqa.selenium.NoSuchSessionException: Session ID is null. Using WebDriver after calling quit()?'我应该如何正确管理会话?

8ulbf1ek

8ulbf1ek1#

通过将@ScenarioScope添加到PageImplConfig修复了一个问题

@Bean
@ScenarioScope
public IProductDetailsPage pdp() {
    if(url.contains("www.hotelgiftcard.com")) {
        return new ProductDetailsPageHG();
    } else {
        return new ProductDetailsPage();
    }
}

相关问题