[英]How to open multiple windows using Selenium WebDriver
我試圖使用 Selenium WebDriver 了解“在多個窗口之間切換”,但為此我無法使用 driver.get() 或 driver.navigate.to() 打開多個窗口,這會在同一窗口中打開鏈接。 有人可以幫助我使用同一個驅動程序實例打開多個窗口嗎? 我已經提供了我的示例代碼。 n 的值是 1 而不是 2 作為它在同一窗口中的開口。 請幫忙。
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);
}
}
這也會做
這將創建一個新選項卡/窗口並打開給定的 url
String url="whatever url or empty to open a empty tab";
((JavascriptExecutor) driver).executeScript("window.open(arguments[0])", url);
WebDriver navigate().to()
和get()
做完全一樣的事情。 沒有打開新窗口的 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();
或者您可以使用 WebDriver 的幾個實例(請參閱Selenium Java 打開新窗口,關閉它,然后再次控制主窗口)
從那里開始的另一種方式
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);
希望這可以幫助!
我用了明確的方式。 我創建了驅動程序 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));
}
調用driver.get("http://www.google.com");
, 要打開新窗口,請遵循以下方法。
使用.sendKeys
方法:
String multipleKeys = Keys.chord(Keys.CONTROL, "t");
driver.findElement(By.tagName("body")).sendKeys(multipleKeys);
使用Actions
:
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).sendKeys("t").keyUp(Keys.CONTROL).build().perform();
*注意:對於Mac OS
請將Keys.CONTROL
更改為Keys.COMMAND
使用JavascriptExecutor
:
((JavascriptExecutor) driver).executeScript("window.open()");
((JavascriptExecutor) driver).executeScript("window.open('https://google.com')");
希望這可以幫助。
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.