无法在appium中为我的应用程序元素设置Xpath

时间:2016-06-23 10:55:11

标签: java html xpath appium

我在Appium中全新。在这里,我只是尝试为我的登录页面应用程序进行基本测试(WebView上下文)。一切正常,但我无法将值发送到两个输入字段。请帮帮我...谢谢..

index.html的: -

 <label class="item_input">
      <a class="item item-icon-left in-text">
        <i class="icon ion-email iconEmail"></i>
        <div class="term"> <input  id="email"type="email" placeholder="Email" class="in-text" ng-model="loginData.username" name="email" required></div></a>

      </label>
      <span style="color:white" ng-show="loginForm.username.$dirty && loginForm.username.$invalid">
        <label ng-show="loginForm.username.$error.required">Email is required</label>
      </span>
      <label class="item_input">
        <a class="item item-icon-left in-text1">
          <i class="icon ion-key iconKey"></i>
          <div class="term">  <input  id="password"type="password" placeholder="Password" class="in-text" ng-model="loginData.password"name="password" required></div></a>
        </label>
        <span style="color:white" ng-show="loginForm.password.$dirty && loginForm.password.$invalid">
          <label ng-show="loginForm.password.$error.required">Password is required.</label>

        </span>

我的appiumTest.java: -

@Test
public class AppiumTest {

    private static AndroidDriver driver;

    public static void main() throws MalformedURLException, InterruptedException {
        DesiredCapabilities capabilities = new DesiredCapabilities();



        // Optional

        capabilities.setCapability(CapabilityType.BROWSER_NAME, "");


        // Specify the device name (any name)

        capabilities.setCapability("deviceName", "Nexus");


        // Platform version

        capabilities.setCapability("platformVersion", "6.0.1");


        // platform name

        capabilities.setCapability("platformName", "Android");


        // specify the application package that we copied from appium                

        capabilities.setCapability("appPackage", "XXXXXXXX");


        // specify the application activity that we copied from appium                   

        capabilities.setCapability("appActivity", "XXXXXXXX");

        // Start android driver I used 4727 port by default it will be 4723

            driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);


        driver.findElement(By.xpath("//input[@id='email']")).sendKeys("hello");
        driver.findElement(By.xpath("//input[@id='password']")).sendKeys("hello");
        // Wait for 10 second

        // Wait for 10 second

        Thread.sleep(10000);



        // close the application
         driver.quit();


    }

}

日食中的错误: -

FAILED: main
org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 78 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.53.0', revision: '35ae25b', time: '2016-03-15 17:00:58'
System info: host: 'ZANDIG-PC', ip: '192.168.15.2', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_76'
*** Element info: {Using=xpath, value=//input[@id='email']}
Session ID: 6d48a8e9-9c5f-4b77-acf5-1905fe2ea853
Driver info: io.appium.java_client.android.AndroidDriver
Capabilities [{platform=LINUX, javascriptEnabled=true, appActivity=com.orionorbit.th.MainActivity, browserName=, networkConnectionEnabled=true, desired={platformVersion=6.0.1, platformName=Android, deviceName=Nexus, appActivity=com.orionorbit.th.MainActivity, browserName=, appPackage=com.orionorbit.th}, locationContextEnabled=false, appPackage=com.orionorbit.th, platformVersion=6.0.1, databaseEnabled=false, platformName=Android, deviceName=0c35ec7f02ba5d2f, webStorageEnabled=false, warnings={}, takesScreenshot=true}]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:51)
    at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
    at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
    at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:67)
    at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
    at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:500)
    at io.appium.java_client.DefaultGenericMobileDriver.findElementByXPath(DefaultGenericMobileDriver.java:145)
    at io.appium.java_client.AppiumDriver.findElementByXPath(AppiumDriver.java:1)
    at io.appium.java_client.android.AndroidDriver.findElementByXPath(AndroidDriver.java:1)
    at org.openqa.selenium.By$ByXPath.findElement(By.java:361)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
    at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:63)
    at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1)
    at io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1)
    at Appium.AppiumTest.main(AppiumTest.java:61)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
    at org.testng.TestNG.run(TestNG.java:1048)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:126)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:137)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:58)

1 个答案:

答案 0 :(得分:0)

基于该错误,看起来您的测试正在投入

driver.findElement(By.xpath("//input[@id='email']")).sendKeys("hello");

对你来说似乎是第61行。 这意味着xpath发现问题,这可能是由于语法原因造成的。

一个问题是需要&#39;属性未分配。另一个问题是标签永远不会关闭。

尝试使用此输入标记。不同之处在于需要&#39;属性消失,标签关闭:

<input id="email" type="email" placeholder="Email" class="in-text" ng-model="loginData.username" name="email"/>

如果您想快速测试如何使用xpath,请访问this link

希望我能提供帮助:)