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评分