【问题标题】:How to verify a Text present in the loaded page through WebDriver如何通过 WebDriver 验证加载页面中存在的文本
【发布时间】:2016-12-22 00:34:50
【问题描述】:

我需要通过 WebDriver 验证页面中存在的文本。我喜欢将结果视为布尔值(真或假)。任何人都可以通过提供 WebDriver 代码来帮助解决这个问题吗?

【问题讨论】:

  • 用什么编程语言?什么浏览器?文本是否总是出现在同一个元素中?在哪里?什么元素?

标签: webdriver selenium-webdriver assertion


【解决方案1】:

正如 zmorris 指出的那样,driver.getPageSource().contains("input"); 不是正确的解决方案,因为它搜索所有 html,而不仅仅是其中的文本。 我建议检查这个问题:how can I check if some text exist or not in the page? 以及 Slanec 解释的推荐方式:

String bodyText = driver.findElement(By.tagName("body")).getText();
Assert.assertTrue("Text not found!", bodyText.contains(text));

【讨论】:

  • 不应该是:String bodyText = driver.findElement(By.tagName("body")).getText(); Assert.assertTrue(true, bodyText.contains(text));
【解决方案2】:

是的,您可以执行返回布尔值的操作。使用 TestNG 或 JUnit 的 WebDriver 中的以下 java 代码可以做到:

protected boolean isTextPresent(String text){
    try{
        boolean b = driver.getPageSource().contains(text);
        return b;
    }
    catch(Exception e){
        return false;
    }
  }

现在调用上面的方法如下:

assertTrue(isTextPresent("Your text"));

或者,还有另一种方法。我认为,这是更好的方法:

private StringBuffer verificationErrors = new StringBuffer();
try {
                  assertTrue(driver.findElement(By.cssSelector("BODY")).getText().matches("^[\\s\\S]*    Your text here\r\n\r\n[\\s\\S]*$"));
  } catch (Error e) {
     verificationErrors.append(e.toString());
   }

【讨论】:

  • 您的问题似乎缺少一些信息。 1)你使用什么语言? 2)您是否使用任何测试框架作为 JUnit 或 TestNG?
  • 是的,我更喜欢上面的最后一个答案
  • 这是一个更好的解决方案,因为它可以用于多个文本值
  • 如果不区分大小写,我认为它无效......
【解决方案3】:

如果您不关心文本的位置,那么您可以使用 Driver.PageSource 属性,如下所示:

Driver.PageSource.Contains("预期的消息");

【讨论】:

  • 有没有办法找到没有页面源的文本,如果文本存在于页面中的任何位置,我需要打印 True,如果文本不存在,则打印 False...
【解决方案4】:

Driver.getPageSource() 是验证文本存在的不好方法。假设您说,driver.getPageSource().contains("input"); 这并不能验证屏幕上是否存在“输入”,只是“输入”存在于 html 中,就像输入标签一样。

我通常使用 xpath 来验证元素上的文本:

boolean textFound = false;  
try {
    driver.findElement(By.xpath("//*[contains(text(),'someText')]"));
    textFound = true;
} catch (Exception e) {
    textFound = false;
}

如果你想要一个精确的文本匹配,只需删除 contains 函数:

driver.findElement(By.xpath("//*[text()='someText']));

【讨论】:

    【解决方案5】:

    注意:不是布尔值

    WebDriver driver=new FirefoxDriver();
    driver.get("http://www.gmail.com");
    
    if(driver.getPageSource().contains("Ur message"))
      {
        System.out.println("Pass");
      }
    else
      {
        System.out.println("Fail");
      }
    

    【讨论】:

      【解决方案6】:

      对于 Ruby 程序员,这里是您可以断言的方法。 必须包含 Minitest 才能获得断言

          assert(@driver.find_element(:tag_name => "body").text.include?("Name"))
      

      【讨论】:

        【解决方案7】:

        下面的代码是最适合验证页面文本的方法。您可以根据自己的方便使用 8 个定位器中的任何一个。

        String Verifytext= driver.findElement(By.tagName("body")).getText().trim(); Assert.assertEquals(Verifytext, "这里粘贴需要验证的文字");

        【讨论】:

          【解决方案8】:

          如果您只想检查显示的对象(C#):

              public bool TextPresent(string text, int expectedNumberOfOccurrences)
              {
                  var elements = Driver.FindElements(By.XPath(".//*[text()[contains(.,'" + text + "')]]"));
                  var dispayedElements = 0;
                  foreach (var webElement in elements)
                  {
                      if (webElement.Displayed)
                      {
                          dispayedElements++;
                      }
                  }
                  var allExpectedElementsDisplayed = dispayedElements == expectedNumberOfOccurrences;
                  return allExpectedElementsDisplayed;
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-01-31
            • 1970-01-01
            • 2021-02-22
            相关资源
            最近更新 更多