gpt4 book ai didi

java - 如何初始化 StringoriginalHandle = driver.getWindowHandle();一次?

转载 作者:行者123 更新时间:2023-12-02 10:30:32 28 4
gpt4 key购买 nike

我正在将 TestNG 与 Selenium 一起使用。我正在尝试使用 driver.getWindowHandle();在弹出窗口、iframe 等之间切换。

问题是,如果我在 TNGDriver 类中这样声明它

public String originalHandle = driver.getWindowHandle();

我得到一个java.lang.NullPointerException(显然,因为这是在驱动程序之前初始化的)。我如何声明一次并开始在其他类中使用它?请记住,我的类在它们之间进行了扩展,我需要在其他类的方法内使用此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);
}

这是我的其他类(class):

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();
}

最佳答案

您可以使用设计模式来做到这一点

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

关于java - 如何初始化 StringoriginalHandle = driver.getWindowHandle();一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640062/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com