gpt4 book ai didi

javascript - 我需要在 Protractor 中关闭并打开新浏览器

转载 作者:行者123 更新时间:2023-12-03 00:03:58 25 4
gpt4 key购买 nike

我有一个简单的测试:

beforeEach(function () {
lib.startApp(constants.ENVIRONMENT, browser);//get url
loginPageLoc.loginAs(constants.ADMIN_LOGIN,constants.ADMIN_PASSWORD,
browser);// log in
browser.driver.sleep(5000); //wait
});

afterEach(function() {
browser.restart(); //or browser.close()
});

it('Test1' , async() => {
lib.waitUntilClickable(adminManagersPage.ButtonManagers, browser);
adminManagersPage.ButtonManagers.click();
expect(element(by.css('.common-popup')).isPresent()).toBe(false);
});
it('Test2' , async() => {
lib.waitUntilClickable(adminManagersPage.ButtonManagers, browser);
adminManagersPage.ButtonManagers.click();
expect(element(by.css('.common-popup')).isPresent()).toBe(false);
});

第一次迭代看起来不错,但在 .restart() 之后我得到:

Failed: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used. NoSuchSessionError: This driver instance does not have a valid session ID (did you call WebDriver.quit()?) and may no longer be used.

如果我使用.close()我得到:

Failed: invalid session id

但是如果我在简单的 console.log('case 1'); 上更改 Test2 ,它看起来不错。

请解释一下我做错了什么?

最佳答案

您将函数声明为异步,但不等待其中的任何操作。如果您没有在配置中将 SELENIUM_PROMISE_MANAGER 设置为 false,那么在声明异步函数时,您将在整个测试过程中看到意外行为。这种异步行为可能是导致您出现问题的原因,因此我将确保 SELENIUM_PROMISE_MANAGER:false 并确保您在每个函数中等待您的操作。

如果将第二个测试更改为 console.log(),则测试通过的原因是因为您没有与浏览器交互,因此不需要 selenium session ID。每次关闭浏览器时,selenium session ID 都会被销毁,并在启动新浏览器窗口时创建一个新 session ID。

您还应该注意 there is a config setting您可以启用,这样您就不需要在测试中手动执行此操作。

更新:添加我所描述的代码示例:

注意:如果您已经开发了很多代码,则需要付出很大的努力才能将您的框架转换为 Async/await 语法。要获得更快的解决方案,您可以尝试从框架中删除 async 关键字区 block

将这些添加到您的配置中

SELENIUM_PROMISE_MANAGER:false,
restartBrowserBetweenTests:true

并将您的规范更改为

beforeEach(async function () {
await lib.startApp(constants.ENVIRONMENT, browser);//get url
await loginPageLoc.loginAs(constants.ADMIN_LOGIN, constants.ADMIN_PASSWORD,
browser);// log in
await browser.driver.sleep(5000); //wait
});

it('Test1', async () => {
await lib.waitUntilClickable(adminManagersPage.ButtonManagers, browser);
await adminManagersPage.ButtonManagers.click();
expect(await element(by.css('.common-popup')).isPresent()).toBe(false);
});
it('Test2', async () => {
await lib.waitUntilClickable(adminManagersPage.ButtonManagers, browser);
await adminManagersPage.ButtonManagers.click();
expect(await element(by.css('.common-popup')).isPresent()).toBe(false);
});

关于javascript - 我需要在 Protractor 中关闭并打开新浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55052907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com