[英]How to open multiple windows using Selenium WebDriver
I was trying to learn about "switching between multiple windows" using Selenium WebDriver but for that I am unable to OPEN multiple windows using driver.get() or driver.navigate.to(), that opens the links in the SAME window.我试图使用 Selenium WebDriver 了解“在多个窗口之间切换”,但为此我无法使用 driver.get() 或 driver.navigate.to() 打开多个窗口,这会在同一窗口中打开链接。 Can someone help me to open multiple windows using the same driver instance?
有人可以帮助我使用同一个驱动程序实例打开多个窗口吗? I have provided my sample code.
我已经提供了我的示例代码。 That value of n is coming as 1 and not 2 as its opening in the same window.
n 的值是 1 而不是 2 作为它在同一窗口中的开口。 Please help.
请帮忙。
public class MultipleWindows {
public static void main(String[] args) {
// TODO Auto-generated method stub
WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
driver.get("http://www.google.com");
driver.navigate().to("http://www.facebook.com");
int n = driver.getWindowHandles().size();
System.out.println(n);
}
}
This will also do这也会做
This will create a new tab/window and open the given url这将创建一个新选项卡/窗口并打开给定的 url
String url="whatever url or empty to open a empty tab";
((JavascriptExecutor) driver).executeScript("window.open(arguments[0])", url);
WebDriver navigate().to()
and get()
do exactly the same thing . WebDriver
navigate().to()
和get()
做完全一样的事情。 There is no API to open a new window, but you can use ctrl+n
hotkey:没有打开新窗口的 API,但您可以使用
ctrl+n
热键:
WebDriver driver = new FirefoxDriver();
WebElement body = driver.findElement(By.tagName("body"));
body.sendKeys(Keys.chord(Keys.CONTROL, "n"));
System.out.println(driver.getWindowHandles().size());
driver.quit();
Or you can use few instances of WebDriver (see Selenium Java open new window, close it, and control main window again )或者您可以使用 WebDriver 的几个实例(请参阅Selenium Java 打开新窗口,关闭它,然后再次控制主窗口)
One more way from there从那里开始的另一种方式
WebDriver driver = new ChromeDriver();
driver.get(adminToolURL);
Set<String> windows = driver.getWindowHandles();
String adminToolHandle = driver.getWindowHandle();
((JavascriptExecutor) driver).executeScript("window.open();");
Set<String> customerWindow = driver.getWindowHandles();
customerWindow.removeAll(windows);
String customerSiteHandle = ((String) customerWindow.toArray()[0]);
driver.switchTo().window(customerSiteHandle);
driver.get(customerSiteURL);
driver.switchTo().window(adminToolHandle);
Hope this helps!希望这可以帮助!
I used clear way.我用了明确的方式。 I created driverA and driverB, than i can open 2 windows and operate on its without any mistake:
我创建了驱动程序 A 和驱动程序 B,然后我可以打开 2 个窗口并在没有任何错误的情况下对其进行操作:
private WebDriver driverA;
private WebDriver driverB;
@BeforeClass(alwaysRun = true)
private void executeBeforeClass() {
driverB = BrowserFactory.startBrowser(browser, baseUrl);
driverA = BrowserFactory.startBrowserAsIncognito(browser, baseUrl);
}
@AfterClass(alwaysRun = true)
public void runAfterClass(){
if(driverA!=null){
driverA.quit();
}
if(driverB!=null){
driverB.quit();
}
}
@Test
public void shouldEhcacheWorkFine() {
new LoginPage(driverA).loginToTomcatA(login, password)
.goToListCompaniesPage()
.goToEditFirstCompanyPage()
.setPersonName(NAME);
EditPage editPageB = new LoginPage(driverB).loginToTomcatB(login, password)
.goToListCompaniesPage()
.goToEditFirstCompanyPage();
assertThat(editCompanyPageB.getPersonName(), is(NAME));
}
After call driver.get("http://www.google.com");
调用
driver.get("http://www.google.com");
, to open new window please follow the following approach. , 要打开新窗口,请遵循以下方法。
Use .sendKeys
method:使用
.sendKeys
方法:
String multipleKeys = Keys.chord(Keys.CONTROL, "t");
driver.findElement(By.tagName("body")).sendKeys(multipleKeys);
Use Actions
:使用
Actions
:
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).sendKeys("t").keyUp(Keys.CONTROL).build().perform();
*Note : For Mac OS
please change Keys.CONTROL
to Keys.COMMAND
*注意:对于
Mac OS
请将Keys.CONTROL
更改为Keys.COMMAND
Use JavascriptExecutor
:使用
JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
Hope this helps.希望这可以帮助。
for (int i = 1; i < 10; i++) {
((JavascriptExecutor) driver).executeScript("window.open('https://www.google.com/')");
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(i));
Thread.sleep(2000);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.