Angularjs 无法单击量角器中的“弹出确定”按钮

Angularjs 无法单击量角器中的“弹出确定”按钮,angularjs,protractor,angularjs-e2e,Angularjs,Protractor,Angularjs E2e,我不知道为什么这个量角器代码适用于弹出窗口。 我的量角器版本:4.0.3 chrome版本:chromedriver_2.22.exe 下面是我收到的错误消息 失败:没有打开警报 (会话信息:chrome=52.0.2743.116) (驱动程序信息:chromedriver=2.22.397933(1CAB651507B88DEC79B2A22D1943C01833CC1B),平台=Windows NT 6.1.7601 SP1 x8664) 堆栈: NoSuchAlertError:没有打开

我不知道为什么这个量角器代码适用于弹出窗口。 我的量角器版本:4.0.3 chrome版本:chromedriver_2.22.exe

下面是我收到的错误消息

失败:没有打开警报 (会话信息:chrome=52.0.2743.116) (驱动程序信息:chromedriver=2.22.397933(1CAB651507B88DEC79B2A22D1943C01833CC1B),平台=Windows NT 6.1.7601 SP1 x8664) 堆栈: NoSuchAlertError:没有打开的警报 (会话信息:chrome=52.0.2743.116) (驱动程序信息:chromedriver=2.22.397933(1CAB651507B88DEC79B2A22D1943C01833CC1B),平台=Windows NT 6.1.7601 SP1 x8664)

弹出窗口的HTML脚本

<div class="modal-content" modal-transclude=""><div class="popupAlert popupAlert-full marginNone ng-scope">
    <div class="popup-header">
        <h2 class="modal-title ng-binding" id="myModalLabel">You are leaving this page </h2>
    </div>
    <div class="popup-body">
        <div class="row Margin0">
            <p class="text ng-binding">By continuing all the SLI data will be lost.</p>
        </div>
    </div>
    <div class="popup-footer">
        <div class="row Margin0">
            <a data-ng-click="cancel()" class="pull-right buttonLink2">Cancel
            <button type="button" class="pull-right swc_button" focus-element="autofocus" data-dismiss="modal" ng-click="ok()">Ok</button>
        </a></div><a data-ng-click="cancel()" class="pull-right buttonLink2">
    </a></div><a data-ng-click="cancel()" class="pull-right buttonLink2">
</a></div></div>

//expect(popupAlert.accept).toBeDefined()

检查您是否编写了打开警报框的代码

使用browser.pause()。这就像量角器中的断点,在执行操作后使用它打开警报框,并使用键c一步一步地继续量角器测试(不要等待太久,否则量角器将引发超时异常)。

browser.switchTo().alert()
仅当弹出窗口是Javascript警报框时才起作用。在您的场景中,弹出窗口是使用HTML代码生成的,可以作为普通的webelement捕获。使用以下代码接受弹出窗口

element(by.css(".popupAlert")).isDisplayed().then(function(isDisplayed){    
  if(isDisplayed){
      element(by.css(".popup-footer a")).click() //to close the alert
      //or
     element(by.css(".popup-footer button")).click() //to accept the alert
   }
})

我同意@Sudarshan的回答,那里没有javascript警报,它只是一个简单的html弹出窗口

然而,由于弹出窗口需要一段时间才能显示,根据我使用ExpectedConditions的经验,可以有效地捕获它

var EC = protractor.ExpectedConditions;
var popup = $('popupAlert');
var okButton = element(by.buttonText('Ok')); //pls use appropriate locators incase this doesn't work!
popup.click();
browser.wait(EC.visibilityOf(okButton),5000);
okButton.click();

是的,我有writenbrowser.get(“url”);元素(by.linkText(linkText_locator))。单击();浏览器。睡眠(5000);在此之后,我只有警报代码处理它是默认警报框还是项目的自定义弹出窗口?如果是自定义的,则切换到()。警报()不起作用。你必须只能通过类名访问它,即使它是HTML弹出窗口,但我们仍然需要切换,然后只有我才能单击取消链接或单击提交按钮。TML弹出窗口只不过是一个div元素,重叠在你的网页上。这些弹出窗口称为模式窗口。看看示例引导模式窗口r更好地了解模态窗口的工作原理。[引导模态窗口]()
var EC = protractor.ExpectedConditions;
var popup = $('popupAlert');
var okButton = element(by.buttonText('Ok')); //pls use appropriate locators incase this doesn't work!
popup.click();
browser.wait(EC.visibilityOf(okButton),5000);
okButton.click();