简体   繁体   English

单击按钮后自动测试失败

[英]Automated test fails on button click

I downloaded a simple app from appium github and tried to write an automated test for it using Appium Server (version 1.3.3). 我从appium github下载了一个简单的应用程序,并尝试使用Appium Server(版本1.3.3)为其编写了一个自动化测试。 Here is my code 这是我的代码

import io.appium.java_client.AppiumDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;

import static org.testng.AssertJUnit.assertEquals;

public class AppiumDemo {

    private AppiumDriver ad;

    @Before
    public void setupTest(){
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("appium-version", "1.3.3");
        capabilities.setCapability("platformName", "iOS");
        capabilities.setCapability("platformVersion", "7.1");
        capabilities.setCapability("deviceName", "iPhone 5s");
        capabilities.setCapability("app", "/Users/admin/Downloads/TestApp.app");
        try {
            ad = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }

    }

    @After
    public void tearDown(){
        if(ad != null) ad.quit();
    }

    @Test
    public void main() {
        ad.findElement(By.name("IntegerA")).sendKeys("11");
        ad.findElement(By.name("IntegerB")).sendKeys("1");
        ad.findElement(By.name("ComputeSumButton")).click();
        int ans = Integer.parseInt(ad.findElement(By.name("Answer")).getText());
        assertEquals(ans, 12);
        ad.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
    }

}

it opens the simulator, enters 2 numbers, but when should click on the button to calculate the sum, test crashes, simulator is killed. 它打开模拟器,输入2个数字,但是当应单击按钮计算总和时,测试崩溃,模拟器被杀死。 in intellij it shows that it failed on the line I press click. 在intellij中,这表明它在我按下click的行上失败。 and - Process finished with exit code 255. I use Yosemite , v. 10.10.1 installed on wmware. -进程完成,退出代码为255。我使用Yosemite v.10.10.1版本。 Please help me, what can be the reason of it ? 请帮助我,这可能是什么原因? thanks a lot. 非常感谢。

here is interesting parts of my Appium log 这是我Appium日志中有趣的部分

info: [debug] [INST] 2014-12-29 12:03:27 +0000 Debug: Got new command 3 from instruments: au.getElementByName('IntegerA')

info: [debug] [INST] 2014-12-29 12:03:27 +0000 Debug: evaluating au.getElementByName('IntegerA')
info: [debug] [INST] 2014-12-29 12:03:27 +0000 Debug: evaluation finished

info: [debug] Socket data received (38 bytes)
info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":{"ELEMENT":"0"}}
info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"0"},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: <-- POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element 200 371.561 ms - 87 {"status":0,"value":{"ELEMENT":"0"},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}

info: [IOS_SYSLOG_ROW ] Dec 29 16:03:27 Admins-Mac.local lsd[3625] <Warning>: LaunchServices: Currently 0 installed placeholders: (
info: [IOS_SYSLOG_ROW ] )
info: --> POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element/0/value {"id":"0","value":["11"]}
info: [debug] Pushing command to appium work queue: "au.getElement('0').setValueByType('11')"
info: [debug] Sending command to instruments: au.getElement('0').setValueByType('11')
info: [debug] [INST] 2014-12-29 12:03:27 +0000 Debug: Lookup returned [object UIATextField] with the name "IntegerA" (id: 0).
info: [debug] [INST] 2014-12-29 12:03:27 +0000 Debug: responding with:
info: [debug] [INST] 2014-12-29 12:03:27 +0000 Debug: Running system command #4: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":{"ELEMENT":"0"}}...

info: [debug] [INST] 2014-12-29 12:03:28 +0000 Debug: Got new command 4 from instruments: au.getElement('0').setValueByType('11')

info: [debug] [INST] 2014-12-29 12:03:28 +0000 Debug: evaluating au.getElement('0').setValueByType('11')

info: [debug] [INST] 2014-12-29 12:03:28 +0000 Debug: UIATextField.tap()

info: [IOS_SYSLOG_ROW ] Dec 29 16:03:28 Admins-Mac.local backboardd[3609] <Error>: HID: The 'Rate Controlled' connection 'ScriptAgent' access to protected services is denied.

info: [debug] [INST] 2014-12-29 12:03:29 +0000 Debug: UIATextField.tap()

info: [IOS_SYSLOG_ROW ] Dec 29 16:03:31 Admins-Mac.local calaccessd[3653] <Notice>: 2014-12-29 16:03:31.354|3653|0x103c48c80: Updating birthday calendar
info: [IOS_SYSLOG_ROW ] Dec 29 16:03:31 Admins-Mac.local calaccessd[3653] <Notice>: 2014-12-29 16:03:31.356|3653|0x103c48c80: BirthdayCal: Processing 6 people...
info: [IOS_SYSLOG_ROW ] Dec 29 16:03:31 Admins-Mac.local calaccessd[3653] <Notice>: 2014-12-29 16:03:31.418|3653|0x103c48c80: BirthdayCal: Done. 4 adds, 0 updates, 0 deletes.

info: [IOS_SYSLOG_ROW ] Dec 29 16:03:31 Admins-Mac.local SpringBoard[3619] <Notice>: 2014-12-29 16:03:31.429|3619|0x117839a40: Region monitoring not available or enabled. Trigger ignored!

info: [IOS_SYSLOG_ROW ] Dec 29 16:03:31 Admins-Mac.local mobileassetd[3656] <Error>: Could not copy XPC event for stream/key: com.apple.xpc.activity/com.apple.mobileassetd.queued-asset-download: 3: No such process

info: [debug] [INST] 2014-12-29 12:03:31 +0000 Debug: target.frontMostApp().keyboard().typeString("1")

info: [debug] [INST] 2014-12-29 12:03:33 +0000 Debug: target.frontMostApp().keyboard().typeString("1")

info: [debug] [INST] 2014-12-29 12:03:33 +0000 Debug: evaluation finished
info: [debug] [INST] 2014-12-29 12:03:33 +0000 Debug: responding with:

info: [debug] Socket data received (25 bytes)

info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":""}
info: [debug] Responding to client with success: {"status":0,"value":"","sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}

info: <-- POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element/0/value 200 6311.176 ms - 74 {"status":0,"value":"","sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: --> POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element {"using":"name","value":"IntegerB"}
info: [debug] Waiting up to 0ms for condition
info: [debug] Pushing command to appium work queue: "au.getElementByName('IntegerB')"
info: [debug] Sending command to instruments: au.getElementByName('IntegerB')
info: [debug] [INST] 2014-12-29 12:03:33 +0000 Debug: Running system command #5: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":""}...
info: [debug] [INST] 2014-12-29 12:03:34 +0000 Debug: Got new command 5 from instruments: au.getElementByName('IntegerB')
       2014-12-29 12:03:34 +0000 Debug: evaluating au.getElementByName('IntegerB')

info: [debug] [INST] 2014-12-29 12:03:34 +0000 Debug: evaluation finished
info: [debug] [INST] 2014-12-29 12:03:34 +0000 Debug: Lookup returned [object UIATextField] with the name "IntegerB" (id: 1).
info: [debug] [INST] 2014-12-29 12:03:34 +0000 Debug: responding with:
info: [debug] [INST] 2014-12-29 12:03:34 +0000 Debug: Running system command #6: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":{"ELEMENT":"1"}}...
info: [debug] Socket data received (38 bytes)
info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":{"ELEMENT":"1"}}
info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"1"},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: <-- POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element 200 298.653 ms - 87 {"status":0,"value":{"ELEMENT":"1"},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: --> POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element/1/value {"id":"1","value":["1"]}
info: [debug] Pushing command to appium work queue: "au.getElement('1').setValueByType('1')"
info: [debug] Sending command to instruments: au.getElement('1').setValueByType('1')

info: [debug] [INST] 2014-12-29 12:03:35 +0000 Debug: Got new command 6 from instruments: au.getElement('1').setValueByType('1')

info: [debug] [INST] 2014-12-29 12:03:35 +0000 Debug: evaluating au.getElement('1').setValueByType('1')
       2014-12-29 12:03:35 +0000 Debug: UIATextField.tap()

info: [debug] [INST] 2014-12-29 12:03:35 +0000 Debug: target.frontMostApp().keyboard().typeString("1")

info: [debug] [INST] 2014-12-29 12:03:36 +0000 Debug: evaluation finished

info: [debug] Socket data received (25 bytes)

info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":""}
info: [debug] Responding to client with success: {"status":0,"value":"","sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: <-- POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element/1/value 200 1962.511 ms - 74 {"status":0,"value":"","sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}

info: --> POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element {"using":"name","value":"ComputeSumButton"}
info: [debug] Waiting up to 0ms for condition
info: [debug] Pushing command to appium work queue: "au.getElementByName('ComputeSumButton')"
info: [debug] Sending command to instruments: au.getElementByName('ComputeSumButton')
info: [debug] [INST] 2014-12-29 12:03:36 +0000 Debug: responding with:
info: [debug] [INST] 2014-12-29 12:03:36 +0000 Debug: Running system command #7: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":""}...

info: [debug] [INST] 2014-12-29 12:03:37 +0000 Debug: Got new command 7 from instruments: au.getElementByName('ComputeSumButton')
info: [debug] [INST] 2014-12-29 12:03:37 +0000 Debug: evaluating au.getElementByName('ComputeSumButton')

info: [debug] [INST] 2014-12-29 12:03:37 +0000 Debug: evaluation finished
info: [debug] [INST] 2014-12-29 12:03:37 +0000 Debug: Lookup returned [object UIAButton] with the name "ComputeSumButton" (id: 2).
       2014-12-29 12:03:37 +0000 Debug: responding with:
info: [debug] [INST] 2014-12-29 12:03:37 +0000 Debug: Running system command #8: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":{"ELEMENT":"2"}}...

info: [debug] Socket data received (38 bytes)
info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":{"ELEMENT":"2"}}
info: [debug] Responding to client with success: {"status":0,"value":{"ELEMENT":"2"},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: <-- POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element 200 833.732 ms - 87 {"status":0,"value":{"ELEMENT":"2"},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: --> POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element/2/click {"id":"2"}
info: [debug] Pushing command to appium work queue: "au.getElement('2').rect()"
info: [debug] Sending command to instruments: au.getElement('2').rect()

info: [debug] [INST] 2014-12-29 12:03:38 +0000 Debug: Got new command 8 from instruments: au.getElement('2').rect()
info: [debug] [INST] 2014-12-29 12:03:38 +0000 Debug: evaluating au.getElement('2').rect()

info: [debug] [INST] 2014-12-29 12:03:38 +0000 Debug: evaluation finished
       2014-12-29 12:03:38 +0000 Debug: responding with:

info: [debug] Socket data received (83 bytes)
info: [debug] Socket data being routed.
info: [debug] Got result from instruments: {"status":0,"value":{"origin":{"x":94,"y":122},"size":{"width":113,"height":37}}}
info: [debug] Responding to client with error: {"status":13,"value":{"message":"An unknown server-side error occurred while processing the command. (Original error: connect ECONNREFUSED)","code":"ECONNREFUSED","errno":"ECONNREFUSED","syscall":"connect","origValue":"connect ECONNREFUSED"},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: <-- POST /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb/element/2/click 500 1022.219 ms - 293 
info: --> GET /wd/hub/status {}
info: [debug] Responding to client with success: {"status":0,"value":{"build":{"version":"1.3.3","revision":"34e21b01b87d4e3959e1c97c0a8d0b1a610bdc78"},"isShuttingDown":false},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}
info: <-- GET /wd/hub/status 200 1.537 ms - 178 {"status":0,"value":{"build":{"version":"1.3.3","revision":"34e21b01b87d4e3959e1c97c0a8d0b1a610bdc78"},"isShuttingDown":false},"sessionId":"b488504c-fada-4d13-801b-67ddfda7fcfb"}

info: --> DELETE /wd/hub/session/b488504c-fada-4d13-801b-67ddfda7fcfb {}
info: Shutting down appium session
info: [debug] Stopping ios
info: [debug] Destroying instruments client socket.
info: [debug] Closing socket server.
info: [debug] Instruments socket server was closed
info: [debug] Sending sigterm to instruments
info: [debug] [INST] 2014-12-29 12:03:38 +0000 Debug: Running system command #9: /Applications/Appium.app/Contents/Resources/node/bin/node /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-uiauto/bin/command-proxy-client.js /tmp/instruments_sock 2,{"status":0,"value":{"origin":{"x":94,"y":122},"size":{"width":113,"height":37}}}...
info: [IOS_SYSLOG_ROW ] Dec 29 16:03:38 Admins-Mac.local mstreamd[3614] <Notice>: (Note ) PS: Media stream daemon stopping.

info: [IOS_SYSLOG_ROW ] Dec 29 16:03:38 Admins-Mac.local mstreamd[3614] <Notice>: (Note ) AS: <MSIOSAlbumSharingDaemon: 0x103b14220>: Shared Streams daemon has shut down.
info: [IOS_SYSLOG_ROW ] Dec 29 16:03:38 Admins-Mac.local mstreamd[3614] <Notice>: (Warn ) mstreamd: mstreamd shutting down.

info: [debug] Instruments didn't terminate after 3 seconds; trying to kill it

info: [debug] Killall instruments

info: [debug] Stopping iOS log capture

info: [debug] Running ios sim reset flow
info: [debug] Killing the simulator process
info: [debug] Killall iOS Simulator

here is my intelliJ log 这是我的智能日志

org.openqa.selenium.WebDriverException: An unknown server-side error occurred while processing the command. (Original error: connect ECONNREFUSED) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 1.02 seconds
Build info: version: '2.42.1', revision: '68b415adb11acca4286be45124325cc36cfc4a51', time: '2014-05-29 09:21:55'
System info: host: 'Admins-Mac.local', ip: '192.168.0.178', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.10.1', java.version: '1.7.0_71'
Session ID: 6da466a5-3e93-4c32-9e33-306931e05035
Driver info: io.appium.java_client.AppiumDriver
Capabilities [{platformVersion=7.1, app=/Users/admin/Downloads/TestApp.app, platform=MAC, databaseEnabled=false, javascriptEnabled=true, deviceName=iPhone 5s, platformName=iOS, browserName=iOS, appium-version=1.3.3, webStorageEnabled=false, networkConnectionEnabled=false, desired={platformVersion=7.1, app=/Users/admin/Downloads/TestApp.app, platformName=iOS, deviceName=iPhone 5s, appium-version=1.3.3}, locationContextEnabled=false, warnings={}, takesScreenshot=true}]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:204)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:156)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:600)
    at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:82)
    at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:79)
    at AppiumDemo.simpleTest(AppiumDemo.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)


Process finished with exit code 255

I found the solution for this case! 我找到了这种情况的解决方案! Appium supports WebDriver API, so maybe because of it default elements are web elements. Appium支持WebDriver API,因此可能是因为它的默认元素是Web元素。 and so web elements don't have tap, but have click, and mobile elements have tap, not click. 因此,Web元素没有点击,而是点击,而移动元素只有点击而不是点击。 in our case, every element should be declared as mobile element. 在我们的例子中,每个元素都应声明为可移动元素。 so if I declare my button as Mobile element, it will have the tap fuction. 因此,如果我将按钮声明为“移动”元素,它将具有点击功能。 :) :)

MobileElement btn = (MobileElement) ad.findElement(By.name("ComputeSumButton"));
    ...
btn.tap(1,1);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM