Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Appium AndroidDriver sendKeys即使向下滚动并将文本发送到另一个字段,也会将文本发送到上次编辑的文本框_Java_Android_Selenium_Appium - Fatal编程技术网

Java Appium AndroidDriver sendKeys即使向下滚动并将文本发送到另一个字段,也会将文本发送到上次编辑的文本框

Java Appium AndroidDriver sendKeys即使向下滚动并将文本发送到另一个字段,也会将文本发送到上次编辑的文本框,java,android,selenium,appium,Java,Android,Selenium,Appium,我正在尝试自动化salesforce本机应用程序创建联系人页面。我能够在android mobile的第一页上看到的所有字段中单击并输入文本。但对于我在向下滚动页面后得到的其他字段,appium能够从appium日志中找到该字段,但在单击并发送文本时,它总是发送到第一页上最后编辑的文本框 请任何人让我知道,如果有什么额外的需要发送后,与appium滚动页面文本 我正在使用Android三星galaxy S3设备。下面是代码和UIAutomator屏幕截图 package samsungGalax

我正在尝试自动化salesforce本机应用程序创建联系人页面。我能够在android mobile的第一页上看到的所有字段中单击并输入文本。但对于我在向下滚动页面后得到的其他字段,appium能够从appium日志中找到该字段,但在单击并发送文本时,它总是发送到第一页上最后编辑的文本框

请任何人让我知道,如果有什么额外的需要发送后,与appium滚动页面文本

我正在使用Android三星galaxy S3设备。下面是代码和UIAutomator屏幕截图

package samsungGalaxy;

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

import org.openqa.selenium.By;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import io.appium.java_client.android.AndroidDriver;

public class FirstTest {
    AndroidDriver driver;

    @BeforeTest
    public void setUp() throws MalformedURLException {
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setCapability("deviceName", "ce1d12134");
        capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
        capabilities.setCapability(CapabilityType.VERSION, "4.4.2");
        capabilities.setCapability("platformName", "Android");
        capabilities.setCapability("appPackage", "com.salesforce.chatter");
        capabilities.setCapability("appActivity", "com.salesforce.chatter.Chatter");
        capabilities.setCapability("appium-version", "1.4.16.1");
        driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    }

    @Test
    public void login() {

        driver.findElement(By.xpath("//android.widget.ImageView[contains(@resource-id,'home')]")).click();
        driver.findElement(By.xpath("//android.widget.TextView[@text='Contacts']")).click();
        driver.findElement(By.id("com.salesforce.chatter:id/new_button")).click();
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]/..//android.view.View[contains(@content-desc,'Phone')]/../android.widget.EditText")).click();
        driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]/..//android.view.View[contains(@content-desc,'Phone')]/../android.widget.EditText")).sendKeys("5109651200");
        driver.hideKeyboard();
        driver.scrollTo("Mobile");
        driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]/..//android.view.View[contains(@content-desc,'Mobile')]/../android.widget.EditText")).click();
        driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]/..//android.view.View[contains(@content-desc,'Mobile')]/../android.widget.EditText")).sendKeys("6509651200");

        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



    }

    @AfterTest
    public void End() {
        driver.closeApp();
        driver.quit();
    }

}

我试着使用TouchAction将文本发送到移动领域,如下所示。在appium日志中显示成功,但在moble页面上既没有单击也没有输入

driver.swipe(200, 1140, 250, 600, 4000);
    WebElement we = driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Mobile')]/..//android.widget.EditText"));
    TouchAction touchAction = new TouchAction(driver);
    touchAction.press(we);
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    boolean displayed = we.isDisplayed();
    System.out.println("Displayed :" + displayed);
    we.click();
    driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Mobile')]/..//android.widget.EditText")).sendKeys("6509651200");

我猜在滚动到元素后,您也指定了相同的定位器来发送键。声明

driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]/..//android.view.View[contains(@content-desc,'Mobile')]/../android.widget.EditText")).sendKeys("5109651200"); // or replace `Mobile` by `Phone`
正在查找相同的
android.widget.EditText
,这可能是因为您使用了
/../
的XPath语法。引用自,Xpath语法如下所示:

因此,您可能希望将代码更改为:

driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Phone')]../android.widget.EditText")).sendKeys("5109651200");
driver.hideKeyboard();  
driver.scrollTo("Mobile");
driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Mobile')]../android.widget.EditText")).sendKeys("6509651200");
注意:在您的情况下,
。/
。/
都可以工作,因为 应用程序中android类的层次结构


按如下方式使用您的代码:

driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]//android.view.View[contains(@content-desc,'Phone')]//android.widget.EditText")).click();                                                                        
driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]//android.view.View[contains(@content-desc,'Phone')]//android.widget.EditText")).sendKeys("5109651200");
driver.hideKeyboard();
driver.scrollTo("Mobile");
driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]//android.view.View[contains(@content-desc,'Mobile')]//android.widget.EditText")).click();
driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]//android.view.View[contains(@content-desc,'Mobile')]//android.widget.EditText")).sendKeys("6509651200");

此xpath更改不起作用,在org.openqa.selenium.InvalidSelectorException中失败:参数是无效的选择器(例如xpath/CSS)好的,您可以用
appium inspector
屏幕截图更新问题吗,为了描述这些
EditText
中任何一个的XPath,我正在真实设备上运行应用程序,并通过USB连接到Windows笔记本电脑。当我尝试刷新appium时,它抛出的错误是“错误:没有应用程序集;”。所以我无法在appium inspector上获得应用程序的屏幕截图。appium inspector始终为空。如果您可以跟踪EditText的XPath,这将有助于调试我在UI Automator viewer上构建的代码XPath,并且我在代码中使用的代码XPath,那么应该是正确的,因为类似的XPath对于第一页中可见的电话字段来说工作正常。appium inspector是否在使用android设备的Windows机器上工作?此xpath更改也不起作用,在org.openqa.selenium.NoSuchElementException中失败:无法使用给定的搜索参数在页面上找到元素。@Sadik
android.view.view[包含(@content desc,'Phone')]
android.widget.EditText
似乎处于同一级别
driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]//android.view.View[contains(@content-desc,'Phone')]//android.widget.EditText")).click();                                                                        
driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]//android.view.View[contains(@content-desc,'Phone')]//android.widget.EditText")).sendKeys("5109651200");
driver.hideKeyboard();
driver.scrollTo("Mobile");
driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]//android.view.View[contains(@content-desc,'Mobile')]//android.widget.EditText")).click();
driver.findElement(By.xpath("//android.view.View[contains(@content-desc,'Create Contact Heading')]//android.view.View[contains(@content-desc,'Mobile')]//android.widget.EditText")).sendKeys("6509651200");