获取第一个<p>标记的文本并检查Mocha和Selenium中自动化测试脚本的成功登录

时间:2015-08-18 11:39:55

标签: selenium mocha

我正在尝试使用 selenium 环境中的 mocha 运行自动化测试脚本。

该脚本首先登录,然后检查所有<p>标记的文本。

如果任何<p>标记的文字与短语&#34; &#34;欢迎使用管理页面匹配!&#34; &#34;然后登录尝试将被视为成功。否则,尝试失败。

我想更改代码。我只需要检查第一个

标签,而不是遍历所有

标签。我怎么能这样做?

我想记录细节,无论尝试是成功还是失败。

我的代码如下。

var assert = require('assert');
var test = require('selenium-webdriver/testing');
var webdriver = require('selenium-webdriver');
var By = webdriver.By;
var until = webdriver.until;
var equals = webdriver.equals;

test.describe('TrackRevenue Test', function() 
{
  test.it('should work', function() 
  {
        var driver = new webdriver.Builder()
                    .withCapabilities(webdriver.Capabilities.phantomjs())
                    .build();
        var loginFlag = 0;
        var baseUrl = 'http://saswatr3.ouh.co/login';
        var expectedTitle = "Track Revenue";
        var successMessage = "Welcome to the admin page!";
        driver.get(baseUrl);
        driver.getTitle().then(function(title) 
        {
            if(expectedTitle === title)
            {
                console.log("Verification Successful - The correct title is displayed on the web page.");
            }
            else
            {
                console.log("Verification Failed - An incorrect title is displayed on the web page.");
            }
        });
        driver.findElement(By.id('username')).sendKeys('saswat@matrixnmedia.com');
        driver.findElement(By.id('password')).sendKeys('DarkPrince2012');
        driver.findElement(By.id('_submit')).click();
        driver.wait(until.titleIs('Track Revenue'), 1000);
        driver.findElements(By.tagName('p')).then(function (pTag) 
        {
            pTag.forEach(function(p) //I am iterating through all the <p>. I need to get only the first <p>
            {
                p.getText().then(function(text) 
                {
                    if(text.toLowerCase() === successMessage.toLowerCase())
                    {
                        loginFlag = 1;
                    }
                    //done(); //mocha async callback
                }); 
            });
            if(loginFlag ==1)
                console.log("Login Successful");
            else
                console.log("Login Unsuccessful");
        });
    driver.quit();
  });
});

<p>部分的html部分有&#34;欢迎来到管理页面!&#34;

<div class="wrapper wrapper-content animated fadeIn">
   <div class="row">
     <div class="col-centered col-xs-12">
     <div class="ibox float-e-margins">
     <div class="ibox-title">
       <h5>Links</h5>
       <div class="ibox-tools"> </div>
     </div>
     <div class="ibox-content">
        <p>Welcome to the admin page!</p>
        <p>Please use the menu on the left</p>
     </div>
     </div>
     </div>
   </div>
</div>

PS。

我需要在代码中进行一些修改。在任何情况下,如果登录失败,则登录页面有div,显示文本:&#34; 无效凭据。&#34;

该部分的html如下:

<div class="text-danger text-danger-orange">Invalid credentials.</div>

我想要一个检查此部分的检查脚本。

编辑:

当我放这个脚本时,我的脚本运行良好:

driver.findElements(By.xpath("//p[contains(text(), 'Welcome to the admin page!')]")).then(function()
        {
            loginFlag = 1;
            if(loginFlag ==1)
                console.log("Login Successful");
            else
                console.log("Login Unsuccessful");
        });

但是当我把这个剧本放进去的时候,我得到了一个 类型错误:未定义不是函数

if(driver.findElements(By.xpath("//p[contains(text(), 'Welcome to the admin page!')]")).size() != 0)
{
   loginFlag = 1;
}
else
{
    //"Welcome to the admin page" not found
    if(driver.findElements(By.xpath("//div[contains(text(), 'Invalid Credentials!')]")).size() != 0)
    {
        //do what you have to do if "Invalid credentials" is found
    }
    else
    {
        // "Invalid credentials not found"
    }
}

1 个答案:

答案 0 :(得分:1)

使用XPATH可以让您的生活更轻松。例如:

if(driver.findElements(By.xpath("//* [text()[contains(.,'Welcome to the admin page!')]]")).size() != 0){
            //do what you have to do if "Welcome to the admin page" is found
        }else{
            //"Welcome to the admin page" not found
            if(driver.findElements(By.xpath("//* [text()[contains(.,'Invalid credentials')]]")).size() != 0){
                //do what you have to do if "Invalid credentials" is found
            }else{
                // "Invalid credentials not found"
            }
        }

我希望这会有所帮助。

修改

如您所希望的那样:

使用xpath,您只需搜索页面上应显示的所需文本即可。如果您只想查找字符串&#34;欢迎使用管理页面&#34; &#34;无效凭据&#34; ,无论其位置如何您可以通过以下方式轻松搜索文本的页面:

//* [text()[contains(.,'<your string text here>')]]

它检查节点的getText()方法是否包含给定文本。

如果您想检查整个页面,如果有结果,您可以使用findElements,因为它将返回所有找到的WebElements。如果在给定的xpath中找不到任何内容,则返回一个空的&#34;数组&#34;大小为0.所以如果你使用

driver.findElements(By.xpath("//* [text()[contains(.,'Welcome to the admin page!')]]")).size() != 0

您可以检查方法是否找到了包含所需文本的元素。

就是这样,其他东西只是简单的if / else ..你可以使用上面提到的xpath和函数。因此,您可以简单地使用上面提到的xpath,而不是通过所有<p>标记进行迭代。

<强> EDIT2:

使用摩卡你可以尝试做类似的事情:

driver.findElements(By.xpath("//p[contains(text(), 'Welcome to the admin page!')]")).then(function(elements_arr)
    {
        if(elements_arr.length > 0){
            //your element got found
            console.log("Login Successful");
        }else{
            //your element was not found
            console.log("Login Unsuccessful");

            driver.findElements(By.xpath("//div[contains(text(), 'Invalid Credentials!')]")).then(function(elements_arr2)
            {
               if(elements_arr2.length > 0){
                  //your element invalid credentials got found
                  console.log("Login Unsuccessful, div invalid credentials found");
               }else{
                 //your element was not found
                 console.log("Login Unsuccessful, div invalid credentials not found");
               }
            });
        }         
    });