Files
appium/test/unit/xpath.js

89 lines
3.4 KiB
JavaScript

// Run with mocha by installing dev deps: npm install --dev
// more docs on writing tests with mocha can be found here:
// http://visionmedia.github.com/mocha/
"use strict";
var _ = require('underscore')
, au = require('../../lib/xpath.js');
describe("XPath lookups", function() {
var oks = {
"//button": {path: [{node: 'button', search: 'desc', index: null}]}
, "//button[last()]": {path: [{node: 'button', search: 'desc', index: -1}]}
, "//button[1]": {path: [{node: 'button', search: 'desc', index: 1}]}
, "/button": {path: [{node: 'button', search: 'child', index: null}]}
, "/but.ton": {path: [{node: 'but.ton', search: 'child', index: null}]}
, "/button[2]": {path: [{node: 'button', search: 'child', index: 2}]}
, "button": {path: [{node: 'button', search: 'desc', index: null}]}
, "//button/text/webview": {path: [
{node: 'button', search: 'desc', index: null}
, {node: 'text', search: 'child', index: null}
, {node: 'webview', search: 'child', index: null}]}
, "//button[1]/text/webview[3]": {path: [
{node: 'button', search: 'desc', index: 1}
, {node: 'text', search: 'child', index: null}
, {node: 'webview', search: 'child', index: 3}]}
, "text/webview//button": {path: [
{node: 'text', search: 'desc', index: null}
, {node: 'webview', search: 'child', index: null}
, {node: 'button', search: 'desc', index: null}]}
, "//button[@name='hi there']": {
attr: 'name', constraint: 'hi there', substr: false}
, "//button[@other_attr='hi there']": {
attr: 'other_attr', constraint: 'hi there', substr: false}
, '//button[@name="hi there"]': {
attr: 'name', constraint: 'hi there', substr: false}
, '//list/button[@name="hi there"]': {
attr: 'name', constraint: 'hi there', substr: false}
, '//button[@name=hi there]': {
attr: 'name', constraint: 'hi there', substr: false}
, '//button[contains(@label, "hi")]': {
attr: 'label', constraint: 'hi', substr: true}
, '//button[contains(@other_attr, "hi")]': {
attr: 'other_attr', constraint: 'hi', substr: true}
, "//button[contains(@label, 'hi')]": {
attr: 'label', constraint: 'hi', substr: true}
, "//button[contains(@label, what's up dog)]": {
attr: 'label', constraint: "what's up dog", substr: true}
, "//*[contains(@text, 'agree')]": {
attr: 'text', constraint: 'agree', substr: true}
, "//*[@text='agree']": {
attr: 'text', constraint: 'agree', substr: false}
};
var notOks = [
, "//button123"
, "//button[-1]"
, "//button[last]"
, "//button[last(]"
, "//button[@name$='hi']"
, "//tag_name"
, "//button[0]"
, "//button[]"
, "//button]"
, "//button["
, "//button[something(@name, 'hi')]"
, "//button[noat='wut']"
, "//button/label[@name='hi']/moar"
, "//@attr"
];
describe("Valid XPaths", function() {
_.each(oks, function(test, xpath) {
it(xpath + " should work", function() {
var parsed = au.parseXpath(xpath);
parsed.should.not.equal(false);
_.each(test, function(val, key) {
parsed[key].should.eql(test[key]);
});
});
});
});
describe("Invalid Xpaths", function() {
_.each(notOks, function(xpath) {
it(xpath + " should not work", function() {
var parsed = au.parseXpath(xpath);
parsed.should.equal(false);
});
});
});
});