Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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
Cucumber Java(Maven)WebdriverManager(Bonigarcia)无法从属性获取URL_Java_Maven_Selenium Webdriver_Cucumber_Webdrivermanager Java - Fatal编程技术网

Cucumber Java(Maven)WebdriverManager(Bonigarcia)无法从属性获取URL

Cucumber Java(Maven)WebdriverManager(Bonigarcia)无法从属性获取URL,java,maven,selenium-webdriver,cucumber,webdrivermanager-java,Java,Maven,Selenium Webdriver,Cucumber,Webdrivermanager Java,大家好:我正在尝试用Java(Maven)和WebDriverManager(Bonigarcia)运行Cucumber 这是我的项目树: ├── maven_selenium_cucumber.iml ├── pom.xml ├── src │   ├── main │   │   ├── java │   │   │   ├── common │   │   │   │   └── BasePage.java │   │   │   ├── pages │   │   │   │  

大家好:我正在尝试用Java(Maven)和WebDriverManager(Bonigarcia)运行Cucumber

这是我的项目树:

    ├── maven_selenium_cucumber.iml
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   ├── common
│   │   │   │   └── BasePage.java
│   │   │   ├── pages
│   │   │   │   └── Page_First.java
│   │   │   └── util
│   │   │       └── driver
│   │   │           ├── Driver.java
│   │   │           └── DriverFactory.java
│   │   └── resources
│   │       ├── default.properties
│   │       └── log4j.properties
│   └── test
│       └── java
│           ├── features
│           │   └── first.feature
│           ├── runner
│           │   └── TestRunner.java
│           └── steps
│               └── Step_First.java
└── target
我的驱动程序类(它像钩子一样工作)

MyDriverFactory课程:

package util.driver;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.safari.SafariDriver;


public class DriverFactory {

    private static final String BROWSER = System.getenv("browser");
    private static final String WINDOW_WIDTH = System.getenv("window_width");
    private static final String WINDOW_HEIGHT = System.getenv("window_height");
    private static final String CHROME = "chrome";
    private static final String HEADLESS_CHROME = "headless-chrome";
    private static final String FIREFOX = "firefox";
    private static final String HEADLESS_FIREFOX = "headless-firefox";
    private static final String IE = "ie";
    private static final String EDGE = "edge";
    private static final String SAFARI = "safari";
    private static final String WINDOW_SIZE = "--window-size="+WINDOW_WIDTH+"x"+WINDOW_HEIGHT;

    private static WebDriver driver;


    public static WebDriver getDriver() {
        if (BROWSER == null) {
            WebDriverManager.chromedriver().setup();
            return new ChromeDriver();
        }
        switch (BROWSER.toLowerCase())
        {
            case CHROME:
                WebDriverManager.chromedriver().setup();
                return new ChromeDriver();
            case HEADLESS_CHROME:
                ChromeOptions chromeOptions = new ChromeOptions();
                chromeOptions.addArguments("--headless");
                chromeOptions.addArguments("start-maximized"); 
                chromeOptions.addArguments("disable-infobars"); 
                chromeOptions.addArguments("--disable-extensions"); 
                chromeOptions.addArguments("--disable-gpu"); 
                chromeOptions.addArguments("--disable-dev-shm-usage");
                chromeOptions.addArguments("--no-sandbox");
                return new ChromeDriver(chromeOptions);
            case FIREFOX:
                WebDriverManager.firefoxdriver().setup();
                return new FirefoxDriver();
            case HEADLESS_FIREFOX:
                FirefoxBinary firefoxBinary = new FirefoxBinary();
                firefoxBinary.addCommandLineOptions("--headless");
                firefoxBinary.addCommandLineOptions(WINDOW_SIZE);
                FirefoxOptions firefoxOptions = new FirefoxOptions();
                firefoxOptions.setBinary(firefoxBinary);
                WebDriverManager.firefoxdriver().setup();
                return new FirefoxDriver(firefoxOptions);
            case IE:
                WebDriverManager.iedriver().setup();
                return new InternetExplorerDriver();
            case EDGE:
                WebDriverManager.edgedriver().setup();
                return new EdgeDriver();
            case SAFARI:
                driver = new SafariDriver();
                return new SafariDriver();
            default:
                WebDriverManager.chromedriver().setup();
                return new ChromeDriver();
        }
    }
}
这是我的主页

package common;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import util.driver.Driver;
import java.util.logging.Logger;


public abstract class BasePage {

    protected static String BASE_URL = System.getenv("base_URL");
    protected static final Logger log = Logger.getLogger(BasePage.class.getName());
    private WebDriver driver = Driver.driver;


    public BasePage() {

        PageFactory.initElements(driver, this);

    }

    protected void waitForElementClickable(WebElement element){
        WebDriverWait wait = new WebDriverWait(driver, 30);
        wait.until(ExpectedConditions.elementToBeClickable(element));
    }

    protected void waitForElementVisible(WebElement element){
        WebDriverWait wait = new WebDriverWait(driver, 15);
        wait.until(ExpectedConditions.visibilityOf(element));
    }

    protected void setTextAs(WebElement element, String text){
        waitForElementClickable(element);
        element.sendKeys(text);
    }

    protected void clearElement(WebElement element){
        waitForElementClickable(element);
        element.clear();
    }

    protected void clickElement(WebElement element){
        waitForElementClickable(element);
        element.click();
    }

    protected void clickElementByJavascriptExecutor(String xpath){
        WebElement element=driver.findElement(By.xpath(xpath));
        JavascriptExecutor ex=(JavascriptExecutor)driver;
        ex.executeScript("arguments[0].click()", element);
    }

    protected void clickLink(WebElement element){
        waitForElementVisible(element);
        element.click();
    }

    protected String getText(WebElement element){
        waitForElementVisible(element);
        return element.getText();
    }

    protected void freeze(int seconds) {
        try {
            Thread.sleep(seconds * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
这是我的stepdefinition类第一步:

package steps;

import common.BasePage;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.PageFactory;
import pages.Page_First;
import util.driver.Driver;

import java.io.IOException;


public class Step_First extends BasePage {

    private WebDriver driver = Driver.driver;
    private Page_First page_first = PageFactory.initElements(driver, Page_First.class);


    @Given("I go to Google")
    public void I_go_to_Googl () {

        page_first.navigateToBrowser();
    }

    @When("I query for {string} cucumber spring selenium")
    public void I_query_for_cucumber_spring_selenium (String search) throws IOException {

        page_first.search(search);
    }

    @When("click search")
    public void click_search(){

        page_first.enterButton();
    }

    @Then("google page title should become the first page")
    public void google_page_title_should_become_the_first_page() {

        log.info("All OK");
    }

}
这是我的跑步者文件TestRunner

package runner;

import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/java/features",
        glue= {"steps"},
        monochrome = true,
        plugin = {"pretty", "html:TestReports", "json:TestReports/cucumber.json", "junit:TestReports/cucumber.xml"}
)

public class TestRunner {
}
下面是我的功能文件fist.feature

Feature: Navigation Test

  Scenario: Search google.com to verify google search is working

    Given I go to Google
    When I query for "<search>" cucumber spring selenium
    And click search
    Then google page title should become the first page
别忘了我的POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>automation</groupId>
    <artifactId>maven_selenium_cucumber</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.version>3.7.0</maven.compiler.version>
        <cucumber.version>3.0.2</cucumber.version>
        <selenium.version>3.12.0</selenium.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-jvm-deps</artifactId>
            <version>1.0.6</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-core</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-java8 -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-java8</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.cucumber/cucumber-picocontainer -->
        <dependency>
            <groupId>io.cucumber</groupId>
            <artifactId>cucumber-picocontainer</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>3.7.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

4.0.0
自动化
马文·硒·黄瓜
1.0-快照
UTF-8
1.8
3.7.0
3.0.2
3.12.0
朱尼特
朱尼特
4.12
测试
黄瓜
黄瓜汁
1.0.6
假如
黄瓜
黄瓜爪哇
${cumber.version}
黄瓜
黄瓜刺柏
${cumber.version}
黄瓜
黄瓜核
${cumber.version}
黄瓜
黄瓜-java8
${cumber.version}
黄瓜
黄瓜皮容器
${cumber.version}
org.seleniumhq.selenium
硒爪哇
${selenium.version}
io.github.bonigarcia
webdrivermanager
3.7.1
org.slf4j
slf4j api
1.7.5
org.slf4j
slf4j-log4j12
1.7.5
org.springframework
spring上下文
5.1.5.1发布
org.apache.maven.plugins
maven编译器插件
${maven.compiler.version}
${java.version}
${java.version}
UTF-8
这里的问题有两个:

1.-我在我的配置文件(default.properties)中写入了浏览器中的选项firefox,但导航器正在打开Chrome

2.-几秒钟后,浏览器崩溃,控制台显示下一条错误消息:

java.lang.NullPointerException: null value in entry: url=null
    at com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:32)
    at com.google.common.collect.SingletonImmutableBiMap.<init>(SingletonImmutableBiMap.java:42)
    at com.google.common.collect.ImmutableBiMap.of(ImmutableBiMap.java:70)
    at com.google.common.collect.ImmutableMap.of(ImmutableMap.java:123)
    at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:271)
    at pages.Page_First.navigateToBrowser(Page_First.java:37)
    at steps.Step_First.I_go_to_Google(Step_First.java:24)
    at ✽.I go to Google (/Users/rodrigo.g/Documents/automation_projects/maven_selenium_cucumber/src/test/java/features/first.feature:8)


Skipped step

Skipped step

Skipped step
Feb 21, 2020 7:18:03 PM util.driver.Driver closeDriver
INFO: $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ Finish of Test Execution $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Feb 21, 2020 7:18:03 PM util.driver.Driver closeDriver
INFO: Driver closed

Failed scenarios:
/Users/rodrigo.g/Documents/automation_projects/maven_selenium_cucumber/src/test/java/features/first.feature:6 # Search google.com to verify google search is working

1 Scenarios (1 failed)
4 Steps (1 failed, 3 skipped)
0m2.833s

java.lang.NullPointerException: null value in entry: url=null
    at com.google.common.collect.CollectPreconditions.checkEntryNotNull(CollectPreconditions.java:32)
    at com.google.common.collect.SingletonImmutableBiMap.<init>(SingletonImmutableBiMap.java:42)
    at com.google.common.collect.ImmutableBiMap.of(ImmutableBiMap.java:70)
    at com.google.common.collect.ImmutableMap.of(ImmutableMap.java:123)
    at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:271)
    at pages.Page_First.navigateToBrowser(Page_First.java:37)
    at steps.Step_First.I_go_to_Google(Step_First.java:24)
    at ✽.I go to Google (/Users/rodrigo.g/Documents/automation_projects/maven_selenium_cucumber/src/test/java/features/first.feature:8)


Process finished with exit code 1
java.lang.NullPointerException:entry:url=null中的null值
位于com.google.common.collect.CollectPremissions.checkEntryNotNull(CollectPremissions.java:32)
位于com.google.common.collect.SingletonImmutableBiMap。(SingletonImmutableBiMap.java:42)
位于com.google.common.collect.ImmutableBiMap.of(ImmutableBiMap.java:70)
位于com.google.common.collect.ImmutableMap.of(ImmutableMap.java:123)
位于org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:271)
在pages.Page_First.navigateToBrowser(Page_First.java:37)
在steps.Step\u First.I\u转到谷歌(Step\u First.java:24)
在✽.我去谷歌(/Users/rodrigo.g/Documents/automation\u projects/maven\u selenium\u cumber/src/test/java/features/first.feature:8)
跳过的步骤
跳过的步骤
跳过的步骤
2020年2月21日7:18:03 PM util.driver.driver closeDriver
信息:$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$测试执行完成$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
2020年2月21日7:18:03 PM util.driver.driver closeDriver
信息:司机关门了
失败的场景:
/Users/rodrigo.g/Documents/automation_projects/maven_selenium_cumber/src/test/java/features/first.feature:6#搜索google.com以验证google搜索是否有效
1个场景(1个失败)
4个步骤(1个失败,3个跳过)
0m2.833s
java.lang.NullPointerException:条目中的null值:url=null
位于com.google.common.collect.CollectPremissions.checkEntryNotNull(CollectPremissions.java:32)
位于com.google.common.collect.SingletonImmutableBiMap。(SingletonImmutableBiMap.java:42)
位于com.google.common.collect.ImmutableBiMap.of(ImmutableBiMap.java:70)
位于com.google.common.collect.ImmutableMap.of(ImmutableMap.java:123)
位于org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:271)
在pages.Page_First.navigateToBrowser(Page_First.java:37)
在steps.Step\u First.I\u转到谷歌(Step\u First.java:24)
在✽.我去谷歌(/Users/rodrigo.g/Documents/automation\u projects/maven\u selenium\u cumber/src/test/java/features/first.feature:8)
进程已完成,退出代码为1

有人能帮我解决这两个问题吗?

首先,有很多无用的信息。 另外,我想请您看看代码的这一部分:

您的Driver.class:

driver = DriverFactory.getDriver();
您正在尝试第一次初始化它以便进一步使用。然后:

if (BROWSER == null) {
            WebDriverManager.chromedriver().setup();
            return new ChromeDriver();
        }
你是说如果没有活动浏览器,给我Chrome浏览器。 此外,在交换机中的DriveFactory.class中:

default:
        WebDriverManager.chromedriver().setup();
        return new ChromeDriver();
你是说默认给我Chrome 这可能是调用Chrome而不是FF的原因

关于NPE, 我在代码中没有找到关于如何定义.properties文件路径的行。顺便说一句,这条线应该如何工作

protected static String BASE_URL = System.getenv("base_URL");
我建议您使用Properties类来定义它。我喜欢下面这个

Properties properties = new Properties();
  properties.load(new FileInputStream("yourPropertiesFilePath"));
  String browserName = properties.getProperty("base_URL");

希望这会有所帮助。

首先,这里有很多无用的信息。 另外,我想请您看看代码的这一部分:

您的Driver.class:

driver = DriverFactory.getDriver();
您正在尝试第一次初始化它以便进一步使用。然后:

if (BROWSER == null) {
            WebDriverManager.chromedriver().setup();
            return new ChromeDriver();
        }
你是说如果没有活动浏览器,给我Chrome浏览器。 此外,在交换机中的DriveFactory.class中:

default:
        WebDriverManager.chromedriver().setup();
        return new ChromeDriver();
你是说默认给我Chrome 这可能是调用Chrome而不是FF的原因

关于NPE, 我在代码中没有找到关于如何定义.properties文件路径的行。顺便说一句,这条线应该如何工作

protected static String BASE_URL = System.getenv("base_URL");
我建议你使用p