【发布时间】:2017-06-12 09:51:54
【问题描述】:
我正在使用 selenium webdirver、Appium for Mobile 网站自动化开发自动化脚本。
以前我自动化的网站没有询问身份验证弹出窗口。 现在,对于所有较低的环境,都要求进行身份验证。
那么我该如何处理用户身份验证弹出窗口。
我使用的技术是用于 Android 和 iOS 平台的 java、selenium 和 appium。
谁能帮帮我。
【问题讨论】:
我正在使用 selenium webdirver、Appium for Mobile 网站自动化开发自动化脚本。
以前我自动化的网站没有询问身份验证弹出窗口。 现在,对于所有较低的环境,都要求进行身份验证。
那么我该如何处理用户身份验证弹出窗口。
我使用的技术是用于 Android 和 iOS 平台的 java、selenium 和 appium。
谁能帮帮我。
【问题讨论】:
您可以获得弹出元素和按钮的 xpath/id,使用这些您可以对这些按钮执行操作。
@findby(id="android/button1")
WebElement allow_button;
public void clickonAllow()
{
allow_button.click();
}
根据要求,您可以点击“允许”/“拒绝”或“接受”或“拒绝”按钮
在网页中你可以试试driver.switchTo().alert().accept(); 或driver.switchTo().alert().deny();
【讨论】:
不久前我遇到了类似的问题,允许位置。 这个问题应该分为平台特定的
对于 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) {
}
【讨论】: