【问题标题】:How to handle user authentication popup in Mobile/Tablet如何处理手机/平板电脑中的用户身份验证弹出窗口
【发布时间】:2017-06-12 09:51:54
【问题描述】:

我正在使用 selenium webdirver、Appium for Mobile 网站自动化开发自动化脚本。

以前我自动化的网站没有询问身份验证弹出窗口。 现在,对于所有较低的环境,都要求进行身份验证。

那么我该如何处理用户身份验证弹出窗口。

我使用的技术是用于 Android 和 iOS 平台的 java、selenium 和 appium。

谁能帮帮我。

【问题讨论】:

    标签: java selenium appium


    【解决方案1】:

    您可以获得弹出元素和按钮的 xpath/id,使用这些您可以对这些按钮执行操作。

    @findby(id="android/button1")
    WebElement allow_button;
    
    public void clickonAllow()
    {
    
        allow_button.click();
    
    }
    

    根据要求,您可以点击“允许”/“拒绝”或“接受”或“拒绝”按钮

    在网页中你可以试试driver.switchTo().alert().accept();driver.switchTo().alert().deny();

    【讨论】:

    • 嗨@Shiv 首先感谢您的回复。如果用户身份验证是基于浏览器的,我该如何为其编写 xpath
    • 在访问网站时,它要求进行用户身份验证。如果不输入正确的用户名和密码,我将无法继续。由于此身份验证弹出窗口后面没有 html 结构,因此我无法处理它..
    【解决方案2】:

    不久前我遇到了类似的问题,允许位置。 这个问题应该分为平台特定的

    对于 iOS 来说更具体一些,它的代码如下:

    driver.findElement(By.xpath("//XCUIElementTypeAlert//XCUIElementTypeButton[@name='Allow']")).click(); 
    

    (如果您有例如“允许”按钮)

    对于 Android,您可以将它们分解为元素,这是我的代码中的代码示例:

    public class Alert implements org.openqa.selenium.Alert
        @AndroidFindBy(id = "com.android.packageinstaller:id/dialog_container")
        @WithTimeout(time = 3, unit = TimeUnit.SECONDS)
        public MobileElement alertControl;
    
        @AndroidFindBy(id = "com.android.packageinstaller:id/permission_message")
        @WithTimeout(time = 3, unit = TimeUnit.SECONDS)
        private MobileElement content;
    
        @AndroidFindBy(id = "com.android.packageinstaller:id/permission_allow_button")
        @WithTimeout(time = 3, unit = TimeUnit.SECONDS)
        private MobileElement buttonAccept;
    
        @AndroidFindBy(id = "com.android.packageinstaller:id/permission_deny_button")
        @WithTimeout(time = 3, unit = TimeUnit.SECONDS)
        private MobileElement buttonDismiss;
    
    
        public Alert(SessionInfo sessionInfo){
            super(sessionInfo);
            PageFactory.initElements(new AppiumFieldDecorator(sessionInfo.getMobileDriver(), 3, TimeUnit.SECONDS), this)
    
          WaitUtils.isElementPresent(sessionInfo.getMobileDriver(),alertControl,2);
    
            if (!Util.areElementsLoaded(alertControl, content, buttonAccept, buttonDismiss)) {
                setLoaded(false);
            } else {
                setLoaded(true);
            }
            Validate.isScreenLoaded(getSessionInfo(), this.isLoaded());
    
        }
    
    
        @Override
        public void dismiss() {
            buttonDismiss.click();
            Validate.action(getSessionInfo(), "ALERT - click button 'Dismiss'");
        }
    
        @Override
        public void accept() {
            buttonAccept.click();
            Validate.action(getSessionInfo(), "ALERT - click button 'Accept'");
        }
    
        @Override
        public String getText() {
            String value = content.getText();
            Validate.action(getSessionInfo(), "ALERT - get content");
            return value;
        }
    
        @Override
        public void sendKeys(String s) {
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2020-11-25
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      相关资源
      最近更新 更多