无法在页面刷新/重定向后找到元素

时间:2015-03-16 08:29:07

标签: c# .net selenium selenium-webdriver console-application

我发现自动化基本UI测试用例很困难。第一次使用Selenium。

我正在尝试为具有用户名和密码的用户登录模块的应用程序编写一些UI测试用例。登录后,通常可以有两种情况:成功登录和密码不正确。

成功登录后,应用程序URL会发生变化。例如。 www.abc.com/AA至www.abc.com/BB。

在不正确的密码上,页面刷新一次,然后在同一页面上显示错误消息。

现在的问题是,我可以打开页面,通过Selenium输入U / N和Pswd,但是当页面重定向发生/刷新时点击“登录”按钮后我遇到问题。

Webdriver无法在页面上找到任何元素。我已经检查过页面上没有IFrame。

我在.net控制台应用程序中使用C#Selenium Web Driver。 引用代码以获取refrence:

       var options = new InternetExplorerOptions()
        {
            InitialBrowserUrl = URL,
            IntroduceInstabilityByIgnoringProtectedModeSettings = true,
        };
        var driver = new InternetExplorerDriver("www.abc.com/AA", options);
        driver.Navigate();

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
        var username = wait.Until<IWebElement>((d) =>
        {
            return d.FindElement(By.Id("userName"));
        });           
        username.SendKeys("User1");

        var password = driver.FindElement(By.Id("userPwd"));
        password.SendKeys("Password@123");

// Login button pressed in the next line          
        password.SendKeys(Keys.Enter);

//WAIT FOR RESULT
  WebDriverWait waiter = new WebDriverWait(driver, TimeSpan.FromSeconds(10));

// This below line Shows error "Unable to find Element..."
        IWebElement categoryList = wait.Until<IWebElement>((d) =>
        {
            return d.FindElement(By.Id("SAMPLE-DROPDOWN-ID"));
        });           

        categoryList.SendKeys("1");

2 个答案:

答案 0 :(得分:1)

您可以尝试使用条件循环检查等待X时间段的URL,直到它包含abc.com/BBB,然后检查成功案例中Web元素的可见性,否则请检查错误消息。这也更容易调试问题并使您的测试不易出错。

编辑:这是您的查询的片段(等到网址更改) 我不熟悉C#样式,但是在Java中,你可以应用相同的逻辑 -

public static String start_URL = "http://example.com/";

public static WebDriver driver = null;
public static WebDriverWait wait = new WebDriverWait(driver, 10);
public static String prev_URL = null;
public static String curr_URL = null;

public static void main(String[] args) {

    driver = new FirefoxDriver();

    driver.navigate().to(start_URL);

    prev_URL = driver.getCurrentUrl();

    //do login operation - enter user name and password

    ExpectedCondition e = new ExpectedCondition<Boolean>() {
        public Boolean apply(WebDriver driverNew) {
            return (driverNew.getCurrentUrl() != prev_URL);
        }
    };

    wait.until(e);
    curr_URL = driver.getCurrentUrl();
    System.out.println(curr_URL);

}

答案 1 :(得分:1)

问题是Selenium不知道页面已刷新,并且正在寻找&#34;之前的#34;页。

只需使用&#34;发送密钥&#34;不允许Selenium发现页面转换已经发生,您可以在文本区域中键入文本段落。

如果有登录按钮,那么您应该&#34;点击&#34;它,然后Selenium会期望页面重新加载。否则,您必须强制Selenium手动重新加载页面。