如何使用java在selenium webdriver中不使用页面标题来切换多个窗口?

时间:2015-09-03 08:37:24

标签: java selenium selenium-webdriver

我有2个窗口,页面标题相同,浏览器相同,使用不同的会话。 从第一个窗口执行自动化脚本后,它将打开下一个窗口并执行代码。 我无法切换回窗口。

我使用以下代码:

Set<String> windowIterator = Driver.getWindowHandles();
Iterator Iter = windowIterator.iterator();
String Parent = (String) Iter.next();
String sub = (String) Iter.next();
Driver.switchTo().window(sub);`

我尝试过更新的脚本,这里也面临切换窗口的问题。

包ABC;

import java.util.Iterator;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;




public class UserChat {



    public static void main(String[] args) throws InterruptedException {


        WebDriver user_1 = new FirefoxDriver();

        user_1.manage().window().maximize();
        user_1.get("url");

        // login user_1
        user_1.findElement(By.xpath(".//*[@id='email']")).sendKeys("email1");
        user_1.findElement(By.xpath(".//*[@id='pass']")).sendKeys("pass");
        user_1.findElement(By.xpath("//label[@id='loginbutton']/input")).click();
        Thread.sleep(2000);


        WebDriver user_2 = new FirefoxDriver();
        user_2.manage().window().maximize();
        user_2.get("url");

        // login user_2 
        user_2.findElement(By.xpath(".//*[@id='email']")).sendKeys("email2");
        user_2.findElement(By.xpath(".//*[@id='pass']")).sendKeys("pass");
        user_2.findElement(By.xpath("//label[@id='loginbutton']/input")).click();
        Thread.sleep(2000);



        //click on Chat     
        WebDriverWait wait = new WebDriverWait(user_2, 60);
        WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[2]/div/div/a")));
        element.click();
        Thread.sleep(2000);

        //Search friend to message e.g. for user_1
        user_2.findElement(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[2]/div/div/div/div/div/div[3]/div[2]/div/div/input")).sendKeys("My Friend User1");

        //Send message to friend
         WebElement webElement = user_2.findElement(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[2]/div/div/div/div/div/div[3]/div[2]/div/div/input"));
         webElement.sendKeys(Keys.ENTER);
         Thread.sleep(3000);

         WebDriverWait wait2 = new WebDriverWait(user_2, 60);
        WebElement element2 = wait2.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[1]/div/div[1]/div[2]/div/div/div/div/div[4]/div[4]/div[1]/textarea")));
        element2.click();

         user_2.findElement(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[1]/div/div[1]/div[2]/div/div/div/div/div[4]/div[4]/div[1]/textarea")).sendKeys("hi");
         element2.sendKeys(Keys.ENTER);
         Thread.sleep(2000);

    //   Actions action = new Actions(user_2);
      //   action.sendKeys(Keys.chord(Keys.CONTROL, "T")).build().perform();
      //   action.sendKeys(Keys.ALT,Keys.TAB).build().perform();


         Set<String> handles = user_2.getWindowHandles();
         int index = 0;
        if (handles.size() > index) {
             String handle = handles.toArray()[index].toString();
             user_2.switchTo().window(handle);
        }




    }


}

3 个答案:

答案 0 :(得分:0)

在第二页上完成操作后使用

driver.switchTo().defaultContent();

对于您的代码,您可以使用以下内容: -

//Click your link
driver.findElement(By.xpath("xpath")).click();
//Get all the window handles in a set
Set <String> handles =driver.getWindowHandles();
Iterator<String> it = handles.iterator();
//iterate through your windows
while (it.hasNext()){
String parent = it.next();
String newwin = it.next();
driver.switchTo().window(newwin);
//perform actions on new window
driver.close();
driver.switchTo().window(parent);

答案 1 :(得分:0)

您正在使用两个FirefoxDriver实例 - 实际上有两个不同的进程。使用Web驱动程序,您可以在单个驱动程序实例的窗口之间切换。一旦您最大化第二个驱动程序窗口,切换回上一个驱动程序窗口 - 您必须关闭第二个窗口(这使操作系统选择较早的窗口在顶部),或最小化第二个窗口或使用特定于操作系统像Java Native Access这样的库可以在它们之间切换。

答案 2 :(得分:0)

您正在使用两个不同的驱动程序实例。

如果您想再次与第一个实例进行交互,请使用user_1对象。它会坐在那里直到你关闭它。