Java 自动谷歌登录时,如何关闭浏览器或切换到弹出窗口?
我正在努力更新我的硒知识。所以,我正在写一个脚本来浏览我的谷歌账户。在我成功登录谷歌后,Firefox右上角我的个人资料图标下会出现一个弹出窗口。当我手动签名时,我不再获得这些弹出窗口。这可能是因为cookies或其他浏览器设置。我不关心发生这种情况的原因 但是,由于它发生了,我相信它可能会阻止我的脚本使用driver.close()关闭浏览器;我还尝试了driver.quit();这两种情况都不会导致浏览器关闭 所以,我想我会尝试通过在窗口中进行迭代来切换窗口。这不允许我选择关闭它的弹出窗口 我还尝试创建一个警报并切换到它: driver.switch to.alert() 驱动程序 这也不是对谷歌的这个弹出窗口不屑一顾 最后,我不在乎这个弹出窗口。我知道我在这里列出了两个不同的问题。但是,最后,我只想关闭浏览器。如果我还可以学习如何切换到这个弹出窗口,并点击x关闭它,这是一个奖励 //代码添加到这里-------------------------Java 自动谷歌登录时,如何关闭浏览器或切换到弹出窗口?,java,selenium,Java,Selenium,我正在努力更新我的硒知识。所以,我正在写一个脚本来浏览我的谷歌账户。在我成功登录谷歌后,Firefox右上角我的个人资料图标下会出现一个弹出窗口。当我手动签名时,我不再获得这些弹出窗口。这可能是因为cookies或其他浏览器设置。我不关心发生这种情况的原因 但是,由于它发生了,我相信它可能会阻止我的脚本使用driver.close()关闭浏览器;我还尝试了driver.quit();这两种情况都不会导致浏览器关闭 所以,我想我会尝试通过在窗口中进行迭代来切换窗口。这不允许我选择关闭它的弹出窗口
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)