2017-03-21 51 views
-1

工作我试图自动化的Angular 2.0 application.XPath是不是在硒

HTML代码:

<input _hello="" class="myclass" formcontrolname="phoneCtrl" required="" sdcleave="" sdmutekeys="[0-9]" type="text" placeholder="Phone number"> 

当我试图找到上述使用xpath定位元素,它给了我以下提到的错误。

尝试代码:

//input[@class='myclass'][0] 

Error:no such element: Unable to locate element: {"method":"xpath","selector":"//input[@class='myclass'][0]"}(..)

谁能帮助我在这个问题上?

+0

电话号码字段是 - <输入_hello = “” 类= “MyClass的” formcontrolname = “phoneCtrl” 需要= “” sdcleave = “” sdmutekeys = “[0-9]” 类型= “文本” placeholder =“电话号码”> –

+0

请尝试:'.//input[@placeholder='Phone number']' –

+0

请提供html代码snipper –

回答

0

当Webdriver尝试查找元素时,您的DOM可能还没有准备好。 在util.js文件中添加以下代码:

util.js中

'use strict'; 

/** 
* Navigate to an url and wait some seconds 
* @param {string} path The path 
* @param {seconds} [seconds] The number of seconds to wait for 
* @returns {Promise} 
* @see waitSomeSeconds 
*/ 
function navigateAndWait(path, seconds) { 
    return browser.get(path) 
    .then(function() { 
     return waitSomeSeconds(seconds); 
    }); 
} 

/** 
* Wait some seconds (default is 3) 
* @param {int} [seconds] 
* @returns {Promise} 
*/ 
function waitSomeSeconds(seconds) { 
    return browser.sleep((seconds || 3) * 1000); 
} 

module.exports = { 
    navigateAndWait: navigateAndWait, 
    waitSomeSeconds: waitSomeSeconds 
} 

homepage.spec.js

'use strict'; 

var util = require('./util'); 

describe('Homepage test suite', function() { 

    it('should navigate to homepage', function() { 
    return util.navigateAndWait('/homepage'); 
    }); 

    it('should display title with correct data', function() { 
    expect(element(by.css('h1')).getText()).toBe('Welcome'); 
    }); 

}); 
0

你会使用一些CSS选择器会更好喜欢这个。 XPath没有得到广泛的支持,性能也不如CSS选择器。

这应该工作

By.cssSelector("input[placeholder='Phone number']"); 

你应该花一些时间来学习CSS选择器。他们是非常强大的定位器,根据我的经验,可以成功地使用99%的定位器。

CSS Selector Reference

CSS Selector Tips

0

的XPath索引开始,而不是,这就是webdriver的原因就是抛出一个错误。

正确的XPath将

//input[@class='myclass'][1] 

例如,对于下面的XPath找到谷歌搜索框不会给你任何元素。

//*[@id='lst-ib'][0] 

,但下面也只是做工精细

//*[@id='lst-ib'][1] 

使用的工具,像https://addons.mozilla.org/en-US/firefox/addon/firebug/https://addons.mozilla.org/en-us/firefox/addon/firepath/检查,如果你的XPath是否有效。

+0

hey看起来需要更新xpath为//输入[@ class ='myclass'] [1]以上 –

+0

@muraliselenium谢谢,我很着急发布了这个答案,所以犯了一些错误。 –

0

尝试使用xpath locator

解释是这样的:使用placeholder<input>标签的属性。

//input[@placeholder='Phone number'] 

java你可以这样做。

driver.findElement(By.xpath("//input[@placeholder='Phone number']")).sendKeys("1234567890"); 
+0

如果问题解决了,请将此答案标记为“已接受”。 –