Выполнение JavaScript кода
Для выполнения JavaScript кода в HatFramework добавлен специальный метод ExecuteJavaScriptAsync.
Сначала нужно объявить текстовую переменную и в ней описать скрипт который вы хотите выполнить.
string script = @"(function(){
var element = document.getElementsByTagName('h2')[0];
return element.outerText;
}());";
Теперь с помощью метода ExecuteJavaScriptAsync выполним выше описанный скрипт и получим результат.
string actual = await tester.ExecuteJavaScriptAsync(script);
В данном примере вы получите текст из элемента H2 со страницы на которой этот скрипт был вызван.
Полный пример описан в скрипте ниже:
Файл: ExampleTest4.cs |
using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.Threading; using System.Threading.Tasks; using System.IO; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; using Newtonsoft.Json; using HatFramework; namespace Hat { public class ExampleTest4 { Tester tester; // Главная переменная для работы автотеста // Главная входная функция (с этой функции начинается работа автотеста) public async void Main(Form browserWindow) { tester = new Tester(browserWindow); // Инициализация главной переменной await setUp(); // Функция начала работы с автотестом await test(); // Функция выполнения действий теста await tearDown(); // Функция завершения работы с автотестом } public async Task setUp() { await tester.BrowserFullScreenAsync(); // Устанавливает разрешение браузер на весь экран } public async Task test() { await tester.TestBeginAsync(); // Начало выполнения действий await tester.GoToUrlAsync("https://somovstudio.github.io/test.html", 5); // Загрузка страницы по указанному адресу
// Объявление переменной с описание скрипта на JavaScript string script = @"(function(){ var element = document.getElementsByTagName('h2')[0]; return element.outerText; }());"; // Выполнение скрипта string actual = await tester.ExecuteJavaScriptAsync(script); // Проверка результата string expected = "Авторизация"; await tester.AssertEqualsAsync(expected, actual); // Ожидаемые и актуальные данные должны совпадать await tester.TestEndAsync(); // Завершение выполнения действий } public async Task tearDown() { await tester.BrowserCloseAsync(); // Закрывает браузер } } } |
Примеры JavaScript и JQuery скриптов для метода ExecuteJavaScriptAsync :
- фокус на элемент input и введение данных
var element = document.evaluate("//input[@id='phone']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
element.focus();
element.value = '9999999999';
element.setAttribute("value", "9999999999");
- фокус на элемент input и вставка данных
document.getElementById("phone").focus();
document.execCommand("insertHTML", false, "9999999999");
- введение данных в input и вызов событий
var element = document.evaluate("//input[@id='phone']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
element.value = '9999999999';
element.dispatchEvent(new KeyboardEvent('keydown', { bubbles: true }));
element.dispatchEvent(new KeyboardEvent('keypress', { bubbles: true }));
element.dispatchEvent(new KeyboardEvent('keyup', { bubbles: true }));
element.dispatchEvent(new Event('input', { bubbles: true }));
element.dispatchEvent(new Event('change', { bubbles: true }));
- выделить значение в input
var element = document.evaluate("//input[@id='phone']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
element.select();
- нажатие мышкой
var clickEvent = new MouseEvent("click", { "view": window, "bubbles": true, "cancelable": false });
var element = document.evaluate("//input[@id='phone']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
element.dispatchEvent(clickEvent);
var theEvent = document.createEvent("MouseEvent");
theEvent.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
element.dispatchEvent(theEvent);
- использование JQuery для нажатия кнопки (если библиотека подключена на тестируемой странице)
string script = @"$(function() {
console.log('autotest JQUERY');
$('#btn-send > div.btn > a').click();
});";
Created with the Personal Edition of HelpNDoc: Easy CHM and documentation editor