2014-02-28 42 views
0

我使用Selenium WebDriver和Protractor在我的角度項目上運行e2e測試。我很難找到一個詳細的API,這將幫助我瞭解如何使用該驅動程序。我的具體問題如下:Selenium e2e測試,更具體

我在一個頁面上有兩個控制器,一個登錄控制器和一個註冊控制器。它們都有一個綁定到user.username的輸入。要測試登錄,我用的是代碼:

element(select.model('user.username')).sendKeys('nathanadmin'); 

我得到警告:警告:發現定位by.model(「user.username」)

一個以上的元素 - 你可能需要是更具體的

這是不是一個問題,直到我嘗試測試寄存器,在這種情況下,我不知道如何告訴它選擇第二個'user.username'輸入。

我試圖尋找通過這個頁面: https://github.com/angular/protractor/blob/master/docs/api.md

,而這個頁面: http://docs.seleniumhq.org/docs/03_webdriver.jsp

,但我似乎無法找到一個更全面的API與如何做更復雜的「一個簡單的解釋選擇」。

編輯:

我覺得這樣的事情將是有益的:

element(select.model('user.username').first()).sendKeys('nathanadmin'); 

我想出什麼樣的主意是:

element.all(select.model('user.username')).then(function(elements) { elements[0].sendKeys('nathanadmin'); }); 

但是,這仍然不能幫助我,因爲我我正在爲webdriver尋找更深入的文檔。

回答

2

你可以嘗試使用像

ptor.findElements(protractor.By.model('user.username')).then(function(models){ 
    models[0].sendKeys('nathanadmin'); 
    models[1].sendKeys('secondstring'); 
    }); 

不知道這是否嚴格co但它不會太遠,基本上使用findElements獲取具有相同標識符的所有元素並將它們保存爲數組。我在我的測試是這樣的,其工作

visibleFilters.findElements(protractor.By.className('dropdown')).then(function(dropdowns){ 
     dropdowns[2].findElement(protractor.By.id(filterID)).click(); 

希望這有助於

編輯:從我的測試代碼的緣故,我findElement是因爲我需要更進一步得到確切的元素IM尋找,但我可以剛剛完成。點擊()

另一個編輯:至於更詳細的文檔,這是一個量角器的問題,但它純粹是因爲團隊已經集中在啓動並運行添加新功能/修復錯誤等,我必須說,儘管大多數信息我已經找到了我在這裏或在github上找到的Julie(不知道第二個名字,是量角器信息女神),並定期發佈在這裏和github幫助人們,這已經足夠我

0

select.model('user.username')只是在DOM中定位一個元素的一種方法,這是一種量角器特定的方法。 WebDriver有許多定位策略,您可能會發現更靈活,在您的情況下,更具體。

量角器規範的這部分說明了可用的定位機制,您: https://github.com/angular/protractor/blob/master/docs/api.md#locator-strategies

考慮這些備選方案中的一個單一輸入元素隔離: element(by.id('username')).sendKeys('nathanadmin'); element(by.css('#username')).sendKeys('nathanadmin');

+0

這並沒有'實際上回答我的問題。事實上,你包含了我已經說過的我訪問過的鏈接。請參閱編輯。 – yourdeveloperfriend