我的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解决。
browser
Protractor暴露给您的测试的对象是Protractor的一个实例(即,如果您在Stack
Overflow上看到带有的旧答案var ptor = protractor.getInstance(); ptor.doSomething()
,则可以在那些旧答案中替换ptor
为browser
)。量角器还将封装的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
运行protactor时,出现以下错误:
问题内容: 我正在测试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