2017-03-21 52 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

如果問題解決了,請將此答案標記爲「已接受」。 –