Poltergeist / PhantomJS不尊重客户端重定向

时间:2016-07-07 19:02:58

标签: phantomjs poltergeist

我的大多数自动化集成测试套件都依赖于使用客户端重定向的第三方身份验证系统,我无法控制它:

history()

出于某种原因,Poltergeist / PhantomJS正在此处停止,而不是尊重重定向代码。这是因为它试图直接使用if (this.SfdcApp && this.SfdcApp.projectOneNavigator) { SfdcApp.projectOneNavigator.handleRedirect('https://example.com/?authtoken=MYTOKEN&more_stuff=etc'); } else if (window.location.replace){ window.location.replace('https://example.com/?authtoken=MYTOKEN&more_stuff=etc'); } else {; window.location.href ='https://example.com/?authtoken=MYTOKEN&more_stuff=etc'; } window.location.replace代替window.location.href吗?

这是我在RSpec中的Poltergeist配置:

window.location

以下是我的规范的简化版本:

Capybara.register_driver :poltergeist_tls do |app|
    poltergeist_options = {
        js_errors: true,
        phantomjs_options: ['--ssl-protocol=TLSv1.2']
    }
    Capybara::Poltergeist::Driver.new(app, poltergeist_options)
end

我正在使用Capybara 2.7.1,Poltergeist 1.10.0和PhantomJS 2.1.1。

修改:我知道{1}在PhantomJS中曾经被打破过,但似乎已经fixed年了。

但是,当我将其添加到我的规范中时:

it 'logs the user in', js: true do
    visit login_url
    fill_in 'Email', with: email
    fill_in 'Password', with: password
    find('input[value="LOG IN"]').click()
    expect(page).to have_selector '#logout-btn'
 end

...它仍在输出旧的window.location,而不是新设置的#hackishly get the redirect URL matches = page.body.match(%r{window.location.href ='(https?://.*)';}) redirect_url = matches[1] evaluate_script("window.location = '#{redirect_url}'") evaluate_script('console.log(window.location)') 。咦??

0 个答案:

没有答案