Как инициализировать String originalHandle = driver.getWindowHandle ();один раз? - PullRequest
0 голосов
/ 05 декабря 2018

Я использую TestNG с Selenium.Я пытаюсь использовать driver.getWindowHandle ();переключаться между всплывающими окнами, фреймами и т., потому что это инициализируется перед драйвером).Как я могу объявить это один раз и начать использовать его в других классах?Помните, что мои классы расширены между ними, и мне нужно использовать эту переменную originalHandle внутри методов в других классах, например:

public void clickOnFacebookIcon() {
    Assert.assertTrue(true, driver.findElement(By.id(FACEBOOK_ICON)).getText());
    driver.findElement(By.id(FACEBOOK_ICON)).click();   
    for(String handle : driver.getWindowHandles()) {
        if (!handle.equals(originalHandle)) {
            driver.switchTo().window(handle);
            driver.close();
        }
    }   
    driver.switchTo().window(originalHandle);
}

Вот мои другие классы:

TNGDriverкласс

public class TNGDriver {

public static WebDriver driver; 
public static final String CHROME_DRIVER_PATH = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe";   
private WebDriverWait wait; 

@SuppressWarnings("deprecation")
public void init() {        
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--incognito");
    capabilities.setCapability(ChromeOptions.CAPABILITY, options);
    System.setProperty("webdriver.chrome.driver", CHROME_DRIVER_PATH);      
    driver = new ChromeDriver(capabilities);    
    driver.manage().window().maximize();            
}   

public WebDriverWait getWait() {
     wait = new WebDriverWait(driver, 60);
     return wait;
}

Testcase1 класс

public class Testcase1 extends Registration {

    TNGDriver tngDriver = new TNGDriver();

    @BeforeTest
    public void setup() {
        tngDriver.init();
    }

    @Test(priority = 1)
    public void step1_clickOnSignIn() {
        clickOnSignIn();
    }
    @Test(priority = 2)
    public void step2_clickOnFacebookIcon() {
        clickOnFacebookIcon();
    }

1 Ответ

0 голосов
/ 05 декабря 2018

Для этого можно использовать шаблон проектирования

https://en.wikipedia.org/wiki/Singleton_pattern

С этим шаблоном у вас будет только один экземпляр объекта.

class Singleton 
{ 
    // static variable single_instance of type Singleton 
    private static Singleton single_instance = null; 

    // variable of type String 
    public String originalHandle = driver.getWindowHandle(); 

    // private constructor restricted to this class itself 
    private Singleton() 
    { 
       //Do something on constructor
    } 

    // static method to create instance of Singleton class 
    public static Singleton getInstance() 
    { 
        if (single_instance == null) 
            single_instance = new Singleton(); 

        return single_instance; 
    } 
} 

Дляполучить доступ к нему вы можете сделать что-то вроде этого

 Singleton x = Singleton.getInstance(); 
 //To access the String variable 
 x.s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...