【问题标题】:How to effectively manage browser tabs\windows in Selenium? [duplicate]如何有效管理 Selenium 中的浏览器选项卡\窗口? [复制]
【发布时间】:2019-09-11 10:10:23
【问题描述】:

这是我用来学习 Selenium 的书中的代码 sn-p

public class WindowHandlingTest {
WebDriver driver;
@BeforeMethod
public void setup() throws IOException {
     System.setProperty("webdriver.chrome.driver",
             "./src/test/resources/drivers/chromedriver");
     driver = new ChromeDriver();
     driver.get("http://guidebook.seleniumacademy.com/Window.html");
}

@Test
public void handleWindow() {
    String firstWindow = driver.getWindowHandle();
    System.out.println("First Window Handle is: " + firstWindow);
    WebElement link = driver.findElement(By.linkText("Google Search"));
    link.click();
    String secondWindow = driver.getWindowHandle();
    System.out.println("Second Window Handle is: " + secondWindow);
    System.out.println("Number of Window Handles so for: "
            + driver.getWindowHandles().size());

这段代码的问题是,当打开一个新标签时,selenium 仍然认为第一个标签打开了,这使得结果绝对错误。只有当我创建所有窗口的 ArrayList 并按索引引用特定的选项卡/窗口时,代码才能按预期工作。还有其他管理浏览器选项卡/窗口的“正确”方法吗?书上的代码不正确吗?

【问题讨论】:

标签: java selenium selenium-webdriver selenium-ide


【解决方案1】:

getWindowHandle() (singular) 将获得当前焦点窗口的句柄。

getWindowHandles() ("s") 将获取所有当前打开的窗口/选项卡的句柄,按照它们打开的顺序。

仅当我创建所有窗口的 ArrayList 并按索引引用特定选项卡/窗口时,代码才能按预期工作。

因此,它认为这是正确的做法。

【讨论】:

    【解决方案2】:

    link.click();之后需要先切换,然后才能处理新标签。

    link.click();
    
    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1));
    
    String secondWindow = driver.getWindowHandle();
    System.out.println("Second Window Handle is: " + secondWindow);
    System.out.println("Number of Window Handles so for: "
                    + driver.getWindowHandles().size());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 2011-01-05
      相关资源
      最近更新 更多