【问题标题】:How to open multiple tabs and switch between through Selenium and Webdriver?如何通过 Selenium 和 Webdriver 打开多个选项卡并在它们之间切换?
【发布时间】:2018-08-16 12:46:07
【问题描述】:

我用谷歌搜索了这段代码,但没有得到正确的代码。我有一个场景,我们的应用程序有 5 个模块,我想在每个选项卡上打开它,因为我需要在它们之间多次切换,请帮助

这不起作用:

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t");

【问题讨论】:

    标签: java selenium selenium-webdriver webdriver window-handles


    【解决方案1】:

    这是通过 Selenium Webdriver 打开多个选项卡并在它们之间切换的示例:

    • 代码块:

      import java.util.Set;
      
      import org.openqa.selenium.JavascriptExecutor;
      import org.openqa.selenium.WebDriver;
      import org.openqa.selenium.firefox.FirefoxDriver;
      import org.openqa.selenium.support.ui.ExpectedConditions;
      import org.openqa.selenium.support.ui.WebDriverWait;
      
      public class WINDOW_HANDLE_ITERATE_Firefox 
      {
          public static void main(String[] args) throws Exception 
          {
              System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
              WebDriver driver =  new FirefoxDriver();
              driver.get("http://www.google.com");
              String parent_window = driver.getWindowHandle();
              System.out.println("Parent Window Handle is: "+driver.getWindowHandle());
              System.out.println("Page Title is: "+driver.getTitle());
              ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
              new WebDriverWait(driver,10).until(ExpectedConditions.numberOfWindowsToBe(2));
              Set<String> allWindows_1 = driver.getWindowHandles();
              System.out.println("Total Windows: "+allWindows_1.size());
              for(String hand1:allWindows_1)
              if(!parent_window.equals(hand1))
              {
                  driver.switchTo().window(hand1);
                  new WebDriverWait(driver,10).until(ExpectedConditions.titleContains("Facebook"));
                  String first_child_window = driver.getWindowHandle();
                  System.out.println("First Child Window Handle is: "+first_child_window);
                  System.out.println("First Child Window Page Title is: "+driver.getTitle());
                  driver.close();
              }
              driver.switchTo().window(parent_window);
              System.out.println("Current Window Handle is : "+driver.getWindowHandle()+ " which is same as "+parent_window +", which is the parent window handle" );
              driver.quit();
          }
      }
      
    • 控制台输出:

      INFO: Detected dialect: W3C
      Parent Window Handle is: 6442450945
      Page Title is: Google
      Total Windows: 2
      First Child Window Handle is: 6442450949
      First Child Window Page Title is: Facebook – log in or sign up
      Current Window Handle is : 6442450945 which is same as 6442450945, which is the parent window handle
      

    【讨论】:

    • @Ashwath 错误说明了什么?使用错误堆栈跟踪更新问题。我已经使用JavascriptExecutor 强制打开一个新选项卡,当您单击某些元素时,必须通过您的应用程序本身来完成。其余逻辑将保持原样
    • 它正在运行,我导入了 JavascriptExecutor,你能解释一下如何修改此代码以打开另一个选项卡吗?
    【解决方案2】:

    使用getWindowHandles你可以多次切换url。这里首先我切换url并识别标签,每个标签应该是一个唯一的url,我们可以通过url来识别它。

       for (String window : driver.getWindowHandles()) {
        driver.switchTo().window(window);
        if (driver.getCurrentUrl().contains("google.com")) {    
         //Your operation     
        }       
        if (driver.getCurrentUrl().contains("yahoo.com")) {
        }
        //Your operation
        }
    

    例如,您在两个标签中打开谷歌和雅虎,然后您可以切换标签并识别标签并在那里进行任何操作。

    希望对你有帮助

    【讨论】:

    • 打开空白标签
    【解决方案3】:

    你可以试试这个,

    要使用 JavascriptExecutor 打开新标签页,

    ((JavascriptExecutor) driver).executeScript("window.open()");
    ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1));
    

    将根据索引控制标签:

    driver.switchTo().window(tabs.get(1));
    

    主选项卡上的驱动程序控件:

    driver.switchTo().window(tabs.get(0));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-16
      • 2018-12-15
      • 2014-10-20
      • 2014-08-11
      • 2012-09-25
      • 2021-12-21
      • 2020-06-26
      相关资源
      最近更新 更多