如何使用量角器

时间:2016-06-15 12:32:24

标签: javascript angularjs protractor

应该做些什么来重定向回角度页面?这是我的输入&按钮来自 html (非角度页面)

<input class="value" type="password" 3dsinput="password" name="password">
<input type="submit" value="Submit" name="submit" alt="Submit" border="0">

位于 todo-spec.js ,就像这样;

 element(by.css('.value')).sendKeys('12345');
 element(by.buttonText('Submit')).click();

browser.driver.ignoreSynchronization = true;在前一个角度页面上调用last来关闭同步。请记住,此小页面在将用户重定向到即将到来的角度页面之前与支付网关服务进行通信。我试图关闭同步,但没有缓解。

还要注意:每当我在一分钟后运行相同的 EXACT SCRIPT 时,我似乎会遇到两个不同的错误。我的猜测是它与超时有关。一个是;

  

失败:无法分配给只读属性&#39; stack&#39;等待量角器与页面同步时出现错误:&#34; window.angular未定义。这可能是因为这是一个非角度页面,或者因为您的测试涉及客户端导航,这可能会干扰Protractor的自举。有关详情,请参阅http://git.io/v4gXM&#34;

和另一个;

  

失败:javascript错误:在等待结果时卸载文档         (会话信息:chrome = 51.0.2704.84)         (驱动程序信息:chromedriver = 2.21.371459(36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),platform = Windows NT 10.0 x86_64)(警告:服务器未提供任何堆栈跟踪信息)       命令持续时间或超时:1.40秒       构建信息:版本:&#39; 2.52.0&#39;,版本:&#39; 4c2593c&#39;,时间:&#39; 2016-02-11 19:06:42&#39;       系统信息:主机:&#39; xxxxxxxx&#39;,ip:&#39; xxxxx&#39;,os.name:&#39; Windows 10&#39;,os.arch:&#39; amd64&#39 ;,os.version:&#39; 10.0&#39;,java.version:&#39; 1.8.0_92&#39;       驱动程序信息:org.openqa.selenium.chrome.ChromeDriver    Capabilities [{applicationCacheEnabled = false,rotate = false,mobileEmulationEnabled = false,chrome = {chromedriverVersion = 2.21.371459(36d3d07f660ff2bc1bf28a75d1cdabed0983e7c4),userDataDir = C:\ Users \ Colin \ AppData \ Local \ Temp \ scoped_dir6892_17447},takesHeapSnapshot = true,databaseEnabled = false,handlesAlerts = true,hasTouchScreen = false,version = 51.0.2704.84,platform = XP,browserConnectionEnabled = false,nativeEvents = true,acceptSslCerts = true,locationContextEnabled = true,webStorageEnabled = true,browserName = chrome,takesScreenshot = true,javascriptEnabled = true,cssSelectorsEnabled = true}]       会议ID:fde99ca463aacd06f923cae8895b06a5

非常感谢您的帮助......

2 个答案:

答案 0 :(得分:2)

解决。我可能正在重复相同的解决方案(其他人建议),我只是误解了其他SO类似的问题。

  

我必须在非角度页面上使用browser.driver.sleep(5000)以确保它正确加载并正确安置,并且量角器不会快速在其上运行。

为了管理茉莉花超时(这是一个偶然的问题 - 让我觉得我一直都是错误的),我明确地在timeout函数的顶部编写了beforeEach。看一看;

beforeEach here所示(在 config.js 中设置defaultTimeoutInterval对我不起作用。)

  describe('angularjs homepage todo list', function() {

    beforeEach(function (done) {
       jasmine.DEFAULT_TIMEOUT_INTERVAL = 80000;
       setTimeout(function () {
           // console.log('inside timeout');
           done();
       }, 500);
    });

   it ('should be bla bla bla', function(){

describe-it 函数中的其他部分( angular &gt;&gt; 非角度&gt;&gt; angular < /强>)

    browser.ignoreSynchronization = true; // Turn sync off before submit (on angular page).
    this_page.clickBtn(); //Redirect to *NON-ANGULAR PAGE*


    //*NON-ANGULAR PAGE* loaded (payment gateway)
    browser.driver.sleep(5000);// to fully load non-angular page 

    element(by.css('.value')).sendKeys('12345');                     
    element(by.buttonText('Submit')).click(); 

如果有人对此感到不同,我会再次予以纠正。花了我一个星期的上下挫折来弄清楚这一点。 - 新'protractorer';)

奖励非常重要如果您遇到有角度的复选框单选按钮,请明确使用;

    var elm = element(by.id('drop-off'));
    browser.executeScript("arguments[0].click();", elm.getWebElement());

而不仅仅是

element(by.id('drop-off')).click(); 
  

出于某种原因,通过其设计,实现隐藏了复选框/单选按钮中的原始元素,使您无法看到它,因为量角器/ webdriver不会检测到错误。所以你需要非常清楚来帮助与后端交谈。我发现很晚的很小但很重要的问题。当我想到这一点时,我的量角器测试就像婴儿的屁股一样顺畅;)

另一件对我有很大帮助的是关注webdriver错误(我之前没有做过)。它们比量角器更明确。

答案 1 :(得分:0)

点击后,我会等待重定向到所需的页面(等待specific part of URL to be present in the current URL),再次启用同步并发出waitForAngular()

browser.driver.wait(function() {
  return browser.driver.getCurrentUrl().then(function(url) {
    return /index/.test(url);  // TODO: replace "index" with a relevant part of URL in your case
  });
}).then(function () {
    browser.ignoreSynchronization = true;     
    browser.waitForAngular();
});