簡體   English   中英

Android應用程序自動化腳本:通過Appium,Selenium WebDriver,Java:NoSuchElementFoundException

[英]Android application Automation Script: Through Appium, Selenium WebDriver, Java: NoSuchElementFoundException

我試圖在我的android設備中打開一個移動.apk文件,然后選擇一個國家“美國”,然后單擊“保存”按鈕。

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()”失敗。 沒有這樣的元素發現例外

當將Xpath查詢與contains一起使用時,您將需要使用逗號分隔符而不是等號。

因此,您的步驟應如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM