#json #testing #automated-tests #e2e-testing #testcafe
#json #тестирование #автоматизированные тесты #e2e-тестирование #testcafe
Вопрос:
Я хочу взаимодействовать с несколькими элементами, такими как переключатели с несколькими флажками, кнопки и т.д. Я хочу сохранить метку / имя элементов в файле json. Как я могу взаимодействовать с несколькими элементами, используя имя из файла Json в testcafe
Комментарии:
1. Поскольку вы не поделились никаким кодом, возможно, вам подойдет только общий совет. Вы загружаете файл json, считываете ключи / значения и используете их, например, в селекторах для доступа к этим элементам в DOM. Если у вас есть конкретная проблема с вашим кодом, пожалуйста, поделитесь ею, чтобы мы могли сосредоточиться на чем-то более конкретном.
2. Спасибо за ваш ответ. Я не написал код, но я хочу управлять веб-элементами, специально устанавливая флажки, которые предоставляют несколько вариантов, в некоторых случаях переключатели и кнопки отправки (одна кнопка позволяет выполнять несколько действий, изменяя имя, например, «Первый щелчок», затем та же кнопка будет отображаться как «Второй щелчок» и так далее) Я хочу получить имя элементов из файла json { «кнопки»: [«Первый щелчок», «Второй щелчок»], «Флажок»: [«Выбор 1», «Выбор 2»] }, где первый щелчок, второй щелчок и выбор 1 и выбор 2 являются именами веб-элементов, надеюсь, это поможет
Ответ №1:
Взгляните на тестовый пример, управляемый данными. Показано, как загружать данные из файла JSON. Вы можете использовать загруженные данные в выражениях селектора, таких как Selector('button').withText(data.buttons[0])
, для ссылки на элементы.
Ответ №2:
Я не знаю вашего конкретного варианта использования, но, говоря чисто технически, вы можете легко сделать то, что просите:
Ресурсы/names.json:
{
"buttons": [
"First Click",
"Second Click"
],
"checkboxes": [
"Choice1",
"Choice2"
]
}
затем я могу поместить файл в тестовый файл и работать со значениями:
import { getBaseUrl } from '../Helpers/baseUrl';
import { getEnv } from '../Helpers/env';
import Webelements from '../Objects/webelements'
const baseUrl = getBaseUrl();
const env = getEnv();
const webelements = require('../Resources/names.json');
fixture `Webelements`
.page(baseUrl);
test
('Access Webelements From Json', async t => {
webelements.buttons.forEach((button) => {
console.log(button);
});
webelements.checkboxes.forEach((checkbox) => {
console.log(checkbox)
});
});
при этом в консоль будет выведено следующее:
First Click
Second Click
Choice1
Choice2
Другим решением может быть использование классов:
Objects/webelements.js:
class Checkboxes {
constructor () {
this.choices = {
1: "Choice1",
2: "Choice2"
}
}
}
class Buttons {
constructor () {
this.names = ["First Click", "Second Click"]
}
}
class Webelements {
constructor () {
this.checkboxes = new Checkboxes();
this.buttons = new Buttons();
}
}
export default new Webelements();
и используйте его следующим образом:
test
('Access Webelements From Classes', async t => {
Object.entries(Webelements.checkboxes.choices).forEach(([key, val]) => {
console.log(key " - " val);
})
Webelements.buttons.names.forEach((name) => {
console.log(name)
});
});
это приведет к:
1 - Choice1
2 - Choice2
First Click
Second Click
Итак, есть варианты, но суть в том, что некоторые решения лучше для некоторых ситуаций. Я очень мало представляю о вашей ситуации, поэтому вы должны принять это решение самостоятельно.