Java selenium,如何选择新窗口
我使用TestNG在Eclipse中运行selenium rc测试。我有一个链接,试图打开一个新的浏览器页面。如何选择此新页面进行操作?我使用以下代码:Java selenium,如何选择新窗口,java,selenium,selenium-rc,popupwindow,Java,Selenium,Selenium Rc,Popupwindow,我使用TestNG在Eclipse中运行selenium rc测试。我有一个链接,试图打开一个新的浏览器页面。如何选择此新页面进行操作?我使用以下代码: String[] wins = selenium.getAllWindowIds(); for (String s : wins) System.out.println("win: " + s); selenium.selectWindow(“name=NewPage”) 然而,它说网页没有找到。我还尝试使用以下代
String[] wins = selenium.getAllWindowIds();
for (String s : wins)
System.out.println("win: " + s);
selenium.selectWindow(“name=NewPage”)代码>
然而,它说网页没有找到。我还尝试使用以下代码定义页面ID或标题:
String[] wins = selenium.getAllWindowIds();
for (String s : wins)
System.out.println("win: " + s);
它不定义新打开的窗口:
win: MainPage
win:
如果使用selenium.getAllWindowNames()
I getwin:selenium\u main\u app\u窗口
赢:Seleniu_blank65815
我编写这个代码selenium.selectWindow(“name=blank99157”)代码>但获取错误-错误:窗口不存在。如果这看起来像一个Selenium bug,请确保阅读http://seleniumhq.org/docs/02_selenium_ide.html#alerts-弹出窗口和多个窗口用于潜在的解决方法。
您可能没有使用正确的窗口ID
查看此链接。你可能会找到你的答案
让我知道这有帮助。试试selenium.getAllWindowNames(),selenium.getAllWindowTitles()…其中一个肯定会工作。窗口显然没有名称,所以不能按名称选择
如果窗口是通过JavaScript打开的,您可以更改脚本,请尝试更改window.open(“someUrl”)代码>到窗口。打开(“someUrl”、“someName”)代码>,然后您将能够根据设置的名称选择窗口。更多关于该网站的信息
Selenium RC在和JavaDocs中不支持或
如果您只有两个窗口/想要打开最新的窗口,您可以尝试
这显然是最简单的方法,因为它选择了第一个非顶部窗口。因此,只有当您想要选择最新的弹出窗口时,它才有用
如果新窗口具有唯一的标题,则可以执行以下操作:
selenium.selectPopup("Title of the window");
或
否则,必须迭代以获得正确的名称(Selenium为没有名称的窗口创建名称)。然而,您不能将该名称硬编码到您的测试用例中,因为它每次都会更改,所以您需要为此制定一些动态逻辑
你不会喜欢这样的:选择WebDriver。它应该对这些问题有更大的抵抗力
WebDriver=newfirefoxdriver();
WebElement inputhandler=driver.findelement(By.linktext(“此处的任何内容”);
inputhHandler.click();
字符串parentHandle=driver.getWindowHandle();
设置PopHandle=driver.getWindowHandles();
Iterator it=PopHandle.Iterator();
字符串ChildHandle=“”;
while(it.hasNext())
{
if(it.next()!=parentHandle)
{
ChildHandle=it.next().toString();
//因为新窗口将是最后一个打开的窗口
}
}
driver.switchTo()窗口(ChildHandle);
WebDriverWait wait1=新的WebDriverWait(驱动程序,30);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.id(“页面上的某物”));
//在这里的页面上做你想做的任何事情
driver.close();
driver.switchTo().window(parentHandle);
使用selenium。选择Window(主页)转到该页面,选择selenium。选择Window(null)返回到旧页面。如果不起作用,那么也试试这个selenium.openWindow(“URL”,“MyWindow”);selenium.selectWindow(“MyWindow”);我试试变体6。编写了这样的代码:String wins[]=selenium.getAllWindowNames();对于(字符串s:wins)System.out.println(“win:+s”);selenium.selectWindow(“name=wins[2]”);但获取错误:错误:窗口不存在。如果这看起来像一个Selenium bug,请确保阅读潜在的解决方法。@khris是的,异常中的链接是,文档中没有提到任何解决方法。但是,您可以尝试我在第2节和第3节的回答中提到的解决方法,这可能就是您看到的bug;selenium.selectWindow(“标题”);这是可行的,但这段代码又打开了一个窗口(第一个窗口是在我点击链接后打开的,第二个窗口是在这些代码之后,实际上我只需要关注第一个窗口,但selenium在我点击链接打开窗口后看不到窗口的标题,但看到的是我用url打开的窗口)。这可能没问题,但我有另一个类似的情况,当点击链接打开新窗口时,我需要选择一些记录,并在主窗口中自动选择。如果我只是以新链接的形式打开这样的弹出窗口,我会丢失所有先前插入的数据,而且-弹出窗口会打开,而主窗口会丢失数据(它可能会根据“在新选项卡中打开新窗口”的浏览器选项进行修改;我使用ie,并且选中了这样的选项,但新窗口仍会在与主窗口相同的选项卡中打开)
selenium.selectPopup("Title of the window");
WebDriver driver = new FirefoxDriver();
WebElement inputhandler = driver.findelement(By.linktext("whatever here"));
inputhandler.click();
String parentHandle = driver.getWindowHandle();
Set<String> PopHandle = driver.getWindowHandles();
Iterator<String> it = PopHandle.iterator();
String ChildHandle = "";
while(it.hasNext())
{
if (it.next() != parentHandle)
{
ChildHandle = it.next().toString();
// because the new window will be the last one opened
}
}
driver.switchTo().window(ChildHandle);
WebDriverWait wait1 = new WebDriverWait(driver,30);
wait1.until(ExpectedConditions.visibilityOfElementLocated(By.id("something on page")));
// do whatever you want to do in the page here
driver.close();
driver.switchTo().window(parentHandle);