Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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 Java在两个浏览器选项卡/窗口之间获取活动窗口标题_Java_Selenium - Fatal编程技术网

如何使用Selenium Java在两个浏览器选项卡/窗口之间获取活动窗口标题

如何使用Selenium Java在两个浏览器选项卡/窗口之间获取活动窗口标题,java,selenium,Java,Selenium,我可以在两个选项卡/窗口之间切换,但我的要求是了解或获取它们之间的活动窗口 在我的项目中,点击一个页面的webElement就会打开一个随机弹出窗口(选项卡/窗口),我想知道这个(新的)窗口是焦点还是我的原始页面 我试图使用JNAAPI获取活动窗口及其标题,但我的网页是 远程定位 非常感谢完美的解决方案 谢谢驱动程序。getTitle()将为您提供页面标题,您可以使用该标题确定您在哪个页面上,或者您是否在您想要的页面上,然后根据需要使用逻辑切换窗口getTitle()返回一个String,您可以

我可以在两个选项卡/窗口之间切换,但我的要求是了解或获取它们之间的活动窗口

在我的项目中,点击一个页面的webElement就会打开一个随机弹出窗口(选项卡/窗口),我想知道这个(新的)窗口是焦点还是我的原始页面

我试图使用JNAAPI获取活动窗口及其标题,但我的网页是
远程定位

非常感谢完美的解决方案

谢谢

驱动程序。getTitle()
将为您提供页面标题,您可以使用该标题确定您在哪个页面上,或者您是否在您想要的页面上,然后根据需要使用逻辑切换窗口
getTitle()
返回一个
String
,您可以使用其中一个String方法来比较标题,例如:

String title = getDriver().getTitle();

if(!title.equals("Expected Title")) {
        //may be you would like to switch window here
    } 
这将为您提供页面的标题,您可以使用Selenium查看该驱动程序当前所在的页面。

//获取初始窗口句柄
//get initial window handles
Set<String> prevWindowHandles = driver.getWindowHandles();
while(true){
      //get current window handles
      Set<String> currWindowHandles = driver.getWindowHandles();
      //if one of the current window handles not equals to
      //any of the previous window handles,switch to this window
      //and prevWindowHandles = currWindowHandles
      for(String prevHandle : prevWindowHandles){
          int noEqualNum = 0;
          for(String currHandle : currWindowHandles){
              if(!currHandle.equals(prevHandle))
                  noEqualNum++
          }
          if(noEqualNum == currWindowHandles.size()){
             driver.switchTo().window(currWindow);
             prevWindowHandles = currWindowHandles;
                    break;
          }

      }
}
设置prevWindowHandles=driver.getWindowHandles(); while(true){ //获取当前窗口句柄 设置currWindowHandles=driver.getWindowHandles(); //如果当前窗口句柄之一不等于 //任何以前的窗口句柄,切换到此窗口 //和prevWindowHandles=currWindowHandles 用于(字符串prevHandle:prevWindowHandles){ int noEqualNum=0; 用于(字符串currHandle:currWindowHandles){ 如果(!currHandle.equals(prevHandle)) 诺奎尔南++ } if(noEqualNum==currWindowHandles.size()){ driver.switchTo()窗口(currWindow); prevWindowHandles=currWindowHandles; 打破 } } }
如果要断言标题,可以使用xpath选择器:

String pageTitle = driver.findElement(By.xpath("//title[text() = 'Title you looking for']"));

这是一个愚蠢的示例,您可以使用try/catch、实现断言或其他技术来获得所需的结果。

我编写了自己的方法来切换到窗口,如果窗口标题已知,也许其中一些方法会有所帮助。我使用了Selenide(Java)方法来实现这一点,但是如果您有Vanilla WebDriver,您也可以实现同样的功能

/** Switches user to window of user's choice */
      public static void switchToWindow(String windowTitle) {
        WebDriver driver = getWebDriver();
        // Get list of all open tabs - note behaviour may be different between FireFox and Chrome.
        ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
        // iterate through open tabs. If the title of the page is contained in the tab, switch to it.
        for (String windowHandle : driver.getWindowHandles()) {
          String title = getWebDriver().getTitle();
          driver.switchTo().window(windowHandle);
          if (title.equalsIgnoreCase(windowTitle)) {
            break;
          }
        }
      }
/**将用户切换到用户选择的窗口*/
公共静态无效切换窗口(字符串窗口标题){
WebDriver=getWebDriver();
//获取所有打开标签的列表-注意FireFox和Chrome的行为可能不同。
ArrayList tabs=新的ArrayList(driver.getWindowHandles());
//遍历打开的选项卡。如果选项卡中包含页面标题,请切换到该选项卡。
对于(字符串windowHandle:driver.getWindowHandles()){
字符串title=getWebDriver().getTitle();
driver.switchTo().window(windowHandle);
if(标题.相等信号案例(窗口标题)){
打破
}
}
}

此方法可能不会太快,但它将在当前打开的窗口中迭代,并检查标题是否与您指定的标题匹配。

您尝试了什么,结果如何?就像你在学校做的那样。。。请出示你的作品。:)这是获得问题答案的过程的一部分。它对你很有帮助,因为它迫使你调查自己的问题并仔细思考。它还向读者证明,你做了功课,并做出了合理的尝试来回答自己的问题。第三,它帮助读者发现并诊断问题,从而为您提供更好的答案,减少我们浪费的时间。请为您的答案提供一些文字说明。“只有代码”的答案看起来不太好谢谢你的代码片段,它可能会提供一些有限的、即时的帮助。通过展示为什么这是一个很好的问题解决方案,A将极大地提高它的长期价值,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。
/** Switches user to window of user's choice */
      public static void switchToWindow(String windowTitle) {
        WebDriver driver = getWebDriver();
        // Get list of all open tabs - note behaviour may be different between FireFox and Chrome.
        ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
        // iterate through open tabs. If the title of the page is contained in the tab, switch to it.
        for (String windowHandle : driver.getWindowHandles()) {
          String title = getWebDriver().getTitle();
          driver.switchTo().window(windowHandle);
          if (title.equalsIgnoreCase(windowTitle)) {
            break;
          }
        }
      }