簡體   English   中英

如何使用Java在Selenium Webdriver中的2個瀏覽器之間切換

[英]How to switch between 2 browsers in selenium webdriver with java

我正在使用Java開發Selenium Webdriver。 我想打開瀏覽器,在其中執行一些操作。 然后打開另一個瀏覽器並在其中執行相同的操作,然后返回第一個瀏覽器並執行一些操作。

如何在2個瀏覽器之間切換(而不是2個標簽之間的切換)?

這是我所做的:

@BeforeTest
    public void beforeTest() throws BiffException, IOException,InterruptedException {
System.setProperty("webdriver.chrome.driver","D:\\MyProjects\\SeleniumTrials\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get(properties.getProperty("VAR_BASEURL"));
        driver.manage().window().maximize();
      WebDriver  tempDriver = new ChromeDriver();
        tempDriver.get(properties.getProperty("VAR_BASEURL"));
        tempDriver.manage().window().maximize();
}
@Test
    public void playTournament() throws InterruptedException, BiffException,IOException {
    int rowNumber = 1;
    int newRowNumber=2;
    WebElement login =driver.findElement(By.xpath(properties.getProperty("VAR_LOGIN"))); 
    login.click();
    Thread.sleep(1000);
    WebElement username = driver.findElement(By.xpath(properties.getProperty("VAR_USERNAME")));
    username.clear();
    username.sendKeys(getCellContent(0, rowNumber));
    Thread.sleep(1000);
    WebElement password = driver.findElement(By.xpath(properties.getProperty("VAR_PASSWORD")));
    password.clear();
    password.sendKeys(getCellContent(1, rowNumber));
    Thread.sleep(1000);
    WebElement continueButton = driver.findElement(By.xpath(properties.getProperty("VAR_CONTINUE")));
    continueButton.click();
    Thread.sleep(1000);

   WebElement login =tempDriver .findElement(By.xpath(properties.getProperty("VAR_LOGIN"))); 
   login.click();
   Thread.sleep(1000);
   WebElement username = tempDriver .findElement(By.xpath(properties.getProperty("VAR_USERNAME")));
   username.clear();
   username.sendKeys(getCellContent(0, rowNumber));
   Thread.sleep(1000);
   WebElement password = tempDriver .findElement(By.xpath(properties.getProperty("VAR_PASSWORD")));
   password.clear();
   password.sendKeys(getCellContent(1, rowNumber));
   Thread.sleep(1000);
   WebElement continueButton = tempDriver .findElement(By.xpath(properties.getProperty("VAR_CONTINUE")));
   continueButton.click();

我想這就是你想要的,

  1. 保留兩個瀏覽器對象
  2. 定義在瀏覽器上執行一組操作的方法
  3. 首先使用第一個瀏覽器,然后再次使用第二個瀏覽器,調用此方法
  4. 然后在第一個瀏覽器上執行更多操作

當你做

WebDriver driver = new ChromeDriver();
driver = new ChromeDriver();

您重新初始化driver實例,女巫意味着您松開了第一個瀏覽器。 您可以通過調用getWindowHandles()看到它

driver.getWindowHandles(); // will be 1, the last open browser

如果要使用其他瀏覽器,請使用臨時驅動程序

WebDriver driver = new ChromeDriver();
WebDriver tempDriver = new ChromeDriver();

// do some stuff on tempDriver

tempDriver.close();

// continue working with the first driver

我已經解決了在Typescript中瀏覽器驅動程序之間切換的問題,但是您應該很容易理解該方法並在Java中實現它。

@ TDriver.ts

    import {browser, ProtractorBrowser} from 'protractor';

    export class TDriver {
      private static defaultBrowser: ProtractorBrowser = browser;
      private static activeBrowser;

      public async newDriver() {
        const secondDriver = TDriver.activeBrowser.forkNewDriverInstance();
        await this.setActiveBrowser(secondDriver);
        }

      public setActiveBrowser(driver: ProtractorBrowser) {
        TDriver.activeBrowser = driver;
      }

      public getActiveBrowser() {
        return TDriver.activeBrowser;
      }

      public setDefaultBrowserActive() {
        TDriver.activeBrowser = TDriver.defaultBrowser;
      }

    }

@ Test.ts

import {by} from 'protractor';
import {TDriver} from '../driver/TDriver';

export class Test {
  private driver = new TDriver().getActiveBrowser();

   this.driver.findElement(by.xpath("xPathSelector")).click(); //this click in first native driver instance

   await new TDriver().newDriver(); //create new driver and switch to it!

   this.driver.findElement(by.xpath("xPathSelector")).click(); //this click in the second driver instance

   await new TDriver().setDefaultBrowserActive(); //now we switch and use again native driver

   this.driver.findElement(by.xpath("xPathSelector")).click(); //this click in first native driver instance
}

這些方法使您可以在本機瀏覽器中執行測試,然后創建新實例並在第二個瀏覽器驅動程序中繼續測試。 在我的項目中工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM