0

複数のブラウザーを使用してサイトをテストするために、Testng (.xml ファイルを使用して開始) で Selenium WebDriver を使用しています。

xml ファイルからパラメーターを取得し、IF ステートメントを使用してブラウザーを検出し、関連するドライバーを作成して返すメソッドを作成しようとしています。

私が抱えている問題は、パラメータをメソッドに渡そうとするときです。たとえば、「Chrome」を通過すると、IF ステートメントが正常に動作し、ドライバーが作成されます。ただし、パラメーター自体を使用すると、ドライバーが作成されず、最初に使用したときにテストが失敗します。

私が使用しているセットアップコードは次のとおりです。

@Parameters ({"driver_property_value","driver_property_location","browser"})
@BeforeClass
public void setUp(String driverPropertyValue, String driverPropertyLocation, String browser) throws Exception {
    Setup setup = new Setup();

    //set properties
    System.setProperty(setup.driverPropertyValue(driverPropertyValue),setup.driverPropertyLocation(driverPropertyLocation));
    driver = setup.driver(browser);
    baseUrl = setup.baseURL();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}

それが呼んでいるものは次のとおりです。

public WebDriver driver(String browser)
{
    WebDriver value = null;

    if (browser == "chrome")
    {
    value = new ChromeDriver();
    }
    return value;
}

テストを実行してパラメーターを渡すために使用しているtestng xmlは次のとおりです。

<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd">
<suite name = "testng" verbose="1">
<parameter name="driver_property_value" value="webdriver.chrome.driver"/>
<parameter name="driver_property_location" value="C:/chromedriver.exe"/>
<parameter name="browser" value="chrome"/>
<test name="chrome_tests">
    <packages>
        <package name="com.LoginPage"/>
    </packages>
</test>

最初のセットアップは正常に機能しているように見えますが、パラメーターを使用するときにドライバーの選択が機能していないようです。

ヘルプやアドバイスをいただければ幸いです。

ありがとう

psここに失敗のトレースがありますが、それが役立つかどうかはわかりません.

java.lang.NullPointerException
at com.LoginPage.Login_Logout.setUp(Login_Logout.java:33)
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:80)
at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:543)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:212)
at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107)
at org.testng.TestRunner.privateRun(TestRunner.java:753)
at org.testng.TestRunner.run(TestRunner.java:613)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1137)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1062)
at org.testng.TestNG.run(TestNG.java:974)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:109)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:202)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:173)
4

1 に答える 1

1

==s の比較に参照等価演算子を使用しないでくださいStringequalsまたはを使用しequalsIgnoreCaseます。

参照等価演算子は、両方のオペランドがオブジェクトの同じインスタンスを参照していることを確認します。文字列と多くのオブジェクト タイプでは、これが期待どおりに機能することはめったにありません。

browser == "chrome"は false に解決されます。これは、browser変数に値が含まれていても、文字列を表す別のインスタンス"chrome"である可能性が高いためです。これが意味することの詳細については、この質問を参照してください。"chrome"

したがって、その式が false に解決されると、driverが返されnullsetUpそれが有効なオブジェクト インスタンスであるかのように喜んで使用され、結果としてNullPointerException.

比較を次のように変更します。

if (browser.equals("chrome")) {
   value = new ChromeDriver();
}

このステートメントにはいくつかのバリエーションがあります。equalsIgnoreCase大文字と小文字の任意の組み合わせで一致させるために使用でき、リテラルとローカル変数"chrome"の順序を逆にすることができます。がパラメータとして渡された場合に、その行でa が発生するのを防ぎます。"chrome"browserNullPointerExceptionnullbrowser

if ("chrome".equalsIgnoreCase(browser)) {
   value = new ChromeDriver();
}
于 2012-06-26T18:50:42.250 に答える