当前位置: 首页 > 知识库问答 >
问题:

在Selenium中从一个方法传递WebDrive实例到另一个方法(在同一类中)

常朗
2023-03-14

我的课上一共有四种方法

我已经创建了一个静态WebDriver对象

static WebDriver driver;

方法1:登录站点(这里我初始化WebDriver=new-FirefoxDriver()

方法2:单击站点中的链接(使用WebDriver驱动程序),单击后,该链接将在同一浏览器的“新建”选项卡中打开

方法三:

现在在方法3中,我切换到新选项卡,并在新选项卡中使用web元素执行一些操作

下面的代码用于切换到新标签

ArrayList<String> tabss = new ArrayList<String> (driver.getWindowHandles());
driver.switchTo().window(tabss.get(1));

方法4:我想再次在新选项卡中执行更多操作

现在我需要方法4中方法3中使用的相同驱动程序实例(选项卡)。

我怎么知道

如果我在方法4中使用“driver”,则为空。

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

    }

}

共有1个答案

范振海
2023-03-14

测试的顺序无法保证,因此需要在测试开始时初始化驱动程序

将初始化代码移动到驱动程序的声明中

static WebDriver driver = new FirefoxDriver();

编辑

在@Laazo评论之后,我认为这比将其添加@BeforeClass要好,因为如果您切换到TestNG框架,您将需要将JUnit5更改或升级到@BeforeAll

 类似资料:
  • 问题内容: 我想从一个类到另一个类调用一个方法,不知道在不扩展包含该方法的类的情况下是否可行。我尝试导入包,那样我认为应该允许使用该方法,因为它是一个公共方法,但是并不成功。 试图使用此链接作为参考,但我不理解(因为它是android的应用。) 伪代码举例说明 问题答案: 其他方法可能是,为其他类创建对象,然后在该对象上调用方法。像下面这样。

  • 问题内容: 我是python的新手。我试图在类中将值从一种方法传递给另一种方法。我搜索了该问题,但无法获得适当的解决方案。因为在我的代码中,“ if”正在调用类的方法“ on_any_event”,而该方法反过来应该调用我的另一个方法“ dropbox_fn”,该方法利用了“ on_any_event”中的值。如果“dropbox_fn”方法在类之外,它将起作用吗? 我将用代码说明。 这里的主要问

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 我刚刚开始使用JProfiler(版本11.0.1)。在分析了我的测试应用程序(检测)后,我转到“CPU视图- A类 B类 所以,我的问题是在哪里寻找从ClassA发送到ClassB的数据大小? 提前谢谢。

  • 我创建了两个类:和。下面是进行计算的方法: 这里是一个调用并显示结果的函数,不幸的是,我无法根据这本书要求它运行的方式来运行它。 任何提示都会帮助我在我的再教育过程中。

  • 我的Java包中有四个类。只有一个类具有方法。 当我运行方法时,我如何运行这四个类中的所有方法? 以下是我的课程: 第一类。JAVA 第二类。爪哇 第三类。JAVA 样品。JAVA