我班上共有四种方法
我已经创建了一个静态WebDriver
对象
static WebDriver driver;
方法1:登录网站(在这里我初始化WebDriver driver=new new FirefoxDriver();
)
方法2:单击站点中的链接(使用WebDriver驱动程序) 点击后,该链接将在同一浏览器的新标签页中打开
方法3:
现在在方法3中,我切换到新标签页,并对新标签页中的网络元素执行一些操作
下面的代码用于切换到新标签页
ArrayList<String> tabss = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabss.get(1));
方法4:同样,我想在新标签页中执行更多操作
现在,我需要在方法4的方法3中使用的相同驱动程序实例(选项卡)。
我怎么得到
如果在方法4中使用“驱动程序”,则为空。
public class download {
static WebDriver driver;
@Test
public static void login() throws InterruptedException
{
driver = new FirefoxDriver();
driver.manage().window().maximize();
driver.get("__site__");
driver.findElement(By.id("login-email")).sendKeys("__username__");
driver.findElement(By.id("login-password")).sendKeys("__password__");
driver.findElement(By.id("login-submit")).click();
Thread.sleep(3000);
}
@Test
public static void navigatetolearningpage() throws InterruptedException
{
driver.findElement(By.xpath("//div[@class='relative ember-view']")).click();
Thread.sleep(3000);
}
@Test
public static void search() throws InterruptedException, AWTException
{
ArrayList<String> tabss = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabss.get(1));
driver.findElement(By.xpath("//input[@type='text']")).sendKeys("__searchkeyword__");
Thread.sleep(3000);
driver.findElement(By.xpath("//input[@type='text']")).sendKeys(Keys.RETURN);
Thread.sleep(3000);
driver.findElement(By.xpath("//div[@class='search-facet__label']")).click();
}
@Test
public static void course_list() throws InterruptedException
{
//This driver will print as NULL
System.out.println("last method:"+driver);
}
}
答案 0 :(得分:1)
不能保证测试的顺序,因此您需要在测试开始时初始化driver
将初始化代码移至driver
的声明:
static WebDriver driver = new FirefoxDriver();
编辑
在@Laazo评论之后,
我认为这比将其添加到@BeforeClass
更好,因为如果切换到TestNG框架,则需要将JUnit5更改或升级到@BeforeAll