31

What I'm trying to Do

I'm trying to use capybara with poltergeist to log into amazon at this URL...

https://developer.amazon.com/rp/sales.html

Simple enough, except that when I try to submit the form, I get the error... ReferenceError: Can't find variable: jQuery ...

However, the source for jQuery is on the page and should have been loaded.

The code I'm using to log in is this...

  visit "https://developer.amazon.com/rp/sales.html"
  fill_in('ap_email', with: user)
  fill_in('ap_password', with: password)
  click_on('signInSubmit-input')

Submit triggers a javascript call to validate input. This uses jQuery and when it does, the error is thrown.

What I Expected

I expected that when I visited the login page, that jquery would have been loaded with the other javascript on that page.

I have no idea why jQuery would not be loaded at this point. Phantomjs would have loaded the page and loaded the jQuery referenced on the page, no?

Things I've Tried

Timing Issue? - Added sleep after the visit.

Configuration Issue?

  • My Current Configuration

    include Capybara::DSL
    Capybara.default_driver = :poltergeist
    Capybara.register_driver :poltergeist do |app|
        Capybara::Poltergeist::Driver.new(app, phantomjs: Phantomjs.path)
    end
    Capybara.ignore_hidden_elements = false
    
  • Attempting to Force jQuery to Load

    Capybara::Poltergeist::Driver.new(app,
                                  phantomjs: Phantomjs.path,
                                  extensions: ["handlers/jquery.js"])
    

I've tried quite a few things in an attempt to get my head around what's going on but I'm coming up empty.

Any thoughts on where I might look or what may be going on would be greatly appreciated.

Nmk
  • 1,281
  • 2
  • 14
  • 25
Eric Slick
  • 319
  • 3
  • 3
  • 4
    This is probably the best asked question by a new user that is still not answerable without guessing. – Artjom B. May 28 '15 at 06:25
  • It might be related to SSL and web security. I don't know how this is done in capybara, but you try to pass --ssl-protocol=any --ignore-ssl-errors=true --web-security=false to phantomjs – Artjom B. May 28 '15 at 06:29
  • Good thought, Artjom, but it didn't help. I think I need to take a different tack and see if a different driver has the same issue. I did try webkit and it had the same error, but maybe actually watching what's going on might reveal something else. – Eric Slick Jun 01 '15 at 01:28
  • Using selenium with FF, I don't get this error. So, the problem has to be in how I've set things up. Still looking. – Eric Slick Jun 02 '15 at 19:02
  • No, it's almost certainly a problem with PhantomJS. It always has some kind of problem. Have you tried using PhantomJS 2? – Artjom B. Jun 02 '15 at 19:05
  • related issue: https://github.com/teampoltergeist/poltergeist/issues/58 that I think is pretty much the same problem I'm having. phantomjs is set to '--ssl-protocol=any' as suggested, though I suspect it's a related. – Eric Slick Jun 02 '15 at 19:06
  • I'm using 1.9.8 so I'll check out 2.0 soon. I may have to abandon phantomjs in any case. I need to download files, and working around that limitation is proving to be painful. – Eric Slick Jun 04 '15 at 01:04
  • Well, got some idea of the problem. It's not phantomjs, I think. Amazon is using openid (I believe), and this link shows how to do it using mechanize: http://stackoverflow.com/questions/6783179/cannot-login-to-amazon-with-ruby-mechanize With that hint, I'm pretty sure I can get this working now. – Eric Slick Jun 04 '15 at 20:47

2 Answers2

1

If jQuery is on the page you most likely have to use an evaluate function to enter the context of the page. CasperJS has this diagram http://docs.casperjs.org/en/latest/_images/evaluate-diagram.png http://phantomjs.org/api/webpage/method/evaluate.html

The execution is sandboxed, the web page has no access to the phantom object and it can't probe its own setting.

alanmbarr
  • 142
  • 2
  • 7
0

The execution is sandboxed, the web page has no access to the phantom object and it can't probe its own setting.

Trinetra-MSFT
  • 957
  • 5
  • 9