如何使用硒和摩卡获取xPath()选择的锚标记的文本 [英] How to get the text of an anchor tag selected by xPath() using selenium and Mocha

查看:78
本文介绍了如何使用硒和摩卡获取xPath()选择的锚标记的文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经成功选择了<a>标签.我想显示锚标记的文本,但无法显示.

I have successfully selected an <a> tag. I want to display the text of the anchor tag and I am unable to do so.

我正在使用硒,摩卡,javascript和phantomJS

I am using selenium, mocha, javascript and phantomJS

这是我的剧本(详细内容):

Here's my script(full in detail):

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;

/*-------login details--------*/
var userAdmin = 'saswat@matrixnmedia.com';
var passAdmin = 'DarkPrince2012';

var userTradeshow = 'joni@mailinator.com';
var passTradeshow = 'Mithun@';
/*-----login details ends-----*/

/*---setting up credentials---*/
var passArgument = process.env.KEY; /*fetch value from the environment value;*/
console.log("You chose to enter as '"+passArgument+"'");
if(passArgument.toLowerCase().indexOf("admin")>-1)
{
    var username = userAdmin,
        password = passAdmin;
}
else if(passArgument.toLowerCase().indexOf("trade")>-1)
{
    var username = userTradeshow,
        password = passTradeshow;
}   
else
{
    var username = "",
        password = "";
}    
/*-setting up credentials ends-*/

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(username);
        driver.findElement(By.id('password')).sendKeys(password);
        driver.findElement(By.id('_submit')).click();
        driver.findElements(By.xpath("//a[contains(text(), 'Log out')]")).then(function(elements_arr)
        {
            if(elements_arr.length > 0)
            {
                loginFlag = 1;
                driver.findElements(By.xpath("//a[contains(@class, 'user-name m-r-sm text-muted welcome-message')]")).then(function(e){
                    if(e.length > 0)
                    {
                        console.log("No. of elements :"+e.length);
                        console.log("Found The USerName : ");
                        console.log("Username : "+e[0].text);//this is the line with the issue. It prints undefined
                    }
                });
            }
            else
            {
                driver.findElements(By.xpath("//div[contains(text(), 'Invalid credentials.')]")).then(function(elements_arr2)
                {
                   if(elements_arr2.length > 0)
                        console.log("Login Unsuccessful, div invalid credentials found");
                   else
                        console.log("Login Unsuccessful, div invalid credentials not found");
                });
            } 
            if(loginFlag == 1)
                console.log("Login Successful");
            else
                console.log("Login Unsuccessful");
        });
    driver.quit();
  });
});

1.情况1:使用e [0] .text

我的问题出在这个脚本之内.

1. Case 1: With e[0].text

My problem lies within this script.

driver.findElements(By.xpath("//a[contains(@class, 'user-name m-r-sm text-muted welcome-message')]")).then(function(e){
                        if(e.length > 0)
                        {
                            console.log("No. of elements :"+e.length);
                            console.log("Found The USerName : ");
                            console.log("Username : "+e[0].text);//this is the line with the issue. It prints undefined
                        }
                    });

如您所见,console.log("Username : "+e[0].text);引起了问题.

As you can see, console.log("Username : "+e[0].text); is causing problem.

为方便起见,这是我收到的完整消息.

For convenience, this is the full message I am getting.

    C:\xampp\htdocs\testPhantomJS\node_modules\selenium-webdriver>env KEY=trade moch
a -t 120000 testMocha/login-as-administrator-mocha.js
You chose to enter as 'trade'


  TrackRevenue Test
Verification Successful - The correct title is displayed on the web page.
Login Successful
No. of elements :1
Found The USerName :
Username : undefined
    √ should work (71593ms)


  1 passing (1m)

2.情况2:使用e.text

现在,当我进行如下更改时:

2. Case 2: With e.text

Now, when I made the changes like:

driver.findElements(By.xpath("//a[contains(@class, 'user-name m-r-sm text-muted welcome-message')]")).then(function(e){
                        if(e.length > 0)
                        {
                            console.log("No. of elements :"+e.length);
                            console.log("Found The USerName : ");
                            console.log("Username : "+e.text);//this is the line with the issue. It prints undefined
                        }
                    });

这是我收到的消息.

C:\xampp\htdocs\testPhantomJS\node_modules\selenium-webdriver>env KEY=trade moch
a -t 120000 testMocha/login-as-administrator-mocha.js
You chose to enter as 'trade'


  TrackRevenue Test
Verification Successful - The correct title is displayed on the web page.
Login Successful
No. of elements :1
Found The USerName :
Username : undefined
    √ should work (87006ms)


  1 passing (1m)

3.情况3:使用e [0] .getText()

我进行了以下更改:

3. Case 3: With e[0].getText()

I made the following changes:

driver.findElements(By.xpath("//a[contains(@class, 'user-name m-r-sm text-muted welcome-message')]")).then(function(e){
                    if(e.length > 0)
                    {
                        console.log("No. of elements :"+e.length);
                        console.log("Found The USerName : ");
                        console.log("Username : "+e[0].getText());
                    }
                });

这是消息:

C:\xampp\htdocs\testPhantomJS\node_modules\selenium-webdriver>env KEY=trade moch
a -t 120000 testMocha/login-as-administrator-mocha.js
You chose to enter as 'trade'


  TrackRevenue Test
Verification Successful - The correct title is displayed on the web page.
Login Successful
No. of elements :1
Found The USerName :
Username : Promise::456 {[[PromiseStatus]]: "pending"}
    √ should work (37212ms)


  1 passing (37s)

这是HTML:

<ul class="nav navbar-top-links navbar-right">
   <li>
      <a class="user-name m-r-sm text-muted welcome-message" href="/profile/">saswat@matrixnmedia.com</a>
   </li>
   <li>
      <a href="http://saswatr3.ouh.co/main/account/help.php">
      <i class="fa fa-life-ring"></i>
   </a>
   </li>
   <li>
      <a class="log-out" href="/logout">
      <i class="fa fa-sign-out"></i>
       Log out
      </a>
   </li>
</ul>

推荐答案

您可以尝试以下方法:

driver.findElement(By.xpath("//a[contains(@class, 'user-name m-r-sm text-muted welcome-message')]")).getText().then(function(text){
                           console.log("Username : " + text);
                        });

  • 您只需要通过findElement(而不是findElements)进行搜索
  • 并直接提取功能部分之前的文本
    • you only need to search via findElement (not findElements)
    • and directly extract the text before the function part
    • 更新:

      有时对象不是真正隐藏的,但是也没有在视口中,因此gettext()还会返回一个空的String.
      要检查,请尝试以下操作:

      Sometimes the object is not really hidden, but also not in the viewport, then gettext() also returns an empty String.
      To check try the following:

      driver.findElement(By.xpath("//a[contains(@class, 'user-name m-r-sm text-muted welcome-message')]")).getAttribute("innerText").then(function(text){
                                 console.log("Username : " + text);
                              });
      

      这篇关于如何使用硒和摩卡获取xPath()选择的锚标记的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