如何获取Selenium WebDriver

时间:2019-10-04 19:02:15

标签: selenium-webdriver

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

//这是基类。

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 个答案:

答案 0 :(得分:0)

尝试以下代码

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


    }
}