登录后保持会话-selenium-javascript
我正在尝试使用Selenium Web驱动程序和node
js自动执行几个页面。我可以登录,但是登录后我想使用由Web驱动程序启动的同一会话,以便可以在受会话保护的页面上进行自动测试。这是我的尝试
async function login(){ Let d = await new Builder()
.forBrowser('chrome')
.build();
await d.get('https://demo.textdomain.com/')
await d.findElement(By.id('username')).sendKeys('admin ')
await d.findElement(By.id('password')).sendKeys('admin');
await d.findElement(By.css('button[type="submit"]')).click();
d.getPageSource().then(function(content) {
if(content.indexOf('Welcome text') !==-1 ) {
console.log('Test passed');
console.log('landing page');
d.get('https://demo.textdomain.com/landingpage') //this is still going to login page as i cannot use the previous session
} else {
console.log('Test failed');
return false;
}
//driver.quit();
});
}
login();
回答:
您可能只在处理计时问题。硒移动 非常快
。比您作为用户进行交互的方式要快得多。因此,它通常以似乎无法预测的方式起作用。但这仅仅是因为Selenium的运行速度比您作为用户的速度快得多。为了解决这个问题,您应该充分利用Selenium的内置功能driver.wait
。例如:
const button = driver.wait( until.elementLocated(By.id('my-button')),
20000
);
button.click();
上面的代码一直等到my-button
DOM中出现ID 为ID的按钮,然后单击它。最多等待20000毫秒,但是只要按钮可用,它将立即完成。
因此,在您的情况下,如果在用户成功登录后仍有可用的东西,则可以等待该元素,然后再转到代码中的新页面。
顺便说一句,我也不确定为什么要使用getPageSource()
?这似乎是获取所需内容的一种非常笨拙的方法。那不是您可以获取内容的元素中的内容吗?
我写了一篇有关如何使用Selenium和Node.js编写可靠的浏览器测试的文章,它可以帮助您更详细地理解本文中的上述代码示例,以及可以用来可靠地等待数据库中各种条件的其他技术。浏览器。
以上是 登录后保持会话-selenium-javascript 的全部内容, 来源链接: utcz.com/qa/430963.html