Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium webdriver Java处理2个以上的子窗口_Java_Selenium Webdriver - Fatal编程技术网

Selenium webdriver Java处理2个以上的子窗口

Selenium webdriver Java处理2个以上的子窗口,java,selenium-webdriver,Java,Selenium Webdriver,我有一个基于web的应用程序,它为我在特定新窗口中执行的每个操作启动一个子窗口。例如:父窗口(父按钮)->Child1窗口(Child1按钮)->Child2窗口(Child2按钮) 我点击父窗口中的一个按钮将启动子窗口-1。我单击子窗口-1中的Cbutton1将启动子窗口-2。我单击子窗口2中的Cbutton2,它将启动子窗口3 因此,我假设我已经启动了浏览器应用程序,我必须切换到子窗口-1,执行cbutton-1,切换到子窗口-2,执行cbutton-2操作,切换到子窗口-3,并在该窗口的文

我有一个基于web的应用程序,它为我在特定新窗口中执行的每个操作启动一个子窗口。例如:父窗口(父按钮)->Child1窗口(Child1按钮)->Child2窗口(Child2按钮)

我点击父窗口中的一个按钮将启动子窗口-1。我单击子窗口-1中的Cbutton1将启动子窗口-2。我单击子窗口2中的Cbutton2,它将启动子窗口3

因此,我假设我已经启动了浏览器应用程序,我必须切换到子窗口-1,执行cbutton-1,切换到子窗口-2,执行cbutton-2操作,切换到子窗口-3,并在该窗口的文本区域发送一些文本

