【问题标题】:How to understand if credentials are valid or not using selenium如何使用 selenium 了解凭据是否有效
【发布时间】:2019-12-31 11:02:09
【问题描述】:

我创建了一个应用程序,允许用户通过我的应用程序登录到 Wikipedia,我使用 selenium 实现了这个目标,但我找不到验证凭据是否正常的方法。

我尝试按 id 查找,但由于失败的条件不显示 ID,因此没有帮助。

private void button1_Click(object sender, EventArgs e)
        {

            string BaseUrl = "https://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Main+Page";

             int TimeOut = 30;


        var driver = new FirefoxDriver();



            driver.Navigate().GoToUrl(BaseUrl);



            var loginBox = driver.FindElement(By.Id("wpName1"));

            loginBox.SendKeys("email.address@gmail.com");



            var pwBox = driver.FindElement(By.Id("wpPassword1"));

            pwBox.SendKeys("!SuperSecretpassw0rd");

我想知道输入的凭据是否正确。

【问题讨论】:

    标签: selenium selenium-webdriver css-selectors webdriver webdriverwait


    【解决方案1】:

    解决此类问题的一般方法是问自己,“人类怎么能看到这个?”然后在您的测试中复制此行为。在您的示例中,人类如何检测到登录错误?

    人类会看到错误消息。

    另一方面,Selenium 只能看到 DOM 树。因此,要让 Selenium 看到错误消息,您需要找出在 DOM 树中查找的位置。为此,请打开您的浏览器开发者工具并在 DOM 树中找到匹配的部分:

    考虑到这一点,一个非常简单的解决方案是找到凭据无效时显示的错误div

    var error = driver.findElement(By.className("error"));
    

    然后您可以检查该元素是否确实存在,您可以使用其他 Selenium 方法来检查错误消息的实际内容,以查看错误是什么。如果该字段不存在,那么您可以假设登录成功。另外你可以使用driver.getCurrentUrl()检查你是否还在登录页面,确认你真的登录了。

    话虽如此,如果您尝试进行任何严肃的浏览器测试,您应该考虑使用页面对象模型(请参阅https://www.toolsqa.com/selenium-webdriver/page-object-model/),这样您就不会遇到一堆无法维护的测试用例。

    【讨论】:

      【解决方案2】:

      由于您没有提到 语言绑定,此解决方案基于 Java

      验证凭据是否有效的一种优雅方法是诱导 try-catch{} 块来查找错误的元素,从而为所需的 visibilityOfElementLocated() 诱导 WebDriverWait,您可以使用以下Locator Strategies:

      • 代码块:

        public class A_demo 
        {
            public static void main(String[] args) throws Exception 
            {
                System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
                ChromeOptions options = new ChromeOptions();
                options.addArguments("start-maximized");
                options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));
                options.setExperimentalOption("useAutomationExtension", false);
                WebDriver driver = new ChromeDriver(options);
                driver.get("https://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Main+Page");
                new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[name='wpName']"))).sendKeys("Helios.Lucifer@stackoverflow.com");
                driver.findElement(By.cssSelector("input[name='wpPassword']")).sendKeys("!SuperSecretpassw0rd");
                driver.findElement(By.cssSelector("button#wpLoginAttempt")).click();
                try
                {
                    new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("form[name='userlogin']>div.error>p")));
                    System.out.println("Unsuccessful login attempt");
                }
                catch (TimeoutException e)
                {
                    System.out.println("Successful Login.");
                }
                driver.quit();
            }
        }
        
      • 控制台输出;

        Unsuccessful login attempt
        

      【讨论】:

      • 很好的答案,很好的逻辑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多