Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Что такое WD?

Step("Ввод запроса 'смс автоматизация'",
() => googleSearchResultPage = googlePage.EnterSearchText("смс автоматизация"));
Step("Первая ссылка должна содержать адрес sms-automation.ru",
() =>
{
var href = googleSearchResultPage.FirstLink.GetAttribute("href");
Assert.AreEqual(href, "http://www.sms-automation.ru/");
});
Step("Первая ссылка должна содержать адрес sms-automation.ru",
() =>
{
var href = googleSearchResultPage.GetFirstLink();
// или
// var href = googleSearchResultPage.GetAllLinks().First();
Assert.AreEqual(href, "http://www.sms-automation.ru/");
});
import pageobject.*
import pageobject.properties.*
import pageobject.search.*
import pageobject.selector.*
import pageobject.tabs.*
import static pageobject.PageObjectFactory.getPage
def authorLogin = "aaa"
def authorPassword = "bbb"
def firstApproverLogin = "ccc"
def firstApproverPassword = "ddd"
def secondApproverLogin = "eee"
def secondApproverPassword = "fff"
def firstApproverComment = "ggg"
def regNumberbudget = "kkk"
def sleepInterval = 20000
// Вход в систему под Автором
loginLogoutPage.login(authorLogin, authorPassword)
// Вызов меню Создать Договор бюджета
menuBarPage.pressFileCreateMenuItem(MenuBarPage.FileCreateMenuItem.CONTRACT)
// Заполнение обязательных полей карточки
//1. Добавление контента
contractPage.selectFile("C:\\Users\\lll\\Desktop\\Архивная справка_скан.PDF")
// Выбор бюджета
//1. Нажать кнопку выбор бюджета
contractPage.pressSelectBudget()
//2. Страница селектора бюджетов, Ввести значение в поле номер
selectorBudgetPage.inputRegNum(regNumberbudget)
//3. Нажать кнопку поиск
selectorBudgetPage.pressSearch()
//4. Добавить первый результат поиска к выбранным
selectorBudgetPage.clickFirstResult()
//5. Нажать кнопку выбрать
selectorBudgetPage.pressSelectButton()
protected override void Setup()
{
dailyListPage = new LoginPage(Driver)
.LoginAsAdmin()
.OpenDailyList();
}
[Test]
public void DailyList_Test_Parameter_Calculation()
{
var random = new Random();
var v110 = random.Next(100);
var v220 = random.Next(100);
var gou = v110 + v220;
Step("Блокировать документ на редактирование",
() => dailyListPage.LockButon.Click());
Step("Отредактировать параметр 110 и 220 за третий час",
() =>
{
dailyListPage.PowerTable.EditCell(3, 2, v110.ToString());
dailyListPage.PowerTable.EditCell(3, 3, v220.ToString());
});
Step("Сохранить изменения",
() => dailyListPage.SaveButon.Click());
Step("Измененные ячейки отмечены меткой \"есть изменения\",
() => (dailyListPage.PowerTable.CellMarkedAsChanged(3, 2) && dailyListPage.PowerTable.CellMarkedAsChanged(3, 3)).ShouldBeTrue());
Step("Разблокировать документ на редактирование",
() => dailyListPage.LockButon.Click());
Step("Проверка колонки ГОУ = 110 + 220",
() => dailyListPage.PowerTable.Rows[3].Cells[1].Value.ShouldEqual(gou.ToString()));
}
При этом похоже на наш подход с единственным отличием — у вас страницы представлены статическими объектами и при написании тестов пользователь не думает о времени жизни страницы и пишет сценарий последовательно по шагам.
def menu = contractPage.getMenu()
//*[@type='TEXT']") в режиме HtmlDriver, только в Firefox. Это осталось для меня загадкой. А так подкреплюсь вашим опытом, может что нибудь да оптимизирую у себя. <span radio="Model.application.type" value="desired_key_word" class="ng-isolate-scope">
<span class="radio" style="cursor: pointer; background-position: 0px -57px;" data-styled="1"></span>
<span class="radio-label" style="cursor: pointer; background-position: 0px -57px;" ng-transclude="">
<span class="ng-scope">Лейбл чекбокса, название опции</span></span></span>
var checkboxElement = _webDriver.FindElement(By.CssSelector("span[radio='Model.application.type']"));
var s = checkboxElement.GetAttribute("value");
Assert.AreEqual("desired_key_word", s);
var checkbox = _webDriver.FindElements(By.CssSelector("[radio='Model.application.type']"))[1];
var s = _webDriver.ExecuteJavaScript<string>("return angular.element(arguments[0]).scope().Model.application.type;", checkbox);
Assert.AreEqual("desired_key_word", s);
public object ExecuteJavaScript(string javaScript, params object[] args)
{
var javaScriptExecutor = (IJavaScriptExecutor)Driver;
return javaScriptExecutor.ExecuteScript(javaScript, args);
}
public void ScrollToElement(IWebElement element)
{
ExecuteJavaScript("arguments[0].scrollIntoView(true);", element);
}
public void ScrollToTop()
{
ExecuteJavaScript("window.scrollTo(0,0);");
}
Автоматизация приемочного тестирования Selenium + .NET Web Api + AngularJs