0

Selenium スクリプトを 3 つのクラス (Grid、Browser、testCase) に分割してカプセル化しようとしています。ブラウザーを開くことはできますが、testCase クラスがそのコマンドを挿入するための接続が失われているようです。

Grid.java

package com.autotrader.grid;

import org.junit.After;
import org.junit.Test;

public class Grid {
    Browser browser = new Browser();
    TestCase testCase = new TestCase();

    public Grid() {
        browser.setUp("http://pbskids.org");
    }

    @Test
    public void main() {
        testCase.runCase();
    }

    @After
    public void tearDown() throws Exception {
        browser.stop();
    }
}

Browser.java

package com.autotrader.grid;

import com.thoughtworks.selenium.Selenium;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriverBackedSelenium;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.util.concurrent.TimeUnit;

public class Browser {

    private String baseUrl;
    private String driverNamespace;
    private String driverLocation;

    private DesiredCapabilities capabilities;
    private WebDriver driver;
    public Selenium selenium;

    // constructor
    public Browser() {

    }

    public DesiredCapabilities getCapabilities() {
        return this.capabilities;
    }

    public String getDriverLocation() {
        return this.driverLocation;
    }

    public String getDriverNamespace() {
        return this.driverNamespace;
    }

    public Selenium getSelenium(){
        return selenium;
    }

    public void open (String url) {
        this.selenium.open(url);
    }

    public void setBaseUrl(String url) {
        this.baseUrl = url;
    }

    public void setCapabilities() {
        this.capabilities = DesiredCapabilities.firefox();
        this.driver = new FirefoxDriver(capabilities);
    }

    public void setDriverLocation(String location) {
        this.driverLocation = location;
    }

    public void setDriverNamespace(String namespace) {
        this.driverNamespace = namespace;
    }

    public void setSpeed(String speed){
        this.selenium.setSpeed(speed);
    }

    public void setUp(String url){
        setDriverNamespace("webdriver.firefox.driver");
        setDriverLocation(System.getenv("ProgramFiles(x86)") + "\\Mozilla Firefox\\firefox.exe");
        System.setProperty(driverNamespace,driverLocation);

        setCapabilities();
        setBaseUrl(url);

        this.selenium = new WebDriverBackedSelenium(driver, url);
        this.driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    public void stop(){
        this.selenium.stop();
    }
}

TestCase.java

package com.autotrader.grid;

import com.thoughtworks.selenium.Selenium;

public class TestCase {

    Browser browser = new Browser();
    Selenium selenium;

    // constructor
    public TestCase(){
        selenium = browser.getSelenium();
    }

    public void runCase(){
        selenium.open("/privacy/termsofuse.html?campaign=fkhp_tou");
        selenium.setSpeed("1000");
    }
}

そう; ドライバーがセットアップされた後、Selenium オブジェクト (Browser.java 内) を使用して開きましたが、Selenium オブジェクト (TestCase.java 内) と対話しようとすると、それが検出されません。助けてくれてありがとう。

4

2 に答える 2

0

それ以外の:

public class Grid {
    Browser browser = new Browser();
    TestCase testCase = new TestCase();

    public Grid() {
    ...

試す:

public class Grid {
    Browser browser = new Browser();
    TestCase testCase = new TestCase(browser); // <-- this line changed

    public Grid() {
    ...

そしてここで:

public class TestCase {

    Browser browser = new Browser();
    Selenium selenium;

    // constructor
    public TestCase(){
        selenium = browser.getSelenium();
    }
    ...

次のようにします。

public class TestCase {

    Browser browser = new Browser();             // <-- this line changed
    Selenium selenium;

    // constructor
    public TestCase(Browser browser){            // <-- this line changed
        this.browser = browser;                  // <-- this line was added
        selenium = browser.getSelenium();
    }
    ...
于 2013-04-22T22:15:39.587 に答える
0

setUp(String url)ブラウザのメソッドを除いて、Selenium オブジェクトを初期化しているようには見えません。そして、そのメソッドもここでは呼び出されていません。

また、ブラウザの Selenium オブジェクトを公開したので、アクセサ メソッドによって割り当てられた別の Selenium オブジェクトを TestCase で宣言する必要はありません。TestCase の Browser オブジェクトから参照するだけです。

于 2013-04-22T22:23:52.193 に答える