index.jspには3つのハイパーリンク(gmail、google、Facebook、javaチュートリアル)があります。クリックごとに)。私のコードで間違ったことを助けてくれる人がいますか?Selenum2:ハイパーリンクをクリックすると同じウィンドウハンドルが表示される
index.jspを
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Selenium Tutorial</title>
</head>
<body>
<h1>
<a href="https://mail.google.com" target="_blank">gmail</a>
</h1>
<h1>
<a href="https://www.google.co.in" target="_blank">google</a>
</h1>
<h1>
<a href="https://www.facebook.com/" target="_blank">facebook</a>
</h1>
<h1>
<a href="http://self-learning-java-tutorial.blogspot.in/"
target="_blank">Java Tutorial</a>
</h1>
App.java
import java.io.IOException;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
public class App {
public static void waitForNumberOfWindowsToEqual(final WebDriver driver, final int numberOfWindows) {
while (driver.getWindowHandles().size() != numberOfWindows) {
}
}
public static void main(String[] args) throws IOException, InterruptedException {
WebDriver driver = new FirefoxDriver();
driver.get("http://localhost:8080/application/index.jsp");
WebElement gmail = driver.findElement(By.linkText("gmail"));
WebElement javaTutorial = driver.findElement(By.partialLinkText("Tutorial"));
String mainWindow = driver.getWindowHandle();
System.out.println("mainWindow handle " + mainWindow);
System.out.println("Total handles " + driver.getWindowHandles().size());
gmail.click();
waitForNumberOfWindowsToEqual(driver, 2);
String gmailWindow = driver.getWindowHandle();
System.out.println("gmailWindow handle " + gmailWindow);
System.out.println("Total handles " + driver.getWindowHandles().size());
javaTutorial.click();
waitForNumberOfWindowsToEqual(driver, 3);
String javaTutorialWindow = driver.getWindowHandle();
System.out.println("javaTutorialWindow handle " + javaTutorialWindow);
System.out.println("Total handles " + driver.getWindowHandles().size());
driver.quit();
}
}
出力
mainWindow handle {c0582dd6-8cab-b14c-8820-8d8ef12f8658}
Total handles 1
gmailWindow handle {c0582dd6-8cab-b14c-8820-8d8ef12f8658}
Total handles 2
javaTutorialWindow handle {c0582dd6-8cab-b14c-8820-8d8ef12f8658}
Total handles 3
感謝。 getWindowHandlesメソッドはSetを返し、SetはLinkedHashSetを使用しない限り順序を保持しません。 HtmlUnitDriver.javaのソースコードを調べると、HashSet(Not LinkedHashSet)を使用してgetWindowHandles関数が実装されます。最後に開いたウィンドウハンドルを取得するための他の一般的な方法はありますか? –
@ user3302424私は自分の答えを編集しました。 – Guy