【问题标题】:Cannot switch to POPUP window in Protractor无法在量角器中切换到弹出窗口
【发布时间】:2016-02-11 03:41:19
【问题描述】:

当我单击链接时,会打开一个弹出窗口。但是由于量角器无法定位元素,因此无法在弹出字段上工作,然后它就会超时。

以下是代码 browser.ignoreSynchronization = true;

    performancePage.go();
    logger.info('Info', 'Navigating to performance Page');
    helper.isElementVisible(performancePage.performanceTab);
    performancePage.performanceTab.click();
    element(by.id("ButtonAddProduct")).click();
    browser.driver.sleep(4000)
   var  handlePromise = browser.getAllWindowHandles();
    var handles = handlePromise.then(function (handles) {
        console.log(handles)
        popUpHandle = handles[1];
        var handle = browser.switchTo().window(popUpHandle);
        handle = browser.getWindowHandle();
        expect(handle).toEqual(popUpHandle);
        browser.driver.executeScript('window.focus();');
    });
    //helper.isElementVisible(performancePage.addProduct);
    //performancePage.addProduct.click();
    helper.isElementVisible(element(by.id("form1")));[![enter image description here][1]][1]

同样在console.log中,它只显示1个窗口句柄而不是弹出句柄

这里是 HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1">
<body>
<form id="form1" onsubmit="javascript:return WebForm_OnSubmit();" action="AddProduct.aspx" method="post">
<div class="aspNetHidden">
<script type="text/javascript"> //<![CDATA[ var theForm = document.forms['form1']; if (!theForm) {     theForm = document.form1; } function __doPostBack(eventTarget, eventArgument) {     if (!theForm.onsubmit || (theForm.onsubmit() != false)) {         theForm.__EVENTTARGET.value = eventTarget;         theForm.__EVENTARGUMENT.value = eventArgument;         theForm.submit();     } } //]]> </script>
<script type="text/javascript" src="/WebResource.axd?d=NLOzwancrFW_OxVrAGBXy-kmkOGHUYmO808scG3GJ5f98I_P9beUOmU4HNGkqJQWHiSPU9aY7onPaiTvMCtL3eBXmC_rcSTJAFJAPa_OIJw1&t=635586505120000000"/>
<script type="text/javascript" src="/ScriptResource.axd?d=K0uQ-qcyckZQ0YCESuG4YfaXFE8emO5C9Ce1KC27_VB1FRGUsYkGZcC6OJnVnIEp6qunwr4jFBAKcuX_FFlQhtiSBdTz0RYmzsqtrKC3ePqj2CqtZGDAEZ4f0TCoYf0CGDgUxlJb7An1eoe5Vvcd-YsPSDf93ysj0hatMJcw5Bk1&t=5303ace5"/>
<script type="text/javascript" src="/ScriptResource.axd?d=ICFVFfrCSHOWqdP0dm99rLOsC2_-ZnYiCw1CqjXgfBZ92x5ruBu78fP6ZyV7fADUc626lvSvIubJzd5ej_JSkHNQHZSSai511-4rfVoNIRmTJczCHqrBjZa3yIX-22uMxb3rGnoSAGlTcOHE53z7TSmGu1MNobwW3y3pLnoN-H72LyOhX5OECQ17aAmZHECd0&t=7b689585"/>
<script type="text/javascript"> //<![CDATA[ if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.'); //]]> </script>
<script type="text/javascript" src="/ScriptResource.axd?d=OL2ISgjqQODB5nkx4b5_GOgoAHxOq6FEk9tXBRu0WSmyCZCd3ccx73Jhlea-pmk11_GS4uVKb8o448Z76ihbV5xUGrVOtwriFbjM0joyKwz96l4gVfykwP91DaSn6g66OedAzY_pkY4s5--Zg_vgtAu4W2Kz6hrDw12cq5mZa1pji5zdqGZ-ZKisFszMRWz10&t=7b689585"/>
<script type="text/javascript"> //<![CDATA[ function WebForm_OnSubmit() { if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) return false; return true; } //]]> </script>
<div class="aspNetHidden">
<div style="margin: 4px">
<script type="text/javascript"> //<![CDATA[ Sys.WebForms.PageRequestManager._initialize('Scriptmanager1', 'form1', [], [], [], 90, ''); //]]> </script>
<table>
<tbody>
<tr>
<td>
<td>
<input id="TextBoxProductName" type="text" name="TextBoxProductName"/>
<span id="RequiredFieldValidator1" style="visibility:hidden;">
<br/>
Please enter a product name.
</span>
</td>
</tr>
<tr>
<td>
<b>
Product Short Name
<img id="Img4" src="../Images/Asterisk.gif"/>
</b>
</td>
<td>
<input id="TextBoxShortName" type="text" name="TextBoxShortName"/>
<span id="RequiredFieldValidator2" style="visibility:hidden;">
<br/>
Please enter a product short name.
</span>
</td>
</tr>

【问题讨论】:

  • 不看 html 就很难知道发生了什么...
  • 抱歉,我不能确定提供的代码有什么问题。 getAllWindowHandles 是说只有一个窗口?这是弹出窗口、警报还是模式?
  • 嗨 Brine,是的,它是一个弹出窗口。弹出窗口本身有 2 个 HTML。一个 HTML 是窗口,另一个 HTML 是窗口内的表单。您可以通过 Skype 与我联系:anuvrat.singh1 或任何其他方式,以便我们详细讨论(如果可能)

标签: protractor


【解决方案1】:

Anuvrat,您的代码中有很多内容。如果您将其分解为更具可读性/可理解性,您将获得更好/更多的答案。

也就是说,这样的事情应该可以工作......

performancePage.go();
performancePage.performanceTab.click();
element(by.id("ButtonAddProduct")).click();
browser.sleep(4000); // assuming we're waiting for popup?

// try just switching to the window via it's index...
browser.switchTo().window(1);

// popup code goes here...

// switch back to main window
browser.switchTo().window(0);

【讨论】:

  • 我之前也尝试过,但没有成功。我什至尝试过 driver.switchto().ActiveElement() 但这也没有用:(
  • 通过索引切换到窗口不适用于当前版本的量角器。当前方法请参见stackoverflow.com/a/42595269/360782
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多