Java 如何在Firefox的当前窗口中启动Selenium?不打开新窗口

Java 如何在Firefox的当前窗口中启动Selenium?不打开新窗口,java,selenium,firefox,selenium-firefoxdriver,new-window,Java,Selenium,Firefox,Selenium Firefoxdriver,New Window,我需要在Firefox的当前窗口中启动JAVA Selenium代码。但是当我启动我的代码时,WebDriver=newfirefoxdriver()将打开新窗口!不需要打开新窗口! 在Selenium中,IDE代码在浏览器的当前窗口中工作 package tm.csgo; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.Firefox

我需要在Firefox的当前窗口中启动JAVA Selenium代码。但是当我启动我的代码时,
WebDriver=newfirefoxdriver()将打开新窗口!不需要打开新窗口!
在Selenium中,IDE代码在浏览器的当前窗口中工作

package tm.csgo;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class Item {

public String siteUrl;
public String url;
public String name;
public int bought;
public int needCount;
public int wantPrice;
public double price;

public void buyProcess() {

    System.out.println("Начало покупки, запуск браузера...");
    System.out.println("Запланировано приобрести " + needCount + " " + name + " предметов.");

    WebDriver driver = new FirefoxDriver();


    while(bought <= needCount){

        System.out.println("Приобретаем " + bought + " предмет");
        driver.get(siteUrl + url);
        price = Double.parseDouble(driver.findElement(By.className("ip-bestprice")).getText());

        System.out.println("Стоимость предмета " + name + ": " + price + " рублей");

        if (price <= wantPrice) {

            System.out.println("Покупаем " + name + "...");
            driver.findElement(By.cssSelector("a.buy-pic-button")).click();
            driver.findElement(By.id("info_dialog_url")).click();

        } else {
            continue;
            }

        System.out.println("Приобретён " + bought + " предмет за " + price + " рублей из " + needCount + " запланированных предметов");
        bought++;
    }

}

public void purchaseReady() {
    //дописать общую сумму затрат
    System.out.println("Приобретено предметов на сумму ...");
    System.out.println("Покупка успешно завершена!");
}
package tm.csgo;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.firefox.FirefoxDriver;
公共类项目{
公共字符串siteUrl;
公共字符串url;
公共字符串名称;
购买公共物品;
公共需求统计;
公共互联网价格;
公开双价;
公共流程(){
系统输出打印(“аааааааааазаааазаа……”);
System.out.println(“需要计数+姓名+姓名”);
WebDriver=newfirefoxdriver();

而在我的例子中,我使用Selenium和junit来运行单独的测试。 以下是基本的体系结构:

  • 我有一个创建Selenium WebDriver实例的单例上下文类,具体取决于浏览器。作为实现的一部分,我将检查
    WebDriver=null;
    。对于浏览器
    if(browser==browser.IE)
    等。以下是返回WebDriver实例的代码:

    public WebDriver getWebDriver() {
        if (webDriver != null) {
            return webDriver;
        }
    }
    
  • 我有一个基本测试类,它实例化了上下文类。在@Before中,我有一个启动浏览器的设置方法:

    @Before
    public final void setUp() {
        startBrowser();
    }
    
    以下是startBrowser方法:

    private void startBrowser() {
        context.getWebDriver().get("about:blank"); 
    }
    
  • 作为基本测试类的一部分,我还有退出浏览器的@AfterClass注释:

    @AfterClass
    public static void tearDownClass() {
        Context.getSingleton().quit();
    }
    
  • 最后一步是包含@Before和@AfterClass之间的所有@Test注释。所有这些注释都将在不重新启动浏览器的情况下执行。 如果您决定进一步开发这个框架,我建议您创建另一个类来扩展test one,它只包含测试(all@test methods)。在我的例子中,我也使用PageObject模式。所有这些都将帮助您获得更好的测试框架结构,并在发生更改时优化您的代码


  • 希望这对您有所帮助!

    您使用的是什么版本的Selenium?这在WebDriver和Selenium2中都是可能的。但不确定其他版本。Selenium和Java.2.53的最新版本是否可能?您可能正在调用
    driver.quit()
    然后。你应该发布你的代码,这样我们就可以查看了。我的代码很简单。我从它开始:
    WebDriver driver=new FirefoxDriver();
    接下来我需要使用这个网站,但这个网站应该有cookies来使用它。但我不能登录每一个代码,因为网站:在哪里登录我应该使用移动蒸汽防护。。。