在我试图建立的测试中,在实现Cucumber时遇到了一些问题。以此为指导,成功地获得了测试工作Selenium:https://medium . com/@ cbuelvasc/test-automation-in-kotlin-with-Selenium-TestNG-and-page-object-model-e 2252 DBC 492 a
当我尝试在其上添加功能以及步骤定义时 - 它抱怨picocontainer缺少依赖项:
org.picocontainer.injectors.AbstractInjectorpages.LoginPageorg.picocontainer.DefaultPicoContainer@501edcf1中构造函数公共pages.LoginPage(org.openqa.selenium.WebDriver)的接口org.openqa.selenium.WebDriver
这是功能文件:
Feature: Login
Scenario: A user can log in when they provide valid credentials
When a valid username is entered in the username field
这个LoginPage类,带有元素定位器和我希望使用的单步定义...
import io.cucumber.java.en.When
import org.openqa.selenium.WebDriver
import org.openqa.selenium.WebElement
import org.openqa.selenium.support.FindBy
import org.openqa.selenium.support.PageFactory
class LoginPage(driver: WebDriver) {
@FindBy(css = "input.ant-input.input.labeled-input__input.with-input-styles")
private val emailAddressField: WebElement? = null
@FindBy(css = "input.ant-input.input.password-input__input.with-input-styles")
private val passwordField: WebElement? = null
@FindBy(css = "button.ant-btn.ant-btn-primary.ant-btn-lg.button.button_type_primary.login-form__submit-button")
private val loginButton: WebElement? = null
init {
PageFactory.initElements(driver, this)
}
// Input fields
@When("a valid username is entered in the username field")
fun addUsername() = emailAddressField?.sendKeys("[value]")
fun addPassword() = passwordField?.sendKeys("[value]")
// Buttons
fun login() = loginButton?.click()
}
这是用于设置的抽象类:
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.testng.annotations.AfterTest
import org.testng.annotations.BeforeTest
import util.UtilResources
import java.net.URI
import java.util.concurrent.TimeUnit
abstract class TestBase {
lateinit var driver: WebDriver
private set
@BeforeTest
fun setup() {
System.setProperty(
UtilResources.getProperties("nameDriver"),
UtilResources.getProperties("pathDriver") + UtilResources.getProperties("exeDriver")
)
driver = ChromeDriver()
driver.manage()?.timeouts()?.implicitlyWait(10, TimeUnit.SECONDS)
driver.manage()?.window()?.maximize()
driver.get(URI(UtilResources.getProperties("pageURL")).toString())
}
@AfterTest
fun driverClose() {
driver.close();
}
}
pom文件包括依赖项(但每次我尝试包含它-StackOverflow将其标记为垃圾邮件)
完全错误:
Step failed
org.picocontainer.injectors.AbstractInjector$UnsatisfiableDependenciesException: pages.LoginPage has unsatisfied dependency 'interface org.openqa.selenium.WebDriver' for constructor 'public pages.LoginPage(org.openqa.selenium.WebDriver)' from org.picocontainer.DefaultPicoContainer@501edcf1:1<|
想要作为提供的BDD运行测试。使用最初的指南(链接)作为概念验证,用Kotlin编写,并用@Test testng route进行了测试。当试图在顶部添加步骤定义时;获得unsatisfiabledependencies exception,即使所有类都有错误所指的导入。有人能帮忙吗?我错过了一些基本的简单的事情吗?
您的登录页面将接口作为构造参数。虽然这通常是DI的正确模式,但Cucumber以简化的方式与PicoContainer集成。
因此,理论上要使您的方法适用于任何DI框架,您必须在某个地方有一个映射,例如“好的DI框架,如果您在某个地方遇到WebDriver
的实例,您应该使用这个特定的类实例化该字段或方法参数:ChromeDriver
”
Cucumber与PicoContainer的集成意味着它只是搜索一个给定的类,如果它是可实例化的,那就没问题。但是由于< code>WebDriver本身不能被实例化,PicoContainer不知道将什么放在那个特定的地方。
PicoContainer的解决方案是创建一个包装类,该类将把对< code>WebDriver方法的调用委托给该接口的底层特定实现。实现是什么可以由一个参数控制(例如)。
注意:该包装器应该以懒惰的方式初始化底层实现并实现Disposable
接口,以确保WebDriver
的正确终止。
P.S. - 你可以在这里找到更详细的解释,用Java中的例子(可以简单地转换为Kotlin案例)。
堆栈跟踪
我正在尝试实现一个quarkus-extension用于授权/认证。我使用现有的< code > quar kus-small rye-jwt-abx -扩展作为例子。一切似乎都很好,除了我不能注入< code>Principal: 我得到了 对 java.security.主体和限定符类型未满足的依赖关系 [@Default] 注入
我正在尝试创建一个带有Wildfly和数据库连接的EJB Web项目,以持久化我的类“article”。但当我启动我的应用程序时,我得到了错误 包装服务; ArticleDaoImpl
我有一个属性XML文件,如下所示: 我该怎么解决这个?
“我是Spring新手,我刚开始一个Spring MVC CRUD项目,但在尝试了很多方法之后,我一次又一次地面临同样的错误。 这是打印HTTP状态500的第一个异常-内部服务器错误。 HTTP状态500–内部服务器错误 javax。servlet。ServletException:Servlet。servlet[dispatcher]的init()引发异常组织。阿帕奇。卡塔琳娜。验证者。Auth
我觉得我一定忽略了什么。 null Grunt@0.4.2应该匹配所有这些依赖项,但npm说它不匹配,安装失败。我是不是忽略了什么? 根据请求,我的package.json文件: