Selenium webdriver 如何获取SeleniumWebDriver中新打开的选项卡的驱动程序实例

Selenium webdriver 如何获取SeleniumWebDriver中新打开的选项卡的驱动程序实例,selenium-webdriver,Selenium Webdriver,我不熟悉编码。据我所知,您已成功登录。在主页中,当我单击指定的链接时,它会在新选项卡中打开,这是预期的行为。 现在,当我尝试单击新打开的选项卡中的元素时,我没有得到这样的元素异常,因为驱动程序实例指向第一个选项卡,而不是第二个选项卡。 如何获取新打开选项卡的驱动程序实例。 下面是我正在使用的代码 public class newTab extends BaseTest { @Test public void createNew() { OtherPage cr

我不熟悉编码。据我所知,您已成功登录。在主页中,当我单击指定的链接时,它会在新选项卡中打开,这是预期的行为。 现在,当我尝试单击新打开的选项卡中的元素时,我没有得到这样的元素异常,因为驱动程序实例指向第一个选项卡,而不是第二个选项卡。 如何获取新打开选项卡的驱动程序实例。 下面是我正在使用的代码

public class newTab extends BaseTest {

    @Test
    public void createNew()  {
        OtherPage create = PageFactory.initElements(driver,OtherPage.class);
        Thread.sleep(10000);
        create.clickOnTab();// At this line I am getting no such element exception

    }
}
//这是基类

public class BaseTest {
    public static WebDriver driver ;

    @BeforeTest
    public void setUp() {
        System.setProperty("webdriver.chrome.driver", "/chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("My url");

    }
}
//这是登录测试

public class LoginTest extends BaseTest {

    @Test
    public void login() throws InterruptedException {
        LoginPage loginpage = PageFactory.initElements(driver, LoginPage.class);
                loginpage.enterUser_Name(userName);
                loginpage.enterPass_Word(passWord);
                loginpage.clickLoginButton();
            }
        }
        Thread.sleep(5000);
        loginpage.ClickOnTab();
        Thread.sleep(5000);
        loginpage.clickOnLink(); //At this line, new tab is opened automatically.
        Thread.sleep(5000);
       }
}
//在新打开的选项卡中,我需要单击一些元素。这是我正在使用的代码

public class newTab extends BaseTest {

    @Test
    public void createNew()  {
        OtherPage create = PageFactory.initElements(driver,OtherPage.class);
        Thread.sleep(10000);
        create.clickOnTab();// At this line I am getting no such element exception

    }
}
请帮助我如何在新打开的选项卡上执行操作,并告诉我哪里出错。

请尝试下面的代码

    public class LoginTest extends BaseTest {

    @Test
    public void login() throws InterruptedException {
        LoginPage loginpage = PageFactory.initElements(driver, LoginPage.class);
                loginpage.enterUser_Name(userName);
                loginpage.enterPass_Word(passWord);
                loginpage.clickLoginButton();
            }
        }
        Thread.sleep(5000);
        loginpage.ClickOnTab();
        Thread.sleep(5000);
        loginpage.clickOnLink(); //At this line, new tab is opened automatically.
        Thread.sleep(5000);
       }

     public String getLocalWindowHandle (){
        return driver.getWindowHandle();
     } 
}


public class newTab extends BaseTest {

    LoginTest loginTest = new LoginTest();

    @Test
    public void createNew()  {
        OtherPage create = PageFactory.initElements(driver,OtherPage.class);
        Thread.sleep(10000);

        ArrayList listOfAllWindowHandles = new ArrayList(driver.getWindowHandles());

        driver.switchTo().window((String) listOfAllWindowHandles.get(0));

        create.clickOnTab();
        driver.close();

        String firstWindowHandle = loginTest.getLocalWindowHandle();
        driver.switchTo().window(firstWindowHandle);


    }
}
试试下面的代码

    public class LoginTest extends BaseTest {

    @Test
    public void login() throws InterruptedException {
        LoginPage loginpage = PageFactory.initElements(driver, LoginPage.class);
                loginpage.enterUser_Name(userName);
                loginpage.enterPass_Word(passWord);
                loginpage.clickLoginButton();
            }
        }
        Thread.sleep(5000);
        loginpage.ClickOnTab();
        Thread.sleep(5000);
        loginpage.clickOnLink(); //At this line, new tab is opened automatically.
        Thread.sleep(5000);
       }

     public String getLocalWindowHandle (){
        return driver.getWindowHandle();
     } 
}


public class newTab extends BaseTest {

    LoginTest loginTest = new LoginTest();

    @Test
    public void createNew()  {
        OtherPage create = PageFactory.initElements(driver,OtherPage.class);
        Thread.sleep(10000);

        ArrayList listOfAllWindowHandles = new ArrayList(driver.getWindowHandles());

        driver.switchTo().window((String) listOfAllWindowHandles.get(0));

        create.clickOnTab();
        driver.close();

        String firstWindowHandle = loginTest.getLocalWindowHandle();
        driver.switchTo().window(firstWindowHandle);


    }
}

实际上,在我的代码中,我将编写与newTab类类似的其他类。对于每个类,我是否应该每次都编写所有这些步骤?有没有其他简单的方法来获取实例?@Raju上面的代码只是新标签的解决方案。如果你必须在你的自动化周期中的任何地方打开新的标签,你必须得到新窗口的句柄并处理它,然后关闭它并切换到原来的窗口。非常感谢。单击链接后,我在loginTest类中使用了下面两行代码。成功了。“ArrayList allTabs=new ArrayList(driver.getWindowHandles());driver.switchTo().window(allTabs.get(1));”如果你发现答案有用,你可以在我的代码中给出相应的@raju评级,我将编写与newTab类类似的其他类。对于每个类,我是否应该每次都编写所有这些步骤?有没有其他简单的方法来获取实例?@Raju上面的代码只是新标签的解决方案。如果你必须在你的自动化周期中的任何地方打开新的标签,你必须得到新窗口的句柄并处理它,然后关闭它并切换到原来的窗口。非常感谢。单击链接后,我在loginTest类中使用了下面两行代码。成功了。“ArrayList allTabs=new ArrayList(driver.getWindowHandles());driver.switchTo().window(allTabs.get(1));”如果你觉得答案有用,你可以相应地给@Raju评分