Android应用程序自动化脚本:通过Appium,Selenium WebDriver,Java:NoSuchElementFoundException
问题描述:
我想在我的android设备上打开一个移动.apk文件,然后选择一个国家“USA”并点击“保存”按钮。Android应用程序自动化脚本:通过Appium,Selenium WebDriver,Java:NoSuchElementFoundException
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.Test;
import io.appium.java_client.android.AndroidDriver;
public class DemoC {
AndroidDriver driver =null;
DesiredCapabilities capabilities;
File app = new File("C:\\Users\\310250972\\workspace\\DreamMapper_2.5_Alpha_July_5_65.apk");
@Test(priority=1)
public void invokeApp() throws MalformedURLException
{
capabilities = new DesiredCapabilities();
capabilities.setCapability("automationName","Appium");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("platformVersion","6.0.1");
capabilities.setCapability("deviceName","Galaxy S6");
capabilities.setCapability("app", app.getAbsolutePath());
//capabilities.setCapability("appPackage","com.philips.sleepmapper.root");
//capabilities.setCapability("appactivity","com.philips.sleepmapper.activity.SplashScreenActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@Test(priority=2)
public void selectCountry() throws InterruptedException{
Thread.sleep(20000);
//driver.findElement(By.xpath("//android.widget.TextView[Contain]"))
driver.findElement(By.xpath("//android.widget.TextView[contains(@text='United States')]")).click();
Thread.sleep(10000);
driver.findElement(By.xpath("//android.widget.TextView[contains(@text='Save')]")).click();
// driver.findElement(By.name("Save")).click();
}
}[I want to select "United States" and click on "Save" button][1]
//执行时,测试方法“selectCountry()”失败。 Nosuchelementfoundexception
答
当您使用带有contains
的Xpath查询时,您将需要使用逗号分隔符而不是等号。
所以,你的步骤应该是这样的:
driver.findElement(By.xpath("//android.widget.TextView[contains(@text, 'United States')]")).click();
Thread.sleep(10000);
driver.findElement(By.xpath("//android.widget.TextView[contains(@text, 'Save')]")).click();
如果这没有帮助,你可以尝试使用driver.getPageSource();
确保元素实际上存在与预期值@Text。该命令返回所有现有元素,并可用于验证元素是否存在正确的属性。
答
尽可能避免使用Thread.sleep()
,因为它告诉等待测试时使用具有不同因特网速度或不同文件大小等因素的测试场景时的确切时间。改为使用WebDriverWait
。
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//android.widget.TextView[contains(@text='United States')]").cick();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//android.widget.TextView[contains(@text='Save')]")).click();
WebDriverWait
告诉appium等待一定量的时间(在该代码其60 seconds
)或用于ExpectedConditions
得到满足。