【问题标题】:Selenium WebDriver -- How can I know a certain line has executed successfully?Selenium WebDriver -- 我如何知道某行已成功执行?
【发布时间】:2013-05-02 15:32:28
【问题描述】:

我正在测试一个 Web 应用程序,我的示例测试用例包含三个步骤:

  1. 输入用户名
  2. 输入密码
  3. 点击“登录”

    driver.findElement(By.id("username")).sendKeys(username);
    driver.findElement(By.id("password")).sendKeys(password);
    driver.findElement(By.id("LoginButton")).click();
    

我需要生成一份报告,说明哪些步骤通过了,哪些步骤失败了。是否有某种机制可以让我知道这些行中的每一行都成功执行了? Selenium 是否有某种内置的 Activity/Event Listener?

【问题讨论】:

  • 取决于你所说的“通过”是什么意思?如果它执行的操作符合您的预期?只有才能知道。这是您需要落实到位的逻辑。

标签: java selenium automation webdriver


【解决方案1】:

如果您想记录所有基本步骤,例如单击、导航、查找元素等

我建议你添加一些事件监听器。您可以使用 EventFiringWebDriver 类。

一个例子:

EventFiringWebDriver events = new EventFiringWebDriver(this._driver);   

events.Navigated += new EventHandler<WebDriverNavigationEventArgs>(eventAfterNavigate);

您可以将事件处理程序定义为

private void eventAfterNavigate(object sender, WebDriverNavigationEventArgs e)
{
   Log("URL visited: " + e.Driver.Url);  // Call to your favourite log method
}

您可以在 Webdriver API 参考中找到更多可能的事件处理程序:http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/AllMembers_T_OpenQA_Selenium_Support_Events_EventFiringWebDriver.htm

【讨论】:

    【解决方案2】:

    您可以使用验证或断言来确保页面上存在或不存在某些内容。验证将返回布尔值并继续运行,而断言为 false 将停止您的测试。

    在这种特殊情况下,您可以验证您是否在 id=username 的元素中输入了用户名。所以你的代码可能是这样的:

    driver.findElement(By.id("username")).sendKeys(username); // this will enter username
    assertEquals(selenium.getValue("id=username"), username); // this will check that text in your username field is 'username' (also you may use Assert.IsTrue)
    

    据我所知,Selenium 2 Webdriver 中有 verifyTextPresent,所以你可以使用这个:

    try
    {
    assertEquals(selenium.getValue("id=username"), username); // put message into your log: success
    }
    catch (Exception)
    {
    // put message into your log: failed
    }
    

    我建议验证按钮单击但等待您登录的一些通知:例如文本“你好,{用户名}”可能会出现,或者新元素(登录前不存在)也可能出现。所以如果这个元素存在 - 你肯定已经登录了。

    【讨论】:

      【解决方案3】:

      如果您想查看每个步骤是否成功,那么我会放置一些断言(取决于您的单元测试框架)来验证步骤是否成功。

      例如,要检查用户名字段是否实际接收到输入,您可以立即验证用户名字段是否包含输入的用户名文本。

      一些伪代码:

      IWebElement element = driver.findElement(By.id("username"));
      element.sendKeys(username);
      assertsEquals(username, element.text);
      

      同样,要验证点击是否成功,您可以检查并断言下一页预期的元素存在,这将表明登录成功。

      【讨论】:

        【解决方案4】:

        如果 Selenium 没有抛出异常,则 行会成功执行

        但问题是您如何定义成功?我会检查单击 LoginButton 后加载的站点,以确保 Web 应用程序的行为与您预期的一样。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-06-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-17
          • 1970-01-01
          • 2020-12-28
          相关资源
          最近更新 更多