gpt4 book ai didi

javascript - 使用 Node.js selenium 异步页面对象模式

转载 作者:行者123 更新时间:2023-12-03 07:30:59 24 4
gpt4 key购买 nike

我很难尝试使用 Node.js 来适应异步。我在使用 selenium-webdriver 和页面对象模式时遇到了问题。我觉得在进行自动化测试时,某些事情必须同步,否则您的测试将会失败,因为您在插入数据之前单击了按钮。我有一个与此类似的问题。我想添加一名员工,然后搜索该员工,但对员工的搜索是在添加员工之前执行的。

var employee = new Employee('grimlek', 'Charles', 'Sexton', 'TitleTitle',
'Upper Management', 'Company Admin', 'Contractor', '-7', 'Remote',
'05212016', '3369407787', '3368791234', 'charles@example.com',
'charles.sexton', 'Skype', 'abcdefgh');

driver.get('https://website.com/login')
.then(function() {
//This behaves as intended
loginPage.login('company.admin', 'password') })
.then(function() {
//Add employee
employeePage.addEmployee(employee) })
.then(function() {
//Search for employee after employee is added
employeePage.searchEmployee(employee)});

员工页面对象

var EmployeePage = function (driver) {

this.addEmployee = function (employee) {
driver.findElement(webdriver.By.css('button[class=\'btn btn-default\']')).then(function (element) {
//
//Search employee function is done before the line below this
//
element.click();
}).then(function () {
setTimeout(function () {
driver.findElement(webdriver.By.id('employee_username')).then(function (element) {
element.sendKeys(employee.username);
});

driver.findElement(webdriver.By.id('employee_first_name')).then(function (element) {
element.sendKeys(employee.firstName);
});

driver.findElement(webdriver.By.id('employee_last_name')).then(function (element) {
element.sendKeys(employee.lastName);
});

driver.findElement(webdriver.By.id('employee_title_id')).then(function (element) {
element.sendKeys(employee.title);
});

driver.findElement(webdriver.By.id('employee_role')).then(function (element) {
element.sendKeys(employee.role);
});
}, 5000);
});
//
//
//Search employee should occur when the thread leaves the function
//
};

this.searchEmployee = function (employee) {
driver.findElement(webdriver.By.css('input[class=\'form-control ng-pristine ng-valid\']')).then(function(element) {
element.sendKeys(employee.firstName + ' ' + employee.lastName);
});
};

};

module.exports = EmployeePage;

我知道 searchEmployee 和 addEmployee 函数都不会返回 promise ,我正在尝试将它们与 .then 函数链接起来。我确实相信这是我的问题,但我需要帮助如何完成它,而不是如何操纵它。我应该使用回调吗?我现在已经花了四个小时来解决这个问题,并且尝试过谷歌搜索和对各种主题进行研究。如果我没有提供足够的代码,请告诉我,我将提供一个简化的可运行示例。

最佳答案

一个值得称赞的目标是使每个测试独立。如果对应用程序进行更改(例如,错误修复),则仅需要执行受影响的测试。此外,它使得转向网格成为可能。

但这在实践中很难实现。您的测试必须包括满足先决条件所需的所有测试。

Cucumber具有包含场景的功能文件 每个场景都是一个测试。场景按照功能文件中列出的顺序执行。因此,组织事物的一种方法是将测试之前的所有先决条件场景包含在功能文件中,您可以添加 tag(s)在功能语句之前,以便当您执行该标记时,整个功能文件都会运行。也许第一个场景将数据库(的子集)重置为已知状态。

诀窍是在多台机器上并行运行功能。如果将这些多个客户端指向同一服务器,请注意这些功能不应创建或更新重叠实体,这些实体在服务器写入数据库时​​可能会发生冲突。例如。 “用户‘tom’已经存在是什么意思?”每个功能都需要创建一个唯一的用户名。

关于javascript - 使用 Node.js selenium 异步页面对象模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35800983/

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