这是我的Java代码

    /* driver launches and logs in to the Parent window */
    String winHandleConsole = driver.getWindowHandle();
    log.info("Title of Console window: " +driver.getTitle());
    driver.findElement(Constants.lnkIncidentManagement).click();
    Set<String> strHandles = driver.getWindowHandles();
    log.info("Size of window handle: "+strHandles.size());
    for(String handle: strHandles){
        driver.switchTo().window(handle);
        String strTitle = driver.getTitle();
        if(strTitle.equalsIgnoreCase("Incident Management Console(Search)")){
                driver.manage().timeouts().implicitlyWait(TimeOutInSec, TimeUnit.SECONDS);
                driver.findElement(Constants.lnkNewIncident).click();
                Set<String> strHandle_2 = driver.getWindowHandles();
                log.info("NEW WINDOW HANDLES: "+ strHandle_2.size());
                for(String handle_2: strHandle_2){
                    log.info("-------:" + driver.getTitle());
                    if(driver2.getTitle().equalsIgnoreCase("Incident (New)")){
                        log.info("Title of Incident-New: "+ driver2.getTitle());
                        driver.switchTo().window(handle_2);
                        driver.manage().timeouts().implicitlyWait(TimeOutInSec, TimeUnit.SECONDS);
                        driver.findElement(Constants.txtNewIncidentSummary).sendKeys("This is a text");

                    }
                }
            }`
/*驱动程序启动并登录到父窗口*/
字符串winHandleConsole=driver.getWindowHandle();
log.info(“控制台窗口的标题:+driver.getTitle());
driver.findElement(Constants.lnkIncidentManagement).click();
设置strHandles=driver.getWindowHandles();
log.info(“窗口句柄的大小:+strHandles.Size());
for(字符串句柄:strHandles){
driver.switchTo().窗口(手柄);
String strTitle=driver.getTitle();
if(strttle.equalsIgnoreCase(“事件管理控制台(搜索)”){
driver.manage().timeouts().implicitlyWait(TimeOutInSec,TimeUnit.SECONDS);
driver.findElement(Constants.lnkNewIncident).click();
设置strHandle_2=driver.getWindowHandles();
log.info(“新窗口句柄:+strHandle_2.size());
用于(字符串句柄\u 2:strHandle\u 2){
log.info(“----:”+driver.getTitle());
if(driver2.getTitle().equalsIgnoreCase(“事件(新)”){
log.info(“新事件标题:+driver2.getTitle());
驱动程序.切换到().窗口(手柄2);
driver.manage().timeouts().implicitlyWait(TimeOutInSec,TimeUnit.SECONDS);
driver.findElement(Constants.txtNewIncidentSummary).sendKeys(“这是一个文本”);
}
}
}`
我看到一个标题为“事件(新)”的新窗口,当我打印strHandle_2的大小时,我看到3 prited。但是当我打印handle_2变量时,我看不到打印的标题


如何从父窗口切换到子窗口1,从子窗口切换到子窗口2?

假设您已经在使用两个窗口,现在您想单击一个链接打开第三个窗口,并想打开第三个窗口: 我已经写了一个简单的逻辑和它的工作。。。。。。。。。。。。。。。。 将WebElement传递到要单击的位置

public static void switchToWindow(WebElement ele)
    {
        try {
            Set<String> OldAllWindows = GenericMethods.driver.getWindowHandles();
            ele.click();
            Set<String> NewAllWindows = GenericMethods.driver.getWindowHandles();
            for(String newWindow : NewAllWindows)
            {
                if(!OldAllWindows.contains(newWindow))
                {
                    GenericMethods.driver.switchTo().window(newWindow);
                }
            }

            //  
        } catch (Exception e) {
            System.out.println("Issue in Switching Window"+e.getMessage());
        }

    }
公共静态无效切换到窗口(WebElement ele)
{
试一试{
设置OldAllWindows=GenericMethods.driver.getWindowHandles();
ele.click();
设置NewAllWindows=GenericMethods.driver.getWindowHandles();
for(字符串newWindow:NewAllWindows)
{
如果(!OldAllWindows.contains(newWindow))
{
GenericMethods.driver.switchTo().window(新窗口);
}
}
//  
}捕获(例外e){
System.out.println(“切换窗口中的问题”+e.getMessage());
}
}
包装硒;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.WebElement;
导入org.openqa.selenium.chrome.ChromeDriver;
导入org.openqa.selenium.firefox.FirefoxDriver;
导入org.openqa.selenium.interactions.Action;
导入org.openqa.selenium.interactions.Actions;
导入java.util.ArrayList;
导入java.util.Iterator;
导入java.util.Set;
导入java.util.concurrent.TimeUnit;
导入org.openqa.selenium.*;
公共类图书目录
{
公共静态void main(字符串[]args)引发InterruptedException{
//实例化FirefoxDriver
System.setProperty(“webdriver.chrome.driver”,“D:\\selenium\\chromedriver.exe”);
WebDriver驱动程序=新的ChromeDriver();
//最大化浏览器
driver.manage().window().maximize();
//等待10秒
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
//启动softwaretestingmaterial.com
驱动程序。获取(“http://wikipedia.com");
WebElement link=driver.findElement(By.id(“js链接框”);
Actions newwin=新操作(驱动程序);newwin.keyDown(Keys.SHIFT).单击(link).keydup(Keys.SHIFT).构建().perform();
睡眠(6000);
WebElement link2=driver.findElement(By.id(“js-link-box-it”);
Actions newwin2=新操作(驱动程序);
newwin.keyDown(Keys.SHIFT)。单击(link2)。keyUp(Keys.SHIFT)。build()。perform();
睡眠(6000);
WebElement link3=driver.findElement(By.id(“js-link-box-en”);
Actions newwin3=新操作(驱动程序);
newwin.keyDown(Keys.SHIFT).单击(link3).keydup(Keys.SHIFT).build().perform();
睡眠(6000);
整数计数=0;
字符串win=driver.getWindowHandle();
ArrayList allWindows=新的ArrayList(driver.getWindowHandles());
driver.switchTo().window(allWindows.get(1));
睡眠(6000);
WebElement about=driver.findElement(By.xpath(“/*[@title='Find about Wikipedia']);
关于。单击();
}
}

你能发布你正在处理的html吗?@LittlePanda,这个问题不需要html。我的确切问题在我的原始帖子的最后一行中清楚地提到了。而且,html太大了,无法附加。我发现了一个类似的问题-如果你知道窗口名称,请使用
切换到().window(“名称”)
。您所说的
通用方法是什么意思
package selenium;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Action;
import org.openqa.selenium.interactions.Actions;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;

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

        //Instantiating FirefoxDriver
         System.setProperty("webdriver.chrome.driver", "D:\\selenium\\chromedriver.exe");

         WebDriver driver = new ChromeDriver();

        //Maximize the browser
        driver.manage().window().maximize();

        //Implicit wait for 10 seconds
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        //To launch softwaretestingmaterial.com
        driver.get("http://wikipedia.com");

        WebElement link = driver.findElement(By.id("js-link-box-es"));
        Actions newwin = new Actions(driver);                newwin.keyDown(Keys.SHIFT).click(link).keyUp(Keys.SHIFT).build().perform();
        Thread.sleep(6000);

        WebElement link2 = driver.findElement(By.id("js-link-box-it"));
        Actions newwin2 = new Actions(driver);
        newwin.keyDown(Keys.SHIFT).click(link2).keyUp(Keys.SHIFT).build().perform();
        Thread.sleep(6000);

        WebElement link3 = driver.findElement(By.id("js-link-box-en"));
        Actions newwin3 = new Actions(driver);              
        newwin.keyDown(Keys.SHIFT).click(link3).keyUp(Keys.SHIFT).build().perform();
        Thread.sleep(6000);

        int count=0;

        String win = driver.getWindowHandle();

        ArrayList<String> allWindows = new ArrayList<String> (driver.getWindowHandles());


        driver.switchTo().window(allWindows.get(1));
        Thread.sleep(6000);

        WebElement about = driver.findElement(By.xpath("//*[@title='Find out about Wikipedia']"));
        about.click();
    }
}