首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓应用自动化脚本:通过Appium、Selenium WebDriver、Java: NoSuchElementFoundException

安卓应用自动化脚本:通过Appium、Selenium WebDriver、Java: NoSuchElementFoundException
EN

Stack Overflow用户
提问于 2016-07-25 17:34:31
回答 2查看 221关注 0票数 0

我正尝试在我的安卓设备中打开一个移动.apk文件,然后选择一个国家/地区“美国”,然后单击“保存”按钮。

代码语言:javascript
复制
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创建异常

EN

回答 2

Stack Overflow用户

发布于 2016-07-25 19:20:27

contains中使用Xpath query时,需要使用逗号分隔符,而不是等号。

因此,您的步骤应该如下所示:

代码语言:javascript
复制
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值。该命令返回所有现有元素,并可用于验证是否存在具有正确属性的元素。

票数 1
EN

Stack Overflow用户

发布于 2016-07-26 11:25:44

尽量避免使用Thread.sleep(),因为它会告诉您等待确切的时间量,这在测试场景中使用不同的网速或不同的文件大小等因素时是不好的。请改用WebDriverWait

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38564238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档