我必须单击一个打开窗口的按钮,我想像这样检索该窗口的内容:
String master = browser.getWindowHandle();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@title=\"Quitter la session du portail actuelle et fermer la session\"]"))).click();
wait.until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> handles = browser.getWindowHandles();
for ( String handle : handles ) {
if(!handle.equals(master)) {
browser.switchTo().window(handle);
}
}
System.out.println(browser.getPageSource());
单击后窗口确实可以正确打开,但是控制台输出显示为:
null
我可以告诉我可以指向该窗口,因为关闭它可以起作用:
String master = browser.getWindowHandle();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@title=\"Quitter la session du portail actuelle et fermer la session\"]"))).click();
wait.until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> handles = browser.getWindowHandles();
for ( String handle : handles ) {
if(!handle.equals(master)) {
browser.switchTo().window(handle);
}
}
browser.close();
我不知道自己在做什么,我无法操作窗口中的元素,因为我无法访问它。
编辑:
新窗口的网址:https://thatwebsite.fr/com.sap.portal.navigation.masthead.logoffConfirmMsg
新窗口中的HTML:
<table datatable="0" border="0" cellspacing="5" cellpadding="0">
<tbody>
<tr>
<td class="ctrlMsgBarImgWarning"> </td>
<td class="ctrlTxtStd">Are you sure you want to log off?</td>
</tr>
<tr>
<td colspan="2" height="10"> </td>
</tr>
<tr>
<td align="left" nowrap="" colspan="2">
<a id="htmlb_465_htmlb_162_1" ct="B" title="Yes" st="" href="javascript:void(0);" ti="0" tabindex="0" class="urBtnStd" usedclasses="urBtnStdDsbl urBtnStdD urBtnStdDDsbl" ocl="if (htmlbButton_checkClick('htmlb_465_htmlb_162_1', event)) {return htmlbDoEvent(this,'C','onclick','0','htmlb_465_htmlb_162',1,1,'',0);}" onkeydown="return ur_Button_keypress(event)" onclick="return ur_Button_click(event);" style="text-align:center;overflow:visible;">Yes</a>
<a id="htmlb_465_htmlb_162_2" ct="B" title="No" st="" href="javascript:void(0);" ti="0" tabindex="0" class="urBtnStd" usedclasses="urBtnStdDsbl urBtnStdD urBtnStdDDsbl" ocl="if (htmlbButton_checkClick('htmlb_465_htmlb_162_2', event)) {return htmlbDoEvent(this,'C','onclick','0','htmlb_465_htmlb_162',2,1,'',0);}" onkeydown="return ur_Button_keypress(event)" onclick="return ur_Button_click(event);" style="text-align:center;overflow:visible;">No</a>
</td>
</tr>
</tbody>
</table>
我基本上想做的是单击Yes
按钮。
答案 0 :(得分:0)
您可以尝试以下方法:
点击首页上的按钮/链接后:
ArrayList<String> windows = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(windows.get(1));
new WebDriverWait(driver,20).until(ExpectedConditions.elementToBeClickable(By.linkText("Yes"))).click()
driver.close();
driver.switchTo().window(windows.get(0)); //This is switch to windows where you left off
答案 1 :(得分:0)
我认为您已经很接近了。您需要等待新窗口的HTML DOM呈现(您可以等待文本为是的按钮可点击< / em>),则可以使用以下解决方案:
String master = driver.getWindowHandle();
new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@title=\"Quitter la session du portail actuelle et fermer la session\"]"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> handles = driver.getWindowHandles();
for ( String handle : handles ) {
if(!handle.equals(master)) {
driver.switchTo().window(handle);
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='urBtnStd' and starts-with(@id,'htmlb_')][contains(.,'Yes')]")));
System.out.println(driver.getPageSource());
}
}
注意:确保此解决方案中的Webdriver实例是 driver (不是 browser )
答案 2 :(得分:0)
此窗口是一个modalDialog,不是吗?如果是模式对话框,则可以通过硒找到元素,但无法获取其任何属性。
有关详细信息: 模态弹出窗口-这非常特定于IE,Microsoft将其定义为
当Windows Internet Explorer通过使用showModalDialog方法或使用showModelessDialog方法从模式或无模式HTML对话框中打开窗口时,Internet Explorer使用组件对象模型(COM)创建该窗口的新实例。通常,使用现有Internet Explorer进程的第一个实例打开窗口。当Internet Explorer在新过程中打开窗口时,所有的内存cookie都将不再可用,包括会话ID。此过程与Internet Explorer使用open方法打开新窗口的过程不同。 http://msdn.microsoft.com/en-us/library/ms536759(VS.85).aspx
“模态”对话框上的MSDN博客
当用户选择“模型”弹出窗口时,父窗口将被阻止,等待弹出窗口中的返回值。您将无法看到页面的视图源,需要关闭弹出窗口,然后才能激活父窗口。
如何获取模型弹出窗口的对象属性?复制弹出URL,并在新的TAB中打开,然后它将以正常的窗口格式显示,您可以在其中使用IE Dev工具栏或FireBug捕获属性。