我们的(PHP)应用程序需要设置某些cookie才能加载Angular.js客户端应用程序。如果未设置cookie,则抛出异常并显示错误页面。
这意味着为了运行E2E测试,我们需要设置cookie,但是由于Protractor试图在browser.get
调用之后立即找到Angular(由于抛出异常而不存在),因此失败了。 / p>
browser.get('http://' + domain + '/');
browser.manage().addCookie('foo', 'boo', '/', domain);
我在设置Cookie后尝试拨打browser.get
:
browser.manage().addCookie('foo', 'boo', '/', domain);
browser.get('http://' + domain + '/');
但这会产生以下错误:
无法在'文档'上设置'cookie'属性:Cookie是 在'data:'网址内禁用。
有没有办法处理这种情况?或许告诉量角器在进行第一次browser.get
调用时不检查Angular,或者在调用获取URL之前以某种方式为我们的域设置cookie?
答案 0 :(得分:22)
我在Protractor Getting Started doc:
中找到了解决方案browser.driver.get('http://' + domain + '/');
browser.manage().addCookie('foo', 'boo', '/', domain);
请注意browser.driver.get
而不是browser.get
。这将阻止量角器寻找Angular应用程序并且可以设置cookie。然后我在browser.get
语句中使用了另一个it
。
答案 1 :(得分:0)
addCookie
(具有较新的量角器版本(已通过5.4.2测试))改为使用IWebDriverOptionsCookie
类型的对象。
注意:要获取Cookie,请使用getCookies
browser.manage().addCookie({ name: 'foo', value: 'bar' });
IWebDriverOptionsCookie
文档:interface IWebDriverOptionsCookie {
/** The name of the cookie. */
name: string;
/** The cookie value. */
value: string;
/** The cookie path. Defaults to "/" when adding a cookie. */
path?: string;
/**
* The domain the cookie is visible to. Defaults to the current browsing
* context's document's URL when adding a cookie.
*/
domain?: string;
/**
* Whether the cookie is a secure cookie. Defaults to false when adding a new
* cookie.
*/
secure?: boolean;
/**
* Whether the cookie is an HTTP only cookie. Defaults to false when adding a
* new cookie.
*/
httpOnly?: boolean;
/**
* When the cookie expires.
*
* When adding a cookie, this may be specified in seconds since Unix epoch (January 1, 1970).
* The expiry will default to 20 years in the future if omitted.
*
* The expiry is always returned in seconds since epoch when
* retrieving cookies from the browser.
*
* @type {(!Date|number|undefined)}
*/
expiry?: number | Date;
}
答案 2 :(得分:0)
只要browser.driver.get()
返回一个承诺,您就应该考虑到它:
browser.driver.get('http://' + domain + '/').then(() => {
browser.manage().addCookie({name: 'foo', value: 'boo'});
});
还请注意,在这种情况下,您不需要将域值传递给addCookie
,因为量角器默认情况下将使用当前域。