IOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг

рдЫрд╡рд┐
рдХрднреА-рдХрднреА, рдПрдХ рд╕рдордп рдЖрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдпрд╣ рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдзреНрд╡рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реЗрд▓реЗрдирд┐рдпрдо рд╡реЗрдм рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрдо рдмрд╛рдд рдорд╛рдиреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪреАрдЬреЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдерд╛ред рдФрд░, рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдереЗ, рд╡реЗ рд╕реЗрд▓реЗрдирд┐рдпрдо рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ JSON рд╡рд╛рдпрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рд▓реЗрдЦ рдПрдкрд┐рдпрдо рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдВрдЪрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ Appium рдХреЛ рдЪреБрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рднреА рд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдкреГрд╖реНрда рд╕рдорд░реНрдерди рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдерд╛ред рдпрд╣рд╛рдБ рд╡реЗ рдХреНрдпрд╛ рд╣реИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдШрдордВрдб:
  1. рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрди: рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдорд╛рдирдХ рд╕реНрд╡рдЪрд╛рд▓рди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. рдЖрдк рдХрд┐рд╕реА рднреА WebDriver- рд╕рдВрдЧрдд рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛, рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде Node.js (рдХреЙрд▓рдмреИрдХ рдФрд░ рдЙрдкрдЬ-рдЖрдзрд╛рд░рд┐рдд рджреЛрдиреЛрдВ рддрд░реАрдХреЗ), рдкреАрдПрдЪрдкреА, рдкрд╛рдпрдерди, рд░реВрдмреА, рд╕реА #, рдХреНрд▓реВрдЬреБрд░, рдпрд╛ рд╕реЗрд▓реЗрдирд┐рдпрдо рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдПрдкреАрдЖрдИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреНрд░рд╛рд╣рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реНрд▓ред
  3. рдЖрдк рдХрд┐рд╕реА рднреА рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣ рдЕрднреА рднреА Android рдФрд░ FirefoxOS рдЬрд╛рдирддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗрд╡рд▓ iOS рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдмрджрд▓рддреЗ рд╕рдордп, рдХреЛрдб рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред рдЖрдЗрдП Appium рд╕рд░реНрд╡рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдЖрдк рдЖрд╡реЗрджрди рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ npm рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ "рд╕реБрдбреЛ" рдЬреЛрдбрд╝реЗрдВред

$ npm install -g appium $ appium & 

рдЖрдкрдХреЛ iOS рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрдкреНрдкрдо рдХреЛ рдПрдирдкреАрдПрдо рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ "sudo authorize_ios" рд▓рд┐рдЦрдХрд░ рдРрд╕рд╛ рдХрд░реЗрдВ (Authorize_ios Appium npm рдкреИрдХреЗрдЬ рд╕реЗ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рд╣реИ)ред рдпрджрд┐ рдЖрдк рд╕реНрд░реЛрдд рд╕реЗ Appium рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдорд╛рдВрдб "sudo grunt рдЕрдзрд┐рдХреГрдд" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╛ рдЗрд╕реЗ Appium.app рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред

рдЪрд▓рд┐рдП рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛:
  1. рдмрдЯрди рдирд┐рдХрд▓ рдЧрдпрд╛
  2. рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдмрдЯрди
  3. рдХрд╛рд░реНрдп рдмрдЯрди
  4. рдмрдЯрди рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ

рдЖрдк рдПрдкреНрдкреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд╛рде рдЯреИрдкрд╕реНрдЯрд░ рдЬреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд░реЛрдмреЛрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ ред рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ редред

рдкрд░реАрдХреНрд╖рдг рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдирдореВрдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧред 2 рд╕рдорд╛рди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ, рдПрдХ ObjectiveC рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдЯрд╛рдЗрдЯреЗрдирд┐рдпрдо рдореЗрдВред рдпрд╣ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдпреВрдЖрдИ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдореВрд▓ рдЖрдИрдУрдПрд╕ рддрддреНрд╡ рдЕрдВрддрддрдГ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред

рдореИрдВ рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛:

 var wd = require("wd") , assert = require("assert") ,Q = require("q") , appURL = __dirname+'/../program/Apps/Titanium/AppiumStudy.app'; // Instantiate a new browser session var browser = wd.promiseRemote("localhost", 4723); // See whats going on browser.on("status", function(info) { console.log('\x1b[36m%s\x1b[0m', info); }); browser.on("command", function(meth, path, data) { console.log(' > \x1b[33m%s\x1b[0m: %s', meth, path, data || ''); }); 

рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ред wd рд╕реЗрд▓реЗрдирд┐рдпрдо рд╡реЗрдм рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдмрд╛рдЗрдВрдбрд░ рд╣реИрдВред AppURL рдореЗрдВ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдЙрд╕рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдпрд╛ рдЙрд╕рдХреЗ http рдкрддреЗ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗрдм рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рдЕрдм рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЯреЗрд╕реНрдЯ рдлрдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 browser .init({ device: "" , name: "Appium: with WD" , platform: "Mac" , app: appURL , version: "6.0" , browserName: "" , newCommandTimeout: 60 }) .then(function () { return browser.elementsByTagName('button'); }) .then(check_buttons) .fail(function (err) { console.log('fail', err) }) .fin(function () { browser.quit(); }) .done(); 

рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╣реА:

 var check_buttons = function(els){ assert.equal(els.length, 4, 'Not enough buttons'); var check_first_buttons = function(els){ var deferred = Q.defer(); var check_alert = function(ValidButton){ var deferred = Q.defer(); browser.clickElement(ValidButton) .then(function(){ return browser.elementsByTagName('alert'); }) .then(function(alert){ assert.equal(alert.length, 1, "Alert not shoved"); return browser.acceptAlert(); }) .fail(function(err){ deferred.reject(new Error(err.message)); }) .fin(function(){ deferred.resolve(); }); return deferred.promise; } var check_invalid_position = function(InvalidButton){ var deferred = Q.defer(); InvalidButton.getLocation() .then(function(location){ assert.equal(location.x, 43, "InvalidButton location is not wrong"); }) .fail(function(err){ deferred.reject(new Error(err.message)); }) .fin(function(els){ deferred.resolve(); }); return deferred.promise; } var check_valid_position = function(ValidButton){ var deferred = Q.defer(); ValidButton.getLocation() .then(function(location){ assert.equal(location.x, 20, 'ValidButton location is wrong'); }) .fail(function(err){ deferred.reject(new Error(err.message)); }) .fin(function(els){ deferred.resolve(); }); return deferred.promise; } check_alert(els[0]) .then(function(){return check_invalid_position(els[1]);}) .then(function(){return check_valid_position(els[0]);}) .fin(function(){ deferred.resolve(els); }); return deferred.promise; } var check_work_button = function(work_button){ var deferred = Q.defer(); work_button.click() .then(function(){ return browser.waitForElementByTagName('text'); }) .then(function(){ return work_button.displayed(); }) .then(function(displayed){ assert.equal(displayed, false, "Work button still visible"); }) .then(function () { return browser.elementsByTagName('text'); }) .then(function (label) { assert.equal(label.length, 1, "Label not found"); return label[0].text(); }) .then(function (text) { assert.equal(text, 'I am live!', "Label text not matched"); }) .fail(function(err){ deferred.reject(new Error(err.message)); }) .fin(function(){ // deferred.resolve(els); }); return deferred.promise; } var check_broken_button = function(broken_button){ var deferred = Q.defer(); broken_button.click() .then(function(){ return broken_button.displayed(); }) .then(function(displayed){ assert.equal(displayed, false, "Broken button still visible"); }) .fail(function(err){ deferred.reject(new Error(err.message)); }) .fin(function(){ deferred.resolve(els); }); return deferred.promise; } var deferred = Q.defer(); check_first_buttons(els) .then(function(){return check_work_button(els[2]);}) .fail(function(err){ deferred.reject(new Error(err.message)); }) .fin(function(){ deferred.resolve(); }); return deferred.promise; } 

"Check_invalid_position" рдореЗрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рддрддреНрд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рд╣рд░ рдЪрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдкрдиреА рдЬрдЧрд╣ рдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдкрд░рдЦ рдореЗрдВ рдмрд╛рдзрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдпрд╣ рдареАрдХ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЖрдкрдХреЛ рддрддреНрд╡ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдк Appium Inspector рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдпрджрд┐ рдЖрдк npm рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ "рд╕реНрдЯреЙрдк" рдмрдЯрди рдХреЗ рдмрд╛рдИрдВ рдУрд░ рдиреАрд▓реЗ рдЬрд╛рдирдХрд╛рд░реА рдЖрдЗрдХрди рдХреЗ рд╕рд╛рде рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ ред



рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЖрдЧреЗ рдмрдврд╝реЗрдЧрд╛, рд╡рд░реНрддрдорд╛рди рдкрд░реАрдХреНрд╖рдХ рдХрд╛рд░реНрдп рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред

 $ node test.js Driving the web on session: 4892e40c-3cdf-4b66-9a01-4bfbad23da67 > POST: /session/:sessionID/elements { using: 'tag name', value: 'button' } > POST: /session/:sessionID/element/0/click > POST: /session/:sessionID/elements { using: 'tag name', value: 'alert' } > POST: /session/:sessionID/accept_alert > GET: /session/:sessionID/element/1/location > GET: /session/:sessionID/element/0/location > POST: /session/:sessionID/element/2/click > POST: /session/:sessionID/elements { using: 'tag name', value: 'text' } > GET: /session/:sessionID/element/2/displayed > POST: /session/:sessionID/elements { using: 'tag name', value: 'text' } > GET: /session/:sessionID/element/6/text > DELETE: /session/:sessionID Ending your web drivage.. 

рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ред рдпрджрд┐ рдЖрдк рдирд┐рд╖реНрдХреНрд░рд┐рдп рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдИ рдореЛрдбрд▓ рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

  check_first_buttons(els) .then(function(){return check_broken_button(els[3]);}) .then(function(){return check_work_button(els[2]);}) .fail(function(err){ deferred.reject(new Error(err.message)); }) .fin(function(){ deferred.resolve(); }); 

 $ node test.js Driving the web on session: 4a5f1d13-b395-49a0-a28f-2d2cd67ac72d > POST: /session/:sessionID/elements { using: 'tag name', value: 'button' } > POST: /session/:sessionID/element/0/click > POST: /session/:sessionID/elements { using: 'tag name', value: 'alert' } > POST: /session/:sessionID/accept_alert > GET: /session/:sessionID/element/1/location > GET: /session/:sessionID/element/0/location > POST: /session/:sessionID/element/3/click > GET: /session/:sessionID/element/3/displayed fail [Error: Broken button still visible] > DELETE: /session/:sessionID Ending your web drivage.. 

рдЖрдк рд▓реЙрдЧ рдЗрди рдПрдкрд┐рдпрдо рдХреЛ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ



Appium рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдЕрднреА рднреА рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк wd рдореЗрдВ рдХрдорд╛рдВрдбреНрд╕ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рд╕реВрдЪреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ рддреЛ рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рдкреАрдПрдо рд▓рд┐рдЦреЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рдХреЗ рднрд╛рдЧ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

Source: https://habr.com/ru/post/In202910/


All Articles