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

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

田英卓
2023-03-14

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

//这是基类。

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

    }
}

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

共有1个答案

孙光临
2023-03-14

试试下面的代码

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


    }
}
 类似资料:
  • 我试图编写一个函数,它将接收一个“浏览器实例”(我指的是),并打开一个带有特定URL的新选项卡。 这是函数: 返回True(如果URL有效) 如果有人能告诉我我做错了什么,我将非常感激。如果您有其他方法来完成打开新选项卡的任务,这是可以的。顺便说一下,我曾尝试使用:,但没有成功(我没有得到新的选项卡,也没有异常)

  • 我不熟悉Ruby语言。我想使用selenium web驱动程序使用chrome浏览器。我正在尝试在chrome浏览器中打开新选项卡。但我无法得到。你能检查一下下面的代码吗。如果有什么问题,建议我 输出:chrome中的新选项卡未打开,第二个url也在已使用第一个url打开的同一页面中打开。

  • 我喜欢什么:进入网页,点击一个链接,在一个新的标签打开。确认新选项卡的URL。 我在cucumber/selenium/java中这样做。 这是我的小cucumber 我点击链接的代码: 和代码,我已经尝试从新标签获取URL。我在这里挣扎。我所尝试的一切都会打开一个新的标签,然后屏幕变为空白并显示数据;在URL中,或者它将打开一个新的标签在一个已经这样做的顶部。我知道我不是真的在正确的轨道上。这只

  • 我正在清理网站:http://www.delhidistrictcourts.nic.in/DLCIS-2016-2.html 此页面中有许多链接。用户将单击这些链接中的任何一个(通过SeleniumWeb驱动程序)。问题是,当用户单击这些链接时,它会在一个新选项卡中打开,因为所有链接都有一个属性(“”) 任何想法如何强制,链接打开在同一标签? 这是我写的代码

  • 当在Selenium IE Web Driver中激发时,它将打开一个新窗口,而不是在新选项卡中打开。 通常在IE浏览器中,它会打开一个新的选项卡,但在Selenium Web Driver中不会。 需要修复。

  • 当前代码将我带到正确的url,但最终只打印了我之前所在的url。 我希望在执行click()请求后获得新的current_url