Selenium Web 驱动程序 Java 代码未从存储在包文件夹下的 src 文件夹中的 "Object.Properties" 文件中读取 xpath / Class id / link id

Selenium Web Driver Java codes are not reading xpath / Class id / link id from "Object.Properties" file stored in the src folder under package folder

我在 Eclipse 中使用 Selenium Web 驱动程序和 Java,我正在尝试从存储在 src 中的 "Object.Properties" 文件中读取 xpath/Class id / link id包文件夹下的文件夹并从数据库中填充测试数据。但是,在从以下 属性 文件中读取第二个 属性 后,脚本未读取 属性 的电子邮件、密码和提交。我无法弄清楚为什么脚本没有读取这些 属性.

我的脚本将使用存储在包文件夹下的 src 文件夹中的 "Object.Properties" 文件中的 xpath / Class id / link id 识别网络字段、按钮、link .并且对于网页字段脚本将从数据库中获取测试数据并将它们填充到网页的特定字段中。

以下 属性 存储在 "Object.Properties" 文件中,此 属性 文件存储在包文件夹下的 src 文件夹中:

URL = http://web.com/user-portal
ClickOnLoginLink = //*[@id='app']/div/main/section/ul/li[1]/a
Email = //input[@name='username']
Pwd = //input[@name='password']
Submit = //button[@name='loginButton']

以下Failure异常显示:

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//input[@name='username']"}
Command duration or timeout: 12 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:03:33'
System info: host: 'CAEITVDI-085', ip: '172.23.212.109', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_66'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, handlesAlerts=true, databaseEnabled=true, version=41.0.1, platform=WINDOWS, nativeEvents=false, acceptSslCerts=true, webStorageEnabled=true, locationContextEnabled=true, browserName=firefox, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: d0672bd2-d9d0-413e-a734-1865a9cce733
*** Element info: {Using=xpath, value=//input[@name='username']}
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:500)
    at org.openqa.selenium.By$ByXPath.findElement(By.java:361)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
    at com.provider.ProApp.testUserNamePassword(ProApp.java:76)
    at com.provider.ProApp.setUpConnection(ProApp.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
    at org.testng.TestNG.run(TestNG.java:1048)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:112)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:176)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//input[@name='username']"}
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.52.0', revision: '4c2593c', time: '2016-02-11 19:03:33'
System info: host: 'CAEITVDI-085', ip: '172.23.212.109', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.8.0_66'
Driver info: driver.version: unknown
    at <anonymous class>.FirefoxDriver.prototype.findElementInternal_(file:///C:/Users/SAV19734/AppData/Local/Temp/anonymous6689352326673970234webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10723)
    at <anonymous class>.FirefoxDriver.prototype.findElement(file:///C:/Users/SAV19734/AppData/Local/Temp/anonymous6689352326673970234webdriver-profile/extensions/fxdriver@googlecode.com/components/driver-component.js:10732)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_/h(file:///C:/Users/SAV19734/AppData/Local/Temp/anonymous6689352326673970234webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12614)
    at <anonymous class>.DelayedCommand.prototype.executeInternal_(file:///C:/Users/SAV19734/AppData/Local/Temp/anonymous6689352326673970234webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12619)
    at <anonymous class>.DelayedCommand.prototype.execute/<(file:///C:/Users/SAV19734/AppData/Local/Temp/anonymous6689352326673970234webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12561)

这是我的基地class代码:

package com.provider;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Properties;
import oracle.net.ns.NetException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeSuite;


public class BaseClass {

    static WebDriver driver;

     @BeforeSuite
     public void setup() throws InterruptedException, IOException{

         driver=new FirefoxDriver();

         driver.manage().window().maximize();


         Properties obj = new Properties();

         FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
         obj.load(objfile);

        driver.get(obj.getProperty("URL"));
     }

}

这是我的扩展 class 代码:

package com.provider;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
import org.testng.annotations.Test;



public class ProApp extends BaseClass{



@Test
    public void setUpConnection() throws ClassNotFoundException, SQLException, FileNotFoundException, InterruptedException, IOException {

         String driver_DBPath = "jdbc:oracle:thin:@Host:Port:SID";
         String DB_username = "*****";
         String DB_password = "*****";
     String Query = "select * from Table";
     Connection con = DriverManager.getConnection(driver_DBPath, DB_username, DB_password);
     Statement stmt = con.createStatement();
     ResultSet rs = stmt.executeQuery(Query);


     while(rs.next()){

         String Email = rs.getString("CLAIM_NUMBER");
         String Pwd = rs.getString("INDIVIDUAL_NUM");

         testUserNamePassword(Email, Pwd);
     }

    }

    @Test(priority=1)
    public void clickLoginLink() throws InterruptedException, IOException {

    Properties obj = new Properties();

    FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
    obj.load(objfile);


    Thread.sleep(1000);
    driver.findElement(By.xpath(obj.getProperty("ClickOnLoginLink"))).click();
    Thread.sleep(1000);

    }

    @Test(priority=2)
    public void testUserNamePassword(String Email1, String Pwd1) throws InterruptedException, IOException {

    Thread.sleep(1000);
    Properties obj = new Properties();

    FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
    obj.load(objfile);

    Thread.sleep(1000);
    driver.findElement(By.xpath(obj.getProperty("Email"))).clear();
    Thread.sleep(1000);
    driver.findElement(By.xpath(obj.getProperty("Email"))).sendKeys(Email1);
    Thread.sleep(1000);
    driver.findElement(By.xpath(obj.getProperty("Pwd"))).clear();
    Thread.sleep(1000);
    driver.findElement(By.xpath(obj.getProperty("Pwd"))).sendKeys(Pwd1);
    Thread.sleep(1000);
    driver.findElement(By.xpath(obj.getProperty("Submit"))).click();
    Thread.sleep(1000);

    }

    @Test(priority=3)
    public void loginVerify() throws InterruptedException, IOException{

        Properties obj = new Properties();

        FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
        obj.load(objfile);

        Assert.assertEquals("Wel Come To Testing World!!!", driver.findElement(By.xpath(obj.getProperty("WelComeToTestingWorld"))).getText());

    }    

    @Test(priority=4)
    public void logonVerify() throws InterruptedException, IOException{

        Properties obj = new Properties();

        FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
        obj.load(objfile);

        WebElement DashboardHeader = driver.findElement(By.xpath(obj.getProperty("WelComeToTestingWorld")));
        DashboardHeader.getText().equals("Wel Come To Testing World!!!");

    }

}

实际上,我发现我没有在提供数据库连接方法信息的地方给予优先级,因此当脚本为 运行 时,脚本遵循 TestNG 框架以执行测试和脚本启动执行 Test(priority=1)、Test(priority=2) 等等...对于数据库连接,我在启动数据库连接方法之前只提供了 "Test"。我还应该将数据库连接方法的优先级设置为 Test(priority=2)。所以只需优先考虑数据库连接方法即可解决我的问题。