Как взаимодействовать с несколькими веб-элементами в testcafe с помощью файла json

#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
  

Итак, есть варианты, но суть в том, что некоторые решения лучше для некоторых ситуаций. Я очень мало представляю о вашей ситуации, поэтому вы должны принять это решение самостоятельно.