- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在四处寻找解决方案,但到目前为止,没有一个解决方案对我有用。
这是我拼凑的一个快速测试,它只是尝试单击“关闭”按钮来关闭模态弹出窗口。我可以在 Visual Studio 中逐步完成我的测试,它会正常工作。当我在 Nunit 中运行测试时,它会出错。我根据其他问题和给他们的建议尝试了以下方法:-
模式不是 iframe 或类似的东西。我似乎收到以下错误:
调用的目标抛出了异常。 ----> System.InvalidOperationException:元素在点(922.5、342.0999755859375)不可点击。其他元素将收到点击:
这就是我摆弄最大化和正常大小模式的原因。
寻找任何建议,因为它让我感到难过..
谢谢
[Test(Description = "Test to check if the cancel button closes the modal window when clicked on the 'Reset Password' modal")]
public void CheckCancelPasswordResetOnModalWorks()
{
bool modalFoundSuccess = false;
bool forgotPasswordControlFound = false;
_driver.Navigate().GoToUrl(_baseURL + "login");
if (_loginPage.CheckForgotPasswordControlExists())
{
forgotPasswordControlFound = true;
_loginPage.ClickForgotPasswordButton();
if (_loginPage.CheckResetPasswordModalIsDisplayed())
{
modalFoundSuccess = true;
_loginPage.ClickCancelResetPasswordButton();
if (_loginPage.CheckResetPasswordModalIsDisplayed() != true)
{
modalFoundSuccess = false;
}
Assert.IsFalse(modalFoundSuccess, "The modal window did not close when the 'cancel' button was clicked on the modal pop up");
}
Assert.IsTrue(forgotPasswordControlFound, "Could not find the 'Forgotten Password' Modal box on the page");
}
Assert.IsTrue(forgotPasswordControlFound, "Was not able to find the 'Forgot Password' button on the '/login' page.");
}
页面项目
public class LoginPage : Page
{
private IWebDriver _driver;
public string userNameValidationText = "Username must be filled in.";
public string passwordValidationText = "Password must be filled in.";
public string incorrectLoginValidationText = "The user name or password is incorrect";
[FindsBy(How = How.ClassName, Using = "scfForm")]
private IWebElement _WFFMForm;
[FindsBy(How = How.XPath, Using = "//div[@class='scfSubmitButtonBorder']/input")]
private IWebElement _loginButton;
[FindsBy(How = How.XPath, Using = "//div[@class='scfSingleLineGeneralPanel']/input")]
private IWebElement _userNameField;
[FindsBy(How = How.XPath, Using = "//div[@class='scfPasswordGeneralPanel']/input")]
private IWebElement _passwordField;
[FindsBy(How = How.XPath, Using = "//div[@id='divForgotPassword']")]
private IWebElement _resetPasswordModal;
[FindsBy(How = How.XPath, Using = "//div[@id='divForgotPassword']/p/input")]
private IWebElement _forgotPasswordEmailInputField;
[FindsBy(How = How.XPath, Using = "//div[@id='divForgotPassword']/a[contains(., 'Reset My Password')]")]
private IWebElement _resetPasswordButton;
[FindsBy(How = How.XPath, Using = "//div[@id='divForgotPassword']/a[contains(., 'Cancel')]")]
private IWebElement _cancelResetPasswordButton;
[FindsBy(How = How.XPath, Using = "//div[@class='forgot-password']/a[contains(., 'Forgot Password')]")]
private IWebElement _forgotPasswordButton;
public LoginPage(IWebDriver driver)
: base(driver)
{
_driver = driver;
PageFactory.InitElements(_driver, this);
}
public void InputUserNameText(string phoneText)
{
_userNameField.Clear();
_userNameField.SendKeys(phoneText);
}
public void InputPasswordText(string queryText)
{
_passwordField.Clear();
_passwordField.SendKeys(queryText);
}
public void InputResetPasswordEmail(string resetEmail)
{
_forgotPasswordEmailInputField.Clear();
_forgotPasswordEmailInputField.SendKeys(resetEmail);
}
public void ClickLoginButton()
{
_loginButton.Click();
}
public void ClickResetButton()
{
WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
wait.Until((d) => { return CheckModalHasLoaded(); });
_resetPasswordButton.Click();
}
public void ClickCancelResetPasswordButton()
{
WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(20));
wait.Until((d) => { return CheckModalHasLoaded(); });
_cancelResetPasswordButton.Click();
}
public void ClickForgotPasswordButton()
{
_forgotPasswordButton.Click();
}
public void ClickLoginButtonForEmtpyValidation()
{
_loginButton.Click();
WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
wait.Until((d) => { return CheckValidationTopBoxExists(); });
}
public bool CheckValidationForIncorrectLoginExists()
{
return Utility.IsThisElementPresent(_driver, By.XPath("//div[@class='scfSubmitSummary']/span"));
}
public bool loginFormExistsCheck()
{
return Utility.IsThisElementPresent(_driver, By.ClassName("scfForm"));
}
public bool CheckValidationTopBoxExists()
{
return Utility.IsThisElementPresent(_driver, By.ClassName("scfValidationSummary"));
}
public bool CheckResetPasswordModalIsDisplayed()
{
return Utility.IsThisElementPresent(_driver, By.XPath("//div[@id='divForgotPassword']"));
}
public bool CheckForgotPasswordControlExists()
{
return Utility.IsThisElementPresent(_driver, By.ClassName("forgot-password"));
}
public bool CheckModalHasLoaded()
{
return Utility.IsThisElementPresent(_driver, By.XPath("//div[@id='divForgotPassword']"));
}
}
最佳答案
如果模式已经在 DOM 中(即未通过 ajax 加载),您可能需要更改它以等待元素可见(假设模式是隐藏的)。这是因为该元素始终存在,只是不可见。这解释了为什么当您在 Debug模式下单步执行它时它也能正常工作。
尝试使用类似的东西
WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[@id='ElementYouWantToTarget']")));
关于c# - webdriver 模态窗口 click() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13640151/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!