#android #automation #appium
#Android #автоматизация #appium
Вопрос:
Вот тестовый сценарий, который я пытаюсь автоматизировать в приложении, но застрял,
- Откройте приложение и перейдите в раздел «Фотографии» (работает)
- Нажмите на фотографию, чтобы просмотреть ее (работает)
- Чтобы подтвердить загрузку фотографии, я хочу увеличивать и уменьшать ее (не работает)
Версия Appium: 1.4.16.1 Уровень API 19
Ниже приведен фрагмент кода:
@Test
public void openph() throws InterruptedException {
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.findElement(By.xpath("//android.widget.ImageButton[@content-desc='Navigate up']")).click();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.findElement(By.xpath("//android.widget.RelativeLayout[@index='3']")).click();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.findElement(By.xpath("//android.widget.ImageView[@index='1']")).click();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.xpath("//android.widget.LinearLayout[@index='2']")).click();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.findElement(By.xpath("//android.widget.CheckedTextView[@text='Photos only']")).click();
List<WebElement> ops = driver.findElements(By.xpath("//android.widget.ImageView"));
ops.get(2).click();
driver1.zoom(25, 45);
driver1.pinch(25, 45);
driver.manage().timeouts().implicitlyWait(120, TimeUnit.SECONDS);
}
Может кто-нибудь, пожалуйста, помочь мне исправить это.
В настоящее время он выдает исключение nullpointer
Ответ №1:
Возможно, это потому, что у вас два разных драйвера ( driver and driver1
)? В настоящее время Appium может запускать один драйвер в одном сеансе одновременно.
Также я не знаю, что вы делаете с этими строками: driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
Вам нужно запускать это только один раз для каждого драйвера (это также не очень хорошо, так как это сильно замедлит ваши тесты, было бы лучше использовать WebDriverWait(Driver, <defined wait time>
Комментарии:
1. Эй, Джейсон, спасибо за ваш вклад, на этот раз я попытался использовать только драйвер appium, чтобы использовать метод zoom (), на этот раз я не получаю никаких ошибок, но изображение не увеличивается. Для моего утверждения о прохождении теста мне нужно, чтобы изображение было увеличено.
Ответ №2:
//Use this below the code it work fine.
import io.appium.java_client.android.AndroidDriver;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
public class Zoom_and_pinch {
public static void main(String[] args) throws InterruptedException, MalformedURLException {
// TODO Auto-generated method stub
File app= new File("D:\Testing\com.davemorrissey.labs.subscaleview.sample.apk");
//Launch app
DesiredCapabilities capabilities= new DesiredCapabilities();
//device details
capabilities.setCapability("deviceName", "GT-I9300I");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "4.4.4");
//app details
capabilities.setCapability("app",app.getAbsolutePath());
//appium server details
AndroidDriver driver= new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
//wait
Thread.sleep(4000);
driver.findElementById("com.davemorrissey.labs.subscaleview.sample:id/basicFeatures").click();
Thread.sleep(4000);
WebElement ele_image = driver.findElementById("com.davemorrissey.labs.subscaleview.sample:id/imageView");
int x1= ele_image.getLocation().getX();
int y1= ele_image.getLocation().getY();
System.out.println("x is " x1 "y1 is " y1);
int x=ele_image.getLocation().getX() ele_image.getSize().getWidth()/2;
int y= ele_image.getLocation().getY() ele_image.getSize().getHeight()/2;
//Zoom
TouchAction finger1= new TouchAction(driver);
finger1.press(ele_image, x, y-20).moveTo(ele_image, x, y-200);
TouchAction finger2= new TouchAction(driver);
finger2.press(ele_image, x, y 20).moveTo(ele_image, x, y 200);
MultiTouchAction action= new MultiTouchAction(driver);
action.add(finger1).add(finger2).perform();
Thread.sleep(8000);
//Pinch
TouchAction finger3= new TouchAction(driver);
finger3.press(ele_image, x, y-200).moveTo(ele_image, x, y-20);
TouchAction finger4= new TouchAction(driver);
finger4.press(ele_image, x, y 200).moveTo(ele_image, x, y 20);
MultiTouchAction action2= new MultiTouchAction(driver);
action2.add(finger3).add(finger4).perform();
}
}