Skip to content

Baseline form test#37

Open
Ishanpathak1 wants to merge 9 commits intoDerekCacciotti:masterfrom
Ishanpathak1:BaselineFormTest
Open

Baseline form test#37
Ishanpathak1 wants to merge 9 commits intoDerekCacciotti:masterfrom
Ishanpathak1:BaselineFormTest

Conversation

@Ishanpathak1
Copy link
Contributor

No description provided.

@DerekCacciotti DerekCacciotti self-requested a review December 8, 2025 15:10
Comment on lines +441 to +446
var livingArrangementSelect = new SelectElement(livingArrangementDropdown);
livingArrangementSelect.SelectByValue("05"); // Select "Other"
driver.WaitForUpdatePanel(3);
driver.WaitForReady(3);
Thread.Sleep(500);
_output.WriteLine($"[INFO] Selected 'Other' in Living Arrangement for Child {childNumber}");
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make sure you test for a textbox for when other is selected.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup here it is
protected void TestRelationshipOtherSpecify(IPookieWebDriver driver, int childNumber)
{
_output.WriteLine($"\n[INFO] Testing Relationship to PC1 'Other' validation for Child {childNumber}");

        // Select "Other" (09) in Relationship to PC1
        var relationshipDropdown = driver.FindElements(By.CssSelector($"select.form-control[id*='Child{childNumber}_ddlRelation2PC1']"))
            .FirstOrDefault(el => el.Displayed)
            ?? throw new InvalidOperationException($"Child {childNumber} Relationship dropdown was not found.");
        
        var relationshipSelect = new SelectElement(relationshipDropdown);
        relationshipSelect.SelectByValue("09"); // Select "Other"
        driver.WaitForUpdatePanel(3);
        driver.WaitForReady(3);
        Thread.Sleep(500);
        _output.WriteLine($"[INFO] Selected 'Other' in Relationship to PC1 for Child {childNumber}");

        // Verify specify field appears
        var specifyDiv = driver.FindElements(By.CssSelector($"div[id*='Child{childNumber}_divRelation2PC1Specify']"))
            .FirstOrDefault();
        Assert.NotNull(specifyDiv);
        Assert.True(specifyDiv.Displayed, $"Relationship specify field should be visible for Child {childNumber}");
        _output.WriteLine($"[PASS] Relationship specify field appeared for Child {childNumber}");

        // Clear the specify field if it has any value
        var specifyInput = specifyDiv.FindElements(By.CssSelector($"input[id*='Child{childNumber}_txtRelation2PC1Specify']"))
            .FirstOrDefault();
        if (specifyInput != null && specifyInput.Displayed)
        {
            specifyInput.Clear();
            _output.WriteLine($"[INFO] Cleared Relationship specify field for Child {childNumber}");
        }

        // Submit without filling specify field
        var submitButton = FindSubmitButton(driver);
        CommonTestHelper.ClickElement(driver, submitButton);
        driver.WaitForUpdatePanel(30);
        driver.WaitForReady(30);
        Thread.Sleep(1000);
        _output.WriteLine($"[INFO] Clicked Submit with empty Relationship specify for Child {childNumber}");

        // Switch back to Family/Children tab (may reset to PC1)
        ActivateTab(driver, "#tab_CHILDREN a[href='#CHILDREN']", "Family/Other Children");
        Thread.Sleep(500);

        // Verify validation message
        var validationMessage = FindValidationMessage(driver, $"Child{childNumber} Relationship specify validation", 
            $"Please specify Child{childNumber} relationship to PC 1");
        Assert.NotNull(validationMessage);
        _output.WriteLine($"[PASS] Validation displayed for Child {childNumber}: {validationMessage!.Text.Trim()}");

        // Change to a non-Other option
        relationshipDropdown = driver.FindElements(By.CssSelector($"select.form-control[id*='Child{childNumber}_ddlRelation2PC1']"))
            .FirstOrDefault(el => el.Displayed)
            ?? throw new InvalidOperationException($"Child {childNumber} Relationship dropdown was not found after validation.");
        
        relationshipSelect = new SelectElement(relationshipDropdown);
        var nonOtherOption = relationshipSelect.Options.FirstOrDefault(opt => !string.IsNullOrWhiteSpace(opt.GetAttribute("value")) && opt.GetAttribute("value") != "09");
        if (nonOtherOption != null)
        {
            relationshipSelect.SelectByValue(nonOtherOption.GetAttribute("value"));
            driver.WaitForUpdatePanel(3);
            driver.WaitForReady(3);
            Thread.Sleep(500);
            _output.WriteLine($"[INFO] Changed Relationship to non-Other option for Child {childNumber}: {nonOtherOption.Text.Trim()}");
        }

        // Verify specify field hides
        Thread.Sleep(500);
        specifyDiv = driver.FindElements(By.CssSelector($"div[id*='Child{childNumber}_divRelation2PC1Specify']"))
            .FirstOrDefault();
        var isHidden = specifyDiv == null || !specifyDiv.Displayed || specifyDiv.GetAttribute("style").Contains("display: none");
        Assert.True(isHidden, $"Relationship specify field should be hidden for Child {childNumber}");
        _output.WriteLine($"[PASS] Relationship specify field hidden after selecting non-Other option for Child {childNumber}");
    }

    protected void TestFirstNameBlankValidation(IPookieWebDriver driver, int childNumber)
    {
        _output.WriteLine($"\n[INFO] Testing First Name blank validation for Child {childNumber}");

        // Get the current first name to restore later
        var firstNameInput = driver.FindElements(By.CssSelector($"input.form-control[id*='Child{childNumber}_txtChildFName']"))
            .FirstOrDefault(el => el.Displayed)
            ?? throw new InvalidOperationException($"Child {childNumber} First Name input was not found.");
        
        var originalFirstName = firstNameInput.GetAttribute("value");

        // Clear the first name field
        firstNameInput.Clear();
        WebElementHelper.SetInputValue(driver, firstNameInput, "", $"Child {childNumber} First Name (clear)", triggerBlur: true);
        _output.WriteLine($"[INFO] Cleared First Name for Child {childNumber}");

        // Submit without first name
        var submitButton = FindSubmitButton(driver);
        CommonTestHelper.ClickElement(driver, submitButton);
        driver.WaitForUpdatePanel(30);
        driver.WaitForReady(30);
        Thread.Sleep(1000);
        _output.WriteLine($"[INFO] Clicked Submit with blank First Name for Child {childNumber}");

        // Switch back to Family/Children tab (may reset to PC1)
        ActivateTab(driver, "#tab_CHILDREN a[href='#CHILDREN']", "Family/Other Children");
        Thread.Sleep(500);

        // Verify validation message
        var validationMessage = FindValidationMessage(driver, $"Child{childNumber} First Name blank validation", 
            $"Other child {childNumber}: First Name cannot be blank");
        Assert.NotNull(validationMessage);
        _output.WriteLine($"[PASS] Validation displayed for Child {childNumber}: {validationMessage!.Text.Trim()}");

        // Re-fill the first name
        firstNameInput = driver.FindElements(By.CssSelector($"input.form-control[id*='Child{childNumber}_txtChildFName']"))
            .FirstOrDefault(el => el.Displayed)
            ?? throw new InvalidOperationException($"Child {childNumber} First Name input was not found after validation.");
        
        WebElementHelper.SetInputValue(driver, firstNameInput, originalFirstName, $"Child {childNumber} First Name (restore)", triggerBlur: true);
        _output.WriteLine($"[INFO] Restored First Name for Child {childNumber}: {originalFirstName}");
        _output.WriteLine($"[PASS] First Name blank validation test completed for Child {childNumber}");
    }

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops copied a bit much
protected void TestRelationshipOtherSpecify(IPookieWebDriver driver, int childNumber)
{
_output.WriteLine($"\n[INFO] Testing Relationship to PC1 'Other' validation for Child {childNumber}");

        // Select "Other" (09) in Relationship to PC1
        var relationshipDropdown = driver.FindElements(By.CssSelector($"select.form-control[id*='Child{childNumber}_ddlRelation2PC1']"))
            .FirstOrDefault(el => el.Displayed)
            ?? throw new InvalidOperationException($"Child {childNumber} Relationship dropdown was not found.");
        
        var relationshipSelect = new SelectElement(relationshipDropdown);
        relationshipSelect.SelectByValue("09"); // Select "Other"
        driver.WaitForUpdatePanel(3);
        driver.WaitForReady(3);
        Thread.Sleep(500);
        _output.WriteLine($"[INFO] Selected 'Other' in Relationship to PC1 for Child {childNumber}");

        // Verify specify field appears
        var specifyDiv = driver.FindElements(By.CssSelector($"div[id*='Child{childNumber}_divRelation2PC1Specify']"))
            .FirstOrDefault();
        Assert.NotNull(specifyDiv);
        Assert.True(specifyDiv.Displayed, $"Relationship specify field should be visible for Child {childNumber}");
        _output.WriteLine($"[PASS] Relationship specify field appeared for Child {childNumber}");

        // Clear the specify field if it has any value
        var specifyInput = specifyDiv.FindElements(By.CssSelector($"input[id*='Child{childNumber}_txtRelation2PC1Specify']"))
            .FirstOrDefault();
        if (specifyInput != null && specifyInput.Displayed)
        {
            specifyInput.Clear();
            _output.WriteLine($"[INFO] Cleared Relationship specify field for Child {childNumber}");
        }

        // Submit without filling specify field
        var submitButton = FindSubmitButton(driver);
        CommonTestHelper.ClickElement(driver, submitButton);
        driver.WaitForUpdatePanel(30);
        driver.WaitForReady(30);
        Thread.Sleep(1000);
        _output.WriteLine($"[INFO] Clicked Submit with empty Relationship specify for Child {childNumber}");

        // Switch back to Family/Children tab (may reset to PC1)
        ActivateTab(driver, "#tab_CHILDREN a[href='#CHILDREN']", "Family/Other Children");
        Thread.Sleep(500);

        // Verify validation message
        var validationMessage = FindValidationMessage(driver, $"Child{childNumber} Relationship specify validation", 
            $"Please specify Child{childNumber} relationship to PC 1");
        Assert.NotNull(validationMessage);
        _output.WriteLine($"[PASS] Validation displayed for Child {childNumber}: {validationMessage!.Text.Trim()}");

        // Change to a non-Other option
        relationshipDropdown = driver.FindElements(By.CssSelector($"select.form-control[id*='Child{childNumber}_ddlRelation2PC1']"))
            .FirstOrDefault(el => el.Displayed)
            ?? throw new InvalidOperationException($"Child {childNumber} Relationship dropdown was not found after validation.");
        
        relationshipSelect = new SelectElement(relationshipDropdown);
        var nonOtherOption = relationshipSelect.Options.FirstOrDefault(opt => !string.IsNullOrWhiteSpace(opt.GetAttribute("value")) && opt.GetAttribute("value") != "09");
        if (nonOtherOption != null)
        {
            relationshipSelect.SelectByValue(nonOtherOption.GetAttribute("value"));
            driver.WaitForUpdatePanel(3);
            driver.WaitForReady(3);
            Thread.Sleep(500);
            _output.WriteLine($"[INFO] Changed Relationship to non-Other option for Child {childNumber}: {nonOtherOption.Text.Trim()}");
        }

        // Verify specify field hides
        Thread.Sleep(500);
        specifyDiv = driver.FindElements(By.CssSelector($"div[id*='Child{childNumber}_divRelation2PC1Specify']"))
            .FirstOrDefault();
        var isHidden = specifyDiv == null || !specifyDiv.Displayed || specifyDiv.GetAttribute("style").Contains("display: none");
        Assert.True(isHidden, $"Relationship specify field should be hidden for Child {childNumber}");
        _output.WriteLine($"[PASS] Relationship specify field hidden after selecting non-Other option for Child {childNumber}");
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants