How to use spinTitle method in Appium Xcuitest Driver

Best JavaScript code snippet using appium-xcuitest-driver

ShippingCostCalculator.js

Source:ShippingCostCalculator.js Github

copy

Full Screen

1import React, { Component } from 'react';2import FlatButton from 'material-ui/FlatButton';3import PropTypes from 'prop-types';4import glamorous from 'glamorous';5import { apiClient } from '../../mocks/apiMock';6import SpinBox from './SpinBox';7import ShippingInfoBox from './ShippingInfoBox';8export default class ShippingCostCalculator extends Component {9  constructor(props) {10    super(props);11    this.spinValue = 0;12    this.spinBoxName = 'SpinBoxNumber';13    this.onCalculateClick = this.onCalculateClick.bind(this);14    this.fetchShippingCost = this.fetchShippingCost.bind(this);15    this.renderCalculateShippingCost = this.renderCalculateShippingCost.bind(this);16    this.resetShippingCost = this.resetShippingCost.bind(this);17    this.preventCopyPaste = this.preventCopyPaste.bind(this);18    this.state = { shippingCost: [] };19  }20  componentDidMount() {21    this.preventCopyPaste();22  }23  onCalculateClick() {24    const value = parseInt(document.getElementById(this.spinBoxName).value);25    this.spinValue = value;26    this.fetchShippingCost({ code: this.props.code, quantity: value });27  }28  preventCopyPaste() {29    document.getElementById(this.spinBoxName).onpaste = (e) => e.preventDefault();30  }31  fetchShippingCost({ code, quantity }) {32    apiClient.fetchShippingPrice(code, quantity)33      .then(result => this.setState({ shippingCost: result }))34      .catch(err => console.log(err));35  }36  resetShippingCost() {37    this.setState({ shippingCost: [] });38  }39  renderCalculateShippingCost() {40    return (41      <CalculateSection>42        <SpinSection>43          <SpinTitle>{labels.spinLabel}</SpinTitle>44          <SpinBox />45        </SpinSection>46        <FlatButton47          label={labels.buttonLabel}48          fullWidth49          backgroundColor={'#67cb33'}50          labelStyle={{ color: 'white', fontSize: '28px' }}51          style={{ height: '115px', marginTop: '72%' }}52          onClick={this.onCalculateClick}53        />54      </CalculateSection>55    );56  }57  renderShippingCost() {58    const shippingCost = this.state.shippingCost.availableShipmentCosts[0];59    return (60      <ShippingCostSection>61        <CostHeader>62          {`${this.spinValue} unità`}63          <ChangeQuantity onClick={this.resetShippingCost} >{labels.change}</ChangeQuantity>64        </CostHeader>65        <ExploreTitle>{labels.explore}</ExploreTitle>66        <ShippingInfoBox shippingCost={shippingCost} />67        <CostFooter>{labels.footer}</CostFooter>68        <FlatButton69          label={labels.backButtonLabel}70          fullWidth71          backgroundColor={'#67cb33'}72          labelStyle={{ color: 'white', fontSize: '28px' }}73          style={{ height: '115px', marginTop: '387px' }}74          onClick={this.props.backFn}75        />76      </ShippingCostSection>77    );78  }79  render() {80    const { name, code } = this.props;81    const { shippingCost } = this.state;82    return (83      <Wrapper>84        <Title>{labels.title}</Title>85        <SubTitle>{`${name} - Ref. ${code}`}</SubTitle>86        {87          shippingCost.length === 088          ? this.renderCalculateShippingCost()89          : this.renderShippingCost()90        }91      </Wrapper>92    );93  }94}95ShippingCostCalculator.propTypes = {96  name: PropTypes.string.isRequired,97  code: PropTypes.string.isRequired,98  backFn: PropTypes.func.isRequired99};100const Wrapper = glamorous.div({101  display: 'flex',102  flexDirection: 'column',103  alignItems: 'center',104  height: '1420px',105  '& > p': {106    color: 'white'107  }108});109const Title = glamorous.p({110  fontSize: '48px',111  marginBottom: '3%'112});113const SubTitle = glamorous.p({114  fontSize: '16px',115  marginBottom: '20%'116});117const SpinTitle = glamorous.p({118  fontSize: '16px',119  fontStyle: 'italic',120  fontWeight: '300',121  width: '360px',122  textAlign: 'center',123  marginBottom: '3%',124  marginTop: '12%',125  color: 'white'126});127const CalculateSection = glamorous.div({128  width: '100%',129  opacity: 1130});131const SpinSection = glamorous.div({132  display: 'flex',133  flexDirection: 'column',134  alignItems: 'center'135});136const ShippingCostSection = glamorous.div({137  display: 'flex',138  flexDirection: 'column',139  alignItems: 'center'140});141const CostHeader = glamorous.div({142  display: 'flex',143  width: '780px',144  height: '150px',145  backgroundColor: '#4a4a4a',146  color: 'white',147  alignItems: 'center',148  justifyContent: 'center',149  fontSize: '40px',150  flexDirection: 'column'151});152const ChangeQuantity = glamorous.p({153  fontSize: '18px',154  textDecoration: 'underline',155  marginTop: '2%'156});157const ExploreTitle = glamorous.p({158  width: '320px',159  height: '20px',160  fontFamily: 'LeroyMerlinSans',161  fontSize: '16px',162  fontWeight: '300',163  fontStyle: 'italic',164  textAlign: 'center',165  color: '#ffffff',166  marginTop: '10%'167});168const CostFooter = glamorous.p({169  width: '470px',170  height: '65px',171  fontSize: '16px',172  fontWeight: 300,173  fontStyle: 'italic',174  textAlign: 'center',175  color: '#e4e4e4',176  marginTop: '5%'177});178const labels = {179  title: 'Calcola il costo di consegna',180  spinLabel: 'Inserisci la quantità desiderata per calcolare il costo del trasporto',181  buttonLabel: 'Calcola la consegna',182  backButtonLabel: 'Torna alla pagina prodotto',183  explore: 'Esplora le tipologie di consegna',184  footer: 'Ti ricordiamo che il prezzo è indicativo e potrebbe cambiare a seconda della quantità e dell\' indirizzo di consegna.',185  change: 'Modifica dati'...

Full Screen

Full Screen

App.js

Source:App.js Github

copy

Full Screen

1import React, { Component } from 'react';2import NotificationSystem from 'react-notification-system';3import AppRouter from './router';4import {Provider} from 'react-redux';5import Request from '../utils/Request';6import {createStore, applyMiddleware ,compose} from 'redux';7import Spin from '../component/common/Spin';8import reducers from '../reducers/index';9import ModalRouter from '../component/ModalRouter';10let store = createStore(reducers, undefined, compose(11    applyMiddleware(12    ),13    window.devToolsExtension ? window.devToolsExtension() : f => f14));15if (module.hot) {16    module.hot.accept('../reducers', () => {17        const nextRootReducer = require('../reducers/index');18        store.replaceReducer(nextRootReducer);19    });20}21export default class App extends Component {22    constructor(props) {23        super(props);24    }25    render() {26        return (27            <div>28                <Provider store={store}>29                    <AppRouter wrapComp={::this.wrapComp}/>30                </Provider>31            </div>32        );33    }34    wrapComp(Comp) {35        return class extends Component {36            constructor(props) {37                super(props);38                this.state = {39                    showSpin: false,40                    spinTitle: ''41                };42            }43            render() {44                return (45                    <div>46                        <ModalRouter ref="modalRouter"/>47                        <NotificationSystem ref="notificationSystem"/>48                        <Spin show={this.state.showSpin} title={this.state.spinTitle}/>49                        <Comp {...this.props}50                            request={::this.request}51                            showModal={::this.showModal}52                            notify={::this.notify}53                            showSpin={::this.showSpin}54                            hideSpin={::this.hideSpin}/>55                    </div>56                );57            }58            /**59             * 发送ajax请求60             * @param url   请求地址(必填)61             * @param method    请求方法(默认GET)62             * @param data  请求参数(需求就填)63             * @param contentType  请求类型, 默认'json'64             * @param onSuc 业务成功(code:200)65             * @param onFail    业务失败(code:500)66             * @param onErr http错误67             * @param onResponded   收到回应统一执行的动作68             *69             * 调用的时候实际只需要传url, data, onSuc70             */71            request({url, method, data, contentType, onSuc, onFail, onErr, onOther, onResponded}) {72                let self = this;73                onFail = onFail || (resp => self.notify(resp.message, 'error'));74                onErr = onErr || (() => self.notify("网络错误", 'error'));75                Request({76                    url, method, data, contentType,77                    onSuc: resp => {78                        onSuc && onSuc(resp);79                        onResponded && onResponded(resp);80                        self.hideSpin();81                    },82                    onFail: resp => {83                        onFail && onFail(resp);84                        onResponded && onResponded(resp);85                        self.hideSpin();86                    },87                    onErr: err => {88                        onErr && onErr(err);89                        onResponded && onResponded(err);90                        self.hideSpin();91                    },92                    onOther: resp => {93                        onOther && onOther(resp);94                        onResponded && onResponded(resp);95                        self.hideSpin();96                    }97                });98            }99            /**100             * 右上角消息弹框101             * @param msg   消息102             * @param lvl   级别:'success','info','warn','error'103             * @param autoDismiss   消失时间, 不传默认为5秒104             */105            notify(msg, lvl, autoDismiss) {106                this.refs.notificationSystem.addNotification({107                    message: msg,108                    level: lvl,109                    autoDismiss: autoDismiss || 5110                });111            }112            showSpin(title) {113                this.setState({114                    showSpin: true,115                    spinTitle: title116                })117            }118            hideSpin() {119                this.setState({120                    showSpin: false,121                    spinTitle: ''122                })123            }124            showModal(type, data) {125                this.modalRouter.show(type, data);126            }127            componentDidMount() {128                this.modalRouter = this.refs.modalRouter;129            }130        }131    }...

Full Screen

Full Screen

windows-frame-specs.js

Source:windows-frame-specs.js Github

copy

Full Screen

...26      // unfortunately, iOS8 doesn't respond to the close() method on window27      // the way iOS7 does28      driver29        .elementById('blanklink').click()30        .then(function () { return spinTitle("I am another page title", driver); })31        .windowHandles()32        .then(function (handles) {33          return driver34            .sleep(2000).close().sleep(3000)35            .windowHandles()36              .should.eventually.be.below(handles.length);37        }).then(function () { return spinTitle("I am a page title", driver); })38      .nodeify(done);39    });40    it('should be able to go back and forward', function (done) {41      driver42        .elementByLinkText('i am a link')43          .click()44        .elementById('only_on_page_2')45        .back()46        .elementById('i_am_a_textbox')47        .forward()48        .elementById('only_on_page_2')49        .nodeify(done);50    });51    // broken on real devices, see https://github.com/appium/appium/issues/516752    it("should be able to open js popup windows with safariAllowPopups set to true @skip-real-device", function (done) {53      driver54        .elementByLinkText('i am a new window link')55        .click()56        .then(function () { return spinTitle("I am another page title", driver, 30); })57      .nodeify(done);58    });59  });60});61describe('safari - windows and frames (' + env.DEVICE + ') @skip-ios6 - without safariAllowPopups', function () {62  var driver;63  var desired = {64    browserName: 'safari',65    safariAllowPopups: false66  };67  setup(this, desired).then(function (d) { driver = d; });68  beforeEach(function (done) {69    loadWebView("safari", driver).nodeify(done);70  });71  it("should not be able to open js popup windows with safariAllowPopups set to false", function (done) {72    driver73      .execute("window.open('/test/guinea-pig2.html', null);")74      .then(function () { return spinTitle("I am another page title", driver, 15); })75      .should.eventually.be.rejectedWith("Title never became 'I am another")76    .nodeify(done);77  });...

Full Screen

Full Screen

webview.js

Source:webview.js Github

copy

Full Screen

...10    .then(function (pageTitle) {11      if (pageTitle.indexOf(expTitle) < 0) {12        return browser13          .sleep(500)14          .then(function () { return spinTitle(expTitle, browser, timeout - 1); });15      }16    });17};18var loadWebView = function (desired, browser, urlToLoad, titleToSpin) {19  var app = typeof desired === 'object' ? desired.app || desired.browserName  : desired;20  var uuid = uuidGenerator.v1();21  if (typeof urlToLoad === "undefined") {22    if (app === "chrome" || app === "chromium" || app === "chromebeta") {23      urlToLoad = env.CHROME_GUINEA_TEST_END_POINT + '?' + uuid;24    } else {25      urlToLoad = env.GUINEA_TEST_END_POINT + '?' + uuid;26    }27  }28  if (typeof titleToSpin === "undefined") {29    titleToSpin = uuid;30  }31  if (_.contains(["safari", "chrome", "chromium", "chromebeta"], app)) {32    return browser33      .get(urlToLoad)34      .sleep(3000)35      .then(function () { return spinTitle(titleToSpin, browser); });36  } else {37    return browser38      .contexts()39      .then(function (ctxs) {40        ctxs.length.should.be.above(0);41        return browser42          .context(ctxs[1])43          .url();44      })45      .then(function (url) {46        if (url !== urlToLoad) {47          return browser48            .get(urlToLoad)49            .then(function () { return spinTitle(titleToSpin, browser); });50        } else {51          return spinTitle(titleToSpin, browser);52        }53      });54  }55};56var isChrome = function (desired) {57  var chromes = ["chrome", "chromium", "chromebeta"];58  return _.contains(chromes, desired.app) ||59         _.contains(chromes, desired.browserName);60};61function skip(reason, done) {62  console.warn("skipping: " + reason);63  done();64}65var testEndpoint = function (desired) {...

Full Screen

Full Screen

helpers.js

Source:helpers.js Github

copy

Full Screen

...17  return title;18}19async function spinTitleEquals (driver, expectedTitle, tries = 90) {20  await retry(tries, async () => {21    let title = await spinTitle(driver);22    if (title !== expectedTitle) {23      throw new Error(`Could not find expected title. Found: '${title}'`);24    }25  });26}27async function spinWait (fn, waitMs = 10000, intMs = 500) {28  let tries = parseInt(waitMs / intMs, 10);29  await retryInterval(tries, intMs, fn);30}31export { spinTitle, spinTitleEquals, spinWait, GUINEA_PIG_PAGE,...

Full Screen

Full Screen

window.title.flasher.js

Source:window.title.flasher.js Github

copy

Full Screen

1(function () {2	function spintitle () { 3		if (window.blurred) {4			var w = ['wtf','bbq','omg','hey','oops','hey'];5			document.title = w[Math.floor(Math.random() * (w.length-1))];6		}7		setTimeout(function () { spintitle(); }, 500);8	}9	window.onblur = function () { window.blurred = true; }10	window.onfocus = function () { window.blurred = false; }11	spintitle();...

Full Screen

Full Screen

Using AI Code Generation

copy

Full Screen

1var webdriver = require('selenium-webdriver');2}).build();3driver.sleep(10000).then(function() {4    driver.executeScript('mobile: spinTitle', {direction: 'right', duration: 2.0}).then(function() {5        console.log('Title spun');6    });7});8driver.quit();

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require('wd');2driver.init({3}).then(function() {4  return driver.execute('mobile: spinTitle');5}).then(function() {6  console.log('done spinning');7}).fin(function() {8  return driver.quit();9}).done();

Full Screen

Using AI Code Generation

copy

Full Screen

1const { remote } = require('webdriverio');2(async () => {3    const browser = await remote({4        capabilities: {5        }6    })7    await browser.pause(3000)8    await browser.execute('mobile: spinTitle', { duration: 5 })9    await browser.pause(3000)10    await browser.deleteSession()11})().catch(e => console.error(e))

Full Screen

Using AI Code Generation

copy

Full Screen

1var wd = require('wd');2var assert = require('assert');3var driver = wd.promiseChainRemote('localhost', 4723);4var desired = {5};6  .init(desired)7  .setImplicitWaitTimeout(3000)8  .title()9    .then(function(title) {10      console.log(title);11    })12  .elementById('mobile')13  .click()14  .elementById('mobile')15  .spinTitle('Appium: Mobile App Automation Made Awesome.')16  .then(function(title) {17    console.log(title);18  })19  .quit();20commands.spinTitle = async function (title, spinMs = 2000, timeoutMs = 60000) {21  let start = Date.now();22  let lastTitle = await this.title();23  while (lastTitle !== title && (Date.now() - start) < timeoutMs) {24    await B.delay(spinMs);25    lastTitle = await this.title();26  }27  return lastTitle;28};29commands.title = async function () {30  return await this.execute('return document.title');31};32commands.execute = async function (script, args) {33  await this.useWebview();34  return await this.remote.execute(script, args);35};36commands.useWebview = async function () {37  if (this.isWebContext()) {38    return;39  }40  let contexts = await this.getContextsAndViews();41  if (contexts.length < 1) {42    throw new Error("Could not find any webviews");43  }44  await this.setContext(contexts[0].id);45};

Full Screen

Using AI Code Generation

copy

Full Screen

1driver.spinTitle('test', 2);2commands.spinTitle = async function (title, seconds) {3  await this.waitForElementByAccessibilityId(title, seconds);4};5commands.waitForElementByAccessibilityId = async function (selector, timeout) {6  return await this.waitForElement('accessibility id', selector, timeout);7};8commands.waitForElement = async function (strategy, selector, timeout) {9  let element = await this.findElement(strategy, selector);10  await this.implicitWait(0);11  await this.waitForCondition(`return $.isElementOrItsProxyByIdPresent('${element.ELEMENT}');`, {12  });13  await this.implicitWait(this.implicitWaitMs / 1000);14  return element;15};16commands.findElement = async function (strategy, selector) {17  if (strategy === 'accessibility id') {18    strategy = '-ios uiautomation';19    selector = `target.frontMostApp().navigationBar().staticTexts().withPredicate("name == '${selector}'")`;20  }21  return await this.findElOrEls(strategy, selector, false);22};23commands.findElOrEls = async function (strategy, selector, mult) {24  let endpoint = mult ? '/elements' : '/element';25  let params = {using: strategy, value: selector};26  let cmd = `$.mainApp().findElement${mult ? 's' : ''}('${strategy}', '${selector}')`;27  let res = await this.proxyCommand(endpoint, 'POST', params);28  let doFind = async () => {29    let el;30    try {31      el = await this.executeAtom('find_element', [cmd, !!mult]);32    } catch (err) {33      if (err.message.indexOf('status: 7') !== -1) {34        return null;35      }36      throw err;37    }

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Appium Xcuitest Driver automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Sign up Free
_

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful