2

私はこれに対する解決策を見つけようとしてブラウジングしてきましたが、これまでのところどの解決策もうまくいきませんでした。

これは、モーダルポップアップを閉じるために「閉じる」ボタンをクリックするだけの簡単なテストです。Visual Studioでテストを進めることができ、正常に機能します。Nunitでテストを実行すると、エラーが発生します。私は他の問題と彼らに与えられた提案に基づいて以下を試しました:-

  • あちこちで待つ
  • ChromeドライバーからFirefoxへの変更
  • 最大化ウィンドウモードへの変更
  • 私が考えることができるすべての方法でそれを作り直します

モーダルは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']"));
    }

}
4

2 に答える 2

1

モーダルがすでにDOMにある場合(つまり、ajaxを介してロードされていない場合)、要素が表示されるのを待つようにモーダルを変更する必要があります(モーダルが非表示になっていると仮定します)。これは、要素が常に存在し、表示されないためです。これは、デバッグモードでもステップスルーしたときに機能する理由を説明しています。

次のようなものを使用してみてください

WebDriverWait wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(10));
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//div[@id='ElementYouWantToTarget']")));
于 2012-12-04T02:31:10.027 に答える
0

私には、これはあなたのコントロールがフォーカスを失ったか、正しいコントロールにフォーカスしなかったかのように聞こえます。適切なコントロールを見つけて、それに焦点を合わせるために何をしましたか?

于 2012-11-30T06:40:35.763 に答える