2017年1月5日,星期四

如何在unibet测试中处理应用程序权限弹出窗口

我们已经遇到了棉花糖Android设备的问题,该应用会显示权限弹出窗口,要求用户允许或拒绝。要在我们的自动化测试用例中处理此问题。所以这篇文章将解释我们如何用简单的代码来处理这个问题。
考虑一下我们有一个移动应用程序,该应用程序在启动时要求所有必需的权限,并且每次它显示应用程序权限弹出窗口时,我们都需要单击允许按钮。


查看下面我们在其中调用的测试用例示例 allowAppPermission() 单击每个应用程序权限弹出窗口的方法。让我们看看该方法内部如何工作。在此方法中,我们添加了一个while循环,直到获得“允许应用程序许可”按钮。为了找到允许按钮,我们使用了最新的unibet Java客户端提供的MobileBy api。

影片教学-

 




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

import org.junit.After;
import org.junit.Before;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;



public class WaitTests {

 WebDriver driver;

 @Before
 public void setUp() throws MalformedURLException {
  
  DesiredCapabilities capabilities = new DesiredCapabilities();
  capabilities.setCapability("deviceName", "XT1562");
  capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
  capabilities.setCapability(CapabilityType.VERSION, "6.0.1");
  capabilities.setCapability("platformName", "Android");
  driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
  driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
  
  
 }

 @Test
 public void testFirst() {
  
   alllowAppPermission();
   driver.findElement(By.name("Login")).click();
   driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS); 
}

@After
 public void End() {
  driver.quit();
 }
public void allowAppPermission(){
 while (driver.findElements(MobileBy.xpath("// * [@ class ='android.widget.Button'][2]")).size()>0) 

 {  driver.findElement(MobileBy.xpath("// * [@ class ='android.widget.Button'][2]")).click();
 }
}
 

}

希望这个对你有帮助。请在下面的评论部分中分享您的反馈,并在社交媒体上关注我,以获取最新的帖子更新。

15条评论:

  1. 该评论已被博客管理员删除。

    回复删除
  2. 您好...我在项目中使用的相同代码无法正常工作..请帮助。

    回复删除
  3. 据我说,警报刚出现在屏幕上之前调用的方法allowAppPermission()。万一您需要增加一点等待时间以使元素出现。
    如果它不起作用。请确认上述定位器工作正常。

    回复删除
  4. 您好,在接受所有应用程序权限后,我可以'您无法在下一个窗口中导航吗?为什么?

    回复删除
  5. 你好
    就我而言'MobileBy无法解析'错误产生。请帮忙

    回复删除
  6. 使用所需的功能.......
    abilities.setCapability("autoGrantPermissions",true);它适用于我在标签和移动设备中使用。

    回复删除
  7. 我正在使用Tablet设备上的appium自动化WebApplication。当我打开浏览器并访问URL时,我们正在使用Google Maps,我会弹出允许访问或阻止的位置访问弹出窗口,但是我无法通过硒代码对该弹出窗口执行任何操作。您能帮我解决问题吗?

    回复删除
  8. 尝试在此代码上添加适当的等待。

    回复删除
  9. 嗨,我正在使用Protractor运行我的Web应用程序。当我尝试上传文件时,允许拒绝弹出窗口来访问相机。我尝试使用"autoGrantPermissions",是的,但这对我没有帮助。我也无法找到弹出窗口。您能帮我解决问题吗?

    回复删除
  10. 嗨,我需要对此代码进行一些解释

    driver.findElements(MobileBy.xpath("//*[@class='android.widget.Button'][2]")

    对于你,你允许两个弹出窗口's所以您使用了button [2],在我的情况下只有一个弹出窗口,所以我没有使用[2],但是它在while循环中连续运行。它不会出来。

    回复删除
  11. 嗨Anuja
    非常好的教程。我能够关闭警报消息,但是现在我的脚本无法继续。单击“允许”按钮后,他们被卡住了。

    回复删除
  12. 请添加此功能,它将解决问题。

    abilities.setCapability("autoGrantPermissions", "true");
    abilities.setCapability("autoAcceptAlerts", "true");

    回复删除
  13. 我们可以从中制作apk吗?

    回复删除
  14. 谢谢,这对您有所帮助。

    回复删除