我有2个窗口,页面标题相同,浏览器相同,使用不同的会话。 从第一个窗口执行自动化脚本后,它将打开下一个窗口并执行代码。 我无法切换回窗口。
我使用以下代码:
Set<String> windowIterator = Driver.getWindowHandles();
Iterator Iter = windowIterator.iterator();
String Parent = (String) Iter.next();
String sub = (String) Iter.next();
Driver.switchTo().window(sub);`
我尝试过更新的脚本,这里也面临切换窗口的问题。
包ABC;
import java.util.Iterator;
import java.util.Set;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class UserChat {
public static void main(String[] args) throws InterruptedException {
WebDriver user_1 = new FirefoxDriver();
user_1.manage().window().maximize();
user_1.get("url");
// login user_1
user_1.findElement(By.xpath(".//*[@id='email']")).sendKeys("email1");
user_1.findElement(By.xpath(".//*[@id='pass']")).sendKeys("pass");
user_1.findElement(By.xpath("//label[@id='loginbutton']/input")).click();
Thread.sleep(2000);
WebDriver user_2 = new FirefoxDriver();
user_2.manage().window().maximize();
user_2.get("url");
// login user_2
user_2.findElement(By.xpath(".//*[@id='email']")).sendKeys("email2");
user_2.findElement(By.xpath(".//*[@id='pass']")).sendKeys("pass");
user_2.findElement(By.xpath("//label[@id='loginbutton']/input")).click();
Thread.sleep(2000);
//click on Chat
WebDriverWait wait = new WebDriverWait(user_2, 60);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[2]/div/div/a")));
element.click();
Thread.sleep(2000);
//Search friend to message e.g. for user_1
user_2.findElement(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[2]/div/div/div/div/div/div[3]/div[2]/div/div/input")).sendKeys("My Friend User1");
//Send message to friend
WebElement webElement = user_2.findElement(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[2]/div/div/div/div/div/div[3]/div[2]/div/div/input"));
webElement.sendKeys(Keys.ENTER);
Thread.sleep(3000);
WebDriverWait wait2 = new WebDriverWait(user_2, 60);
WebElement element2 = wait2.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[1]/div/div[1]/div[2]/div/div/div/div/div[4]/div[4]/div[1]/textarea")));
element2.click();
user_2.findElement(By.xpath("/html/body/div/div[5]/div[1]/div/div/div[1]/div/div[1]/div[2]/div/div/div/div/div[4]/div[4]/div[1]/textarea")).sendKeys("hi");
element2.sendKeys(Keys.ENTER);
Thread.sleep(2000);
// Actions action = new Actions(user_2);
// action.sendKeys(Keys.chord(Keys.CONTROL, "T")).build().perform();
// action.sendKeys(Keys.ALT,Keys.TAB).build().perform();
Set<String> handles = user_2.getWindowHandles();
int index = 0;
if (handles.size() > index) {
String handle = handles.toArray()[index].toString();
user_2.switchTo().window(handle);
}
}
}
答案 0 :(得分:0)
在第二页上完成操作后使用
driver.switchTo().defaultContent();
对于您的代码,您可以使用以下内容: -
//Click your link
driver.findElement(By.xpath("xpath")).click();
//Get all the window handles in a set
Set <String> handles =driver.getWindowHandles();
Iterator<String> it = handles.iterator();
//iterate through your windows
while (it.hasNext()){
String parent = it.next();
String newwin = it.next();
driver.switchTo().window(newwin);
//perform actions on new window
driver.close();
driver.switchTo().window(parent);
答案 1 :(得分:0)
您正在使用两个FirefoxDriver
实例 - 实际上有两个不同的进程。使用Web驱动程序,您可以在单个驱动程序实例的窗口之间切换。一旦您最大化第二个驱动程序窗口,切换回上一个驱动程序窗口 - 您必须关闭第二个窗口(这使操作系统选择较早的窗口在顶部),或最小化第二个窗口或使用特定于操作系统像Java Native Access这样的库可以在它们之间切换。
答案 2 :(得分:0)
您正在使用两个不同的驱动程序实例。
如果您想再次与第一个实例进行交互,请使用user_1对象。它会坐在那里直到你关闭它。