当前位置: 首页 > 面试题库 >

收到错误:等待量角器与页面同步时出错:{}

姜鸿
2023-03-14
问题内容

我的e2e.conf.coffee档案是:

exports.config =
  baseUrl: 'http://localhost:9001'
  specs: [
    'e2e/**/*.coffee'
  ]

  framework: 'jasmine'

我的节点项目在9001端口上运行并在监听。

我的测试是:

describe 'Happy Path', ->
  it 'should show the login page', ->
    console.log browser

    expect(browser.getLocationAbsUrl()).toMatch("/view1");
  it 'should fail to login', ->
    setTimeout ->
      console.log "FAIL!"
    , 1200

我得到的错误是:

Failures:

  1) Happy Path should show the login page
   Message:
     Error: Error while waiting for Protractor to sync with the page: {}
   Stacktrace:
     Error: Error while waiting for Protractor to sync with the page: {}
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
==== async task ====
WebDriver.executeScript()
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
==== async task ====
Asynchronous test function: it("should show the login page")
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>
    at <anonymous>==== async task ====

我究竟做错了什么??


问题答案:

(非常简短的版本): 使用browser.driver.get代替browser.get

较长的版本: Protractor基本上是Selenium及其Javascript
WebDriver代码的包装。量角器添加代码以等待Angular“安顿下来”(即完成$
digest循环),然后继续测试代码。但是,如果您的页面上没有Angular,则量角器将“永远”(实际上直到超时)等待Angular解决。

browserProtractor暴露给您的测试的对象是Protractor的一个实例(即,如果您在Stack
Overflow上看到带有的旧答案var ptor = protractor.getInstance(); ptor.doSomething(),则可以在那些旧答案中替换ptorbrowser)。量角器还将封装的Selenium WebDriver
API公开为browser.driver。因此,如果调用browser.get,则使用的是Protractor(它将等待Angular稳定下来),但是如果调用browser.driver.get,则使用的是Selenium(不了解Angular)。

在大多数情况下,您将测试Angular页面,因此您将希望使用它browser.get来获得Protractor的好处。但是,如果您的登录页面根本不使用Angular,则应该使用browser.driver.get而不是browser.get用于测试登录页面的测试。请注意,在其余测试中,您还需要使用Selenium
API而不是Protractor API:例如,如果您的HTML输入元素在页面中某处具有id =“
username”,使用browser.driver.findElement(by.id('username'))而不是进行访问element(by.model('username'))

有关更多示例,请参见Protractor测试套件中的示例(或者如果以前的示例不存在,请尝试此链接)。另请参阅量角器文档,其中指出:

当量角器无法在页面上找到Angular库时,它将失败。如果您的测试需要与非角度页面进行交互,请使用直接访问webdriver实例browser.driver

示例代码 :在上面的登录测试中,您需要执行以下操作:

describe 'Logging in', ->
  it 'should show the login page', ->
    browser.driver.get "http://my.site/login.html"
    // Wait for a specific element to appear before moving on
    browser.driver.wait ->
      browser.driver.isElementPresent(by.id("username"))
    , 1200
    expect(browser.driver.getCurrentUrl()).toMatch("/login.html");
  it 'should login', ->
    // We're still on the login page after running the previous test
    browser.driver.findElement(by.id("username")).sendKeys("some_username")
    browser.driver.findElement(by.id("password")).sendKeys("some_password")
    browser.driver.findElement(by.xpath('//input[@type="submit"]')).click()

(请注意:我没有做太多的CoffeeScript,并且完全有可能在上面的代码中犯了CoffeeScript语法错误。您可能希望在盲目复制和粘贴之前检查其语法。但是,我
信心逻辑,因为这几乎是从我的测试非Angular登录页面的Javascript代码中逐字复制并粘贴的。)



 类似资料:
  • 我试图遵循量角器官方网站上的量角器教程,但我甚至无法完成步骤0。 我在用量角器 之后,我一直在遵循教程的第0步。我有配置。js文件和test-spec.js文件如下: 配置js公司 测试规范js 当我运行protector

  • 问题内容: 我正在测试AngularJS应用程序,并且对量角器非常新。每次我打开浏览器时,它都会打开,然后等待超时,然后在cmd上引发以下错误。 我尝试增加超时限制,但始终会收到此错误。我也尝试过使用所有这些: 该页面正确加载,并且如果我使用Eclipse和Selenium与按钮对象进行交互,则可以正常工作。 只有量角器出现同步问题。请帮忙。 问题答案: 量角器超时的可能原因: 您的网页未以预期的

  • 问题内容: 我正在使用小型AngularJS应用测试量角器。 这是测试: 控制器: 草稿服务: 使用量角器运行此测试会导致以下错误: 但是,如果在控制器中更改此行: 对此: 测试失败,但未达到预期目的,但更重要的是:它不会超时。 启用query()时,在浏览器中手动运行应用程序以及查看Protractor打开的浏览器窗口时,转发器均会正确显示API返回的数据。 当服务与API通信时,为什么Prot

  • 问题内容: 我有一个单击按钮并重定向到用户仪表板的测试。发生这种情况时,Webdriver返回: 为了解决这个问题,我将插入到发生重定向的位置,并假设我的CPU使用率很低,这可以解决此问题。但是,2000 ms是任意的并且很慢。是否有类似的东西会等到Angular在重定向页面上加载之前? 问题答案: 您认为这样的事情对您有用吗?最多需要等待10秒,URL才能包含文本“ pageTwo”或您输入的任

  • 我已安装了带有独立selenium服务器的量角器: 如果我在单机服务器已经运行的情况下运行Gradulator,并且配置指向该selenium实例,那么它可以正常工作。 我想让量角器启动服务器,然后运行测试。默认情况下,量角器会找到chrome驱动程序和selenium服务器jar,所以我使用最小配置: 但当它启动时,它无法连接到服务器。 我注意到,当使用webdriver manager启动se