Selenium Java:无法获取弹出的句柄
我不确定getWindowHandles是否是获取弹出句柄的正确方法,因为以下内容仅返回父句柄而不是子句柄。Selenium Java:无法获取弹出的句柄
for (String handle : driver.getWindowHandles()) {
driver.switchTo().window(handle);
}
WebDriverWait waitforEle = new WebDriverWait(driver, 300);
waitforEle.until(ExpectedConditions.visibilityOfAllElementsLocatedBy
(By.xpath("//*[@id='blah']")));
任何人都可以告诉我如何处理弹出如果上述方式不正确?
谢谢, Tickbox。
getWindowHandles()方法为您提供打开的浏览器窗口或选项卡的ID。你只需要等待一个WebElement和弹出窗口的定位器。
WebDriverWait wait = new WebDriverWait(driver, 300);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='blah']"));
但它不是一个浏览器窗口或选项卡。它是一个弹出窗口。 – Tickbox
这就是我正在谈论的。你不需要一个getWindowHandles(),只需等待弹出框中的元素出现。 – SanchelliosProg
大概等待应该可以工作,即使这样你可以使用'$ x“// * [@ id ='blah']”'检查chrome的控制台部分,然后输入以检查元素是否出现,然后是同一个html页面的一部分o/w是一些'iframe'的一部分 – kushal
如果弹出警报,然后使用:
Alert alert =driver.switchTo().alert(); alert.accept();
,或者如果它是应用程序弹出然后使用:
String parentWinHandle = driver.getWindowHandle();
//Click the button or link which populates the window
driver.findElement(By.id(actionBtn)).click();
Thread.sleep(5000);
Set<?> popupHandles = driver.getWindowHandles();
//SOP *popupHandles*
Iterator<?> iterator = popupHandles.iterator();
while(iterator.hasNext())
{
String popupHandle = iterator.next().toString();
if(!popupHandle.contains(parentWinHandle)) {
driver.switchTo().window(popupHandle);
Thread.sleep(3000);
//Perform the operation you want to do
driver.switchTo().window(parentWinHandle);
}
}
如果您需要等待,请不要推荐任何人使用Thread类。为这些需求使用WebDriverWait类会更好。 – SanchelliosProg
@SanchelliosProg我同意,使用'Thread.sleep();'是不好的做法。 – Ashish
但是我的测试案例中的场景不同,我不得不等待5秒钟,在此期间屏幕执行倒计时五秒钟。我的坏消息是我没有删除就发布了它。 – Ashish
你可以看到如果是弹出一个警告,然后通过做以下事情:'Alert alert = driver.switchTo()。alert(); alert.accept();'如果不是那么请发布一些html代码或网址 – kushal
@kushalツ你可以通过右键单击它来查看弹出窗口是否为警报。如果上下文菜单显示为HTML页面,那么它是HTML而不是JS警报。 – JeffC
是的,@Tickbox可能没有意识到这一点。 – kushal