尝试运行iOS测试时MochaJS的“非JSON响应”
问题描述:
我试过在http://appium.io/slate/en/1.5.3/?javascript#ios上列出的故障排除步骤,但没有运气。尝试运行iOS测试时MochaJS的“非JSON响应”
我跑我的测试有:
$ mocha sample.js
这成功安装该应用的设备上,并打开它,但测试的第一步,此错误每次失败:
错误: [elementByName( “用户名”)]不JSON响应
at exports.newError (node_modules/wd/lib/utils.js:145:13)
at node_modules/wd/lib/callbacks.js:59:17
at node_modules/wd/lib/webdriver.js:179:5
at Request._callback (node_modules/wd/lib/http-utils.js:88:7)
at Request.self.callback (node_modules/request/request.js:187:22)
at Request.<anonymous> (node_modules/request/request.js:1048:10)
at IncomingMessage.<anonymous> (node_modules/request/request.js:969:12)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
这是我的测试:
//example from built.io
"use strict";
require("./helpers/setup");
require('colors');
var wd = require("wd"),
\t _ = require('underscore'),
\t Q = require('q'),
\t serverConfigs = require('./helpers/appium-servers');
var serverConfig = serverConfigs.local;
var driver = wd.promiseChainRemote(serverConfig);
var pry = require('pryjs');
var _p = require('./helpers/promise-utils'); // needed?
var simulator = false
var chai = require("chai");
// var assert = require('assert'); //needed?
var assert = chai.assert;
// var config = require('./helpers/config')
chai.config.includeStack = true;
describe("Node Sample Automation Code", function() {
\t this.timeout(300000);
\t var allPassed = true;
\t before(function() {
\t \t var serverConfig = process.env.SAUCE ? serverConfigs.sauce : serverConfigs.local;
\t \t var driver = wd.promiseChainRemote(serverConfig);
\t \t require("./helpers/logging").configure(driver);
\t \t var desired = _.clone(require("./helpers/caps").mycapabilities);
\t \t desired.app = require("./helpers/apps").myTestApp;
\t \t if (process.env.SAUCE) {
\t \t \t desired.name = 'Automation Code';
\t \t \t desired.tags = ['sample'];
\t \t }
\t \t return driver.init(desired);
\t });
\t after(function() {
\t \t return driver
\t \t .sleep(3000).quit().finally(function() {
\t \t \t if (process.env.SAUCE) {
\t \t \t \t return driver.sauceJobStatus(allPassed);
\t \t \t }
\t \t });
\t });
\t afterEach(function() {
\t \t allPassed = allPassed && this.currentTest.state === 'passed';
\t });
\t it("Should Login", function() {
\t \t return driver
\t \t .elementByName('Username').click()
\t \t //same field - this doesn't work either
\t \t // .elementByXPath("//UIAApplication[1]/UIAWindow[1]/UIATextField[1]")
\t });
});
我与elementByXPath命令,它使用的确切路径,以由所述Appium检查揭示了元件完全相同的错误。在这两种情况下,我使用的命令与在其他设置(iOS和mocha)中工作的其他测试的示例完全相同,这让我相信这不是我对命令的使用,但是设备和Appium之间的通信存在根本性错误。
这里的Appium日志的摘录,似乎适用于错误:
2016-12-26 03:47:43:217 - [MJSONWP] Responding to client with driver.getStatus() result: {"build":{"version":"1.5.3"...
2016-12-26 03:47:43:233 - [HTTP] --> POST /wd/hub/session/element {"using":"name","value":"Username"}
2016-12-26 03:47:43:237 - [debug] [HTTP] No route found. Setting content type to 'text/plain'
2016-12-26 03:47:43:239 - [HTTP] <-- POST /wd/hub/session/element 404 5 ms - 65
2016-12-26 03:47:43:242 - [MJSONWP] Responding to client with driver.getStatus() result: {"build":{"version":"1.5.3"...
我想感谢所有帮助任何人都可以提供,甚至猜测或暗示至于什么错误“不是JSON响应”意味着,为什么会发生。提前致谢。
答
我在定义驱动程序两次 - 在“before”块中注释它之后,使用XPath命令而不是.elementByName,它工作正常。