将PhantomJS二进制文件添加到Maven项目的更好方法?

问题描述 投票:2回答:2

我尝试使用phantomjs-maven-plugin安装phantomjs二进制文件。我想在Tomcat7服务器上运行测试,这就是为什么我需要自动配置二进制文件的原因。

这是我的pom.xml

<properties>
    <ghostdriver.version>1.2.0</ghostdriver.version>
    <phantomjs.version>1.9.7</phantomjs.version>
    <phantomjs-maven-plugin.version>0.7</phantomjs-maven-plugin.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.47.1</version>
    </dependency>

    <dependency>
        <groupId>com.github.detro</groupId>
        <artifactId>phantomjsdriver</artifactId>
        <version>${ghostdriver.version}</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core" -->
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.21</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.21</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.21</version>
    </dependency>
</dependencies>

<build>
    <sourceDirectory>src</sourceDirectory>

    <plugins>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <warSourceDirectory>WebContent</warSourceDirectory>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>

        <plugin>
            <groupId>com.github.klieber</groupId>
            <artifactId>phantomjs-maven-plugin</artifactId>
            <version>${phantomjs-maven-plugin.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>install</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <version>1.9.7</version>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.17</version>
            <configuration>
                <systemPropertyVariables>
                    <phantomjs.binary>${phantomjs.binary}</phantomjs.binary>
                </systemPropertyVariables>
            </configuration>
        </plugin>

    </plugins>

</build>

然后这就是我初始化网络驱动程序的方式....只要看一下构造函数,然后跳到底部的main()函数,>

public class FindTrains {

    private WebDriver driver;
    //private WebDriverWait wait;
    JavascriptExecutor js;

    String baseURL = "http://www.indianrail.gov.in/inet_Srcdest.html";

    public FindTrains(){

        driver = new PhantomJSDriver();
        //((HtmlUnitDriver)driver).setJavascriptEnabled(true);
        //wait = new WebDriverWait(driver, 2);
        js = (JavascriptExecutor) driver;
    }

    public void getTrains(String src, String dest){
        driver.get(baseURL);    

        WebElement elemSrc =  driver.findElement(By.xpath(xpathSrc));
        setAttributeValue(elemSrc, src.toUpperCase());

        WebElement elemDest = driver.findElement(By.xpath(xpathDest));
        setAttributeValue(elemDest, dest.toUpperCase());        

        WebElement elemGetDetails = driver.findElement(By.xpath("//*[@id='formId']/table/tbody/tr/td/table/tbody/tr[2]/td[2]/table/tbody/tr/td/table/tbody/tr[16]/td[2]/input[1]"));
        elemGetDetails.click();

        System.out.println(driver.getCurrentUrl()+ " "+ driver.getTitle());

    }

    public void setAttributeValue(WebElement elem, String value){
        String scriptSetAttrValue = "arguments[0].setAttribute(arguments[1],arguments[2]);";        
        js.executeScript(scriptSetAttrValue, elem, "value", value);
    }
    public static void main(String [] args){
        System.out.println(System.getProperty("phantomjs.binary"));
        new FindTrains().getTrains("nad", "ndls");

    }
} 

所以问题是我无法验证我的二进制文件是否已安装...。即使安装了,为什么main() prints null for system.property("phantomjs.binary")

我提供了完整的pom.xml和Java代码...请帮助我看看我是什么做错了

编辑:

在main()函数中,我通过创建FindTrains对象并在该对象上调用FindTrains来调用getTrains()。但是由于缺少二进制文件而未配置driver,因此main()的第一行将显示null

我尝试使用phantomjs-maven-plugin安装phantomjs二进制文件。我想在Tomcat7服务器上运行测试,这就是为什么我需要自动配置二进制文件的原因。这是我的pom.xml <...>

java maven selenium-webdriver phantomjs phantomjs-maven-plugin
2个回答
5
投票

您可以使用WebDriverManager。只需添加以下依赖项:


1
投票

未设置系统属性的原因是因为您正在使用maven-surefire-plugin进行设置。那是在maven测试阶段运行所有JUnit测试的插件。因此,surefire执行的任何JUnit测试都将具有系统属性。但是,听起来您正在运行的是类的main()方法,而不是JUnit的,因此系统属性当然不存在。

© www.soinside.com 2019 - 2024. All rights reserved.