Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同一步骤在多个要素文件中重复,但不能使用_Java_Selenium_Cucumber - Fatal编程技术网

Java 同一步骤在多个要素文件中重复,但不能使用

Java 同一步骤在多个要素文件中重复,但不能使用,java,selenium,cucumber,Java,Selenium,Cucumber,我正在学习Cumber框架,但仍停留在以下方面,在互联网上搜索,但无法获得任何具体的想法 Feature File 1: Feature: Facebook title #Scenario 1 Scenario: Verify the facebook title Given the user is navigated to FB login page Then the title should be correct And close the browser Feature File 2:

我正在学习Cumber框架,但仍停留在以下方面,在互联网上搜索,但无法获得任何具体的想法

Feature File 1:

Feature: Facebook title
#Scenario 1
Scenario: Verify the facebook title
Given the user is navigated to FB login page
Then the title should be correct
And close the browser

Feature File 2:

Feature: Google title
Scenario: Verify google title
Given user is navigated to google
Then verify the title
And close the browser

StepDefinitionGoogleTitle.java -code

public class StepDefinitionGoogleTitle extends setupchrome {
static WebDriver driver = setup();
@Given("^user is navigated to google$")
public void navitaetoGoogle() throws Throwable {
driver.get("https://www.google.com");
}
@Then("^verify the title$")
public void verifytheTitle() throws Throwable {
Assert.assertEquals("Title is not as expected","Google",driver.getTitle());
}
@When("^enter something and search$")
public void searchTesxt() throws Throwable {
driver.findElement(By.id("lst-ib")).sendKeys("akash");
driver.findElement(By.id("lst-ib")).sendKeys(Keys.RETURN);
}
@Then("^verify the title after search$")
public void verify_the_title_after_search() throws Throwable {
Assert.assertEquals("Title is not as expected","akash - Google Search",driver.getTitle());
}}

StepDefinitionFacebookTitle.java - code

public class StepDefinitionFacebookTitle extends setupchrome {
WebDriver driver = setup();
@And("^close the browser$")
public void closeTheBrowser() throws Throwable {
driver.close();
}}

setupchrome.java - code

public class setupchrome {
protected static WebDriver driver;
protected static WebDriver setup()
{
if(driver==null)
{
    System.setProperty("webdriver.chrome.driver","E:\\D\\Jar FIles\\chromedriver.exe");
    driver = new ChromeDriver();
}
return driver;
}}
上述功能文件的步骤定义写在两个单独的文件中。对于常用步骤关闭浏览器,我只在一个文件中编写了方法,就好像我在两个文件中都添加了方法一样,这将给出一个编译时错误,指示重复步骤,但运行该文件时,我会收到以下错误消息:

java.lang.NullPointerExceptionatstepDefinition.StepDefinitionFacebookTitle.closeTheBrowser (StepDefinitionFacebookTitle.java:55)at ?.And close the browser(Gmail.feature:6)

不确定您正在使用什么框架来运行测试,但您面临的问题来自未初始化的steps类,在本例中是StepDefinitionFacebookTitle,因此是NullPointerException


了解如何使用前后挂钩来启动和关闭浏览器。更多信息。

正如上面Daniel所说,这取决于您使用的框架。我怀疑你把PageFactory/PageObjectModel和步骤定义文件弄混了。将页面对象类与步骤文件分开

如果您还可以粘贴步骤定义文件,那就太好了,这样我们就可以看一看了


如果您刚开始学习Cucumber,还可以学习一个简单的教程,这取决于您的步骤所在的位置以及您为执行提供的胶水值。 我建议试试。它甚至可以跨多个项目提供简单的配置和重用步骤。您只需要在属性文件或xml配置文件中指定步骤提供包。步骤可能在您的项目中,也可能在jar中

例如,这里是在属性中:

step.provider.pkg=my.steps.pkg

您可以参考

谢谢Daniel,使用前后帮助在这种情况下,我还有一个相关的疑问,假设我必须在这两个功能文件中使用“给定用户导航到FB登录页面”步骤,那么如何处理?如何在这两个功能文件中使用相同的步骤定义?简短的回答是,在Google步骤定义类中实例化步骤定义FaceBookTitle并使用它的方法。例如,在Google类中添加私有StepDefinitionFacebookTitle fbSteps=new StepDefinitionFacebookTitle;现在你可以使用这些方法了。请在此处查看详细答案。此处的问题是,我希望在功能文件2末尾调用Close Browser方法时,WebDriver实例未传递给StepDefinitionFacebookTitle类。我已经在setupchrome类中设置了chrome浏览器,另外两个类扩展了这个类。你现在能帮上忙吗?只需做一个小改动,而不是扩展setupchrome,只需在stepdefinition文件中使用setupchrome.driver,看看它是否工作正常。在钩子的帮助下,初始化驱动程序。直到我给你带来一个很好的工作例子。