Java 自动谷歌登录时,如何关闭浏览器或切换到弹出窗口?

Java 自动谷歌登录时,如何关闭浏览器或切换到弹出窗口?,java,selenium,Java,Selenium,我正在努力更新我的硒知识。所以,我正在写一个脚本来浏览我的谷歌账户。在我成功登录谷歌后,Firefox右上角我的个人资料图标下会出现一个弹出窗口。当我手动签名时,我不再获得这些弹出窗口。这可能是因为cookies或其他浏览器设置。我不关心发生这种情况的原因 但是,由于它发生了,我相信它可能会阻止我的脚本使用driver.close()关闭浏览器;我还尝试了driver.quit();这两种情况都不会导致浏览器关闭 所以,我想我会尝试通过在窗口中进行迭代来切换窗口。这不允许我选择关闭它的弹出窗口

我正在努力更新我的硒知识。所以,我正在写一个脚本来浏览我的谷歌账户。在我成功登录谷歌后,Firefox右上角我的个人资料图标下会出现一个弹出窗口。当我手动签名时,我不再获得这些弹出窗口。这可能是因为cookies或其他浏览器设置。我不关心发生这种情况的原因

但是,由于它发生了,我相信它可能会阻止我的脚本使用driver.close()关闭浏览器;我还尝试了driver.quit();这两种情况都不会导致浏览器关闭

所以,我想我会尝试通过在窗口中进行迭代来切换窗口。这不允许我选择关闭它的弹出窗口

我还尝试创建一个警报并切换到它:

driver.switch to.alert()

驱动程序

这也不是对谷歌的这个弹出窗口不屑一顾

最后,我不在乎这个弹出窗口。我知道我在这里列出了两个不同的问题。但是,最后,我只想关闭浏览器。如果我还可以学习如何切换到这个弹出窗口,并点击x关闭它,这是一个奖励

//代码添加到这里-------------------------

public void sign_out( WebDriver driver )
{
    //At this point,I am already signed in.  But, that Google pop up appears
    //The pop up says "Get to Google faster. Switch your default search engine to Google."

    //Wait for "x" to appear
    myDynamicElement = (new WebDriverWait(driver, wait_for_element_time)).until(ExpectedConditions.visibilityOfElementLocated(By.xpath(x_path_x_pop_up)));

    //This is set above as a class member
    //final String x_path_x_pop_up = "/html/body/div/div[3]/div[1]/div/div/div/div[2]/div[4]/div/a";
    WebElement x_icon = driver.findElement(By.xpath(x_path_x_pop_up));

    //Click x to close it
    x_icon.click();

    String myWindowHandle = driver.getWindowHandle();
    String subWindowHandle = null;

    Set<String> handles = driver.getWindowHandles(); // get all window handles
    Iterator<String> iterator = handles.iterator();
    while (iterator.hasNext()){
        subWindowHandle = iterator.next();
    }
    driver.switchTo().window(subWindowHandle); // switch to popup window

}

只要您使用Java,您就可以尝试Robot框架和sendKeys作为解决方案(ALT+F4):


因此,我的问题与我代码中JUnit部分的错误有关。我把这些部分注释掉了。一旦一切正常,driver.quit()就会关闭浏览器


我还做了一些研究,发现JUnit不允许在不同的@Test测试之间传递类值。因此,我还将所有打开的浏览器和关闭的浏览器移到了同一个@Test中。这也清理了一切。

你在说什么样的弹出窗口?提供你尝试过的代码。我尝试过开关手柄,但似乎没有任何运气。我会再试一次,也许我做错了什么。
    //Wait for "Sign Out" button to appear
    myDynamicElement = (new WebDriverWait(driver, wait_for_element_time)).until(ExpectedConditions.visibilityOfElementLocated(By.xpath(x_path_sign_out_button)));

    //Get sign out button
    WebElement sign_out_button = driver.findElement(By.xpath(x_path_sign_out_button) );

    sign_out_button.click();
}
import java.lang.reflect.*;
import java.awt.Robot;
import java.awt.event.KeyEvent;


public class RobotUtilities {

    public static void sendKeyCombo(String keys[]) {
        try {

            Robot robot = new Robot();

            Class<?> cl = KeyEvent.class;

            int [] intKeys = new int [keys.length];

            for (int i = 0; i < keys.length; i++) {
                Field field = cl.getDeclaredField(keys[i]);
                intKeys[i] = field.getInt(field);
                robot.keyPress(intKeys[i]);
            }

            for (int i = keys.length - 1; i >= 0; i--)
                robot.keyRelease(intKeys[i]);
        }
        catch (Throwable e) {
            System.err.println(e);
        }
    }


    // main for testing purposes
    public static void main(String args[]) {
        String [] keys = {"VK_ALT", "VK_F4"};
        sendKeyCombo(keys);
    }

}
// Store the current window handle
String winHandleBefore = driver.getWindowHandle();

// Perform the click operation that opens new window

// Switch to new window opened
for(String winHandle : driver.getWindowHandles()){
    driver.switchTo().window(winHandle);
}

// Perform the actions on new window

// Close the new window, if that window no more required
driver.close();

// Switch back to original browser (first window)
driver.switchTo().window(winHandleBefore);

// Continue with original browser (first window)