2013-01-08 20 views
0

我正在嘗試使用watin來模仿使用c#登錄live.com。代碼如下。watin不與live.com合作

IE myIE = new IE("http://login.live.com/"); 
myIE.TextField(Find.ByName("login")).TypeText("[email protected]"); 
myIE.TextField(Find.ByName("passwd")).TypeText("1234"); 

myIE.Button(Find.ByValue("Sign in")).Click(); 

但是它始終未能找到文本框:

WatiN.Core.Exceptions.ElementNotFoundException:無法找到輸入(隱藏)或輸入(密碼)或輸入(文本)或INPUT(文本域)或textarea元素標籤匹配的標準:屬性「名」在http://login.live.com/

等於「登錄」主頁中的示例代碼的http://watin.org/工作正常www.google.com

我錯過了什麼,或者http://login.live.com有什麼特別的東西可以阻止watin工作嗎?

PS:我正在運行Windows 7 64位。 VS 2008和.NET 3.5

回答

1

您遇到的問題是因爲您嘗試輸入的電子郵件字段是HTML5元素。

創建TextFieldExtended類在這太問題定義:WatiN support for HTML5 tags

然後你的代碼會像下面:

ie.GoTo("http://login.live.com/"); 
ie.ElementOfType<TextFieldExtended>(Find.ByName("login")).TypeText("[email protected]"); 
ie.TextField(Find.ByName("passwd")).TypeText("thisismypassword"); 
ie.Button(Find.ByValue("Sign in")).Click(); 

在測試了Watin2.1,IE9,Win7-64。

+0

這很奇妙!謝謝! Watin應該在html5越來越流行的時候添加這個功能。 – Henry

0

你可以試試這個:我得到它在我結束工作:

ie.Div(Find.ByCustom("innertext","[email protected]")).Click(); 
ie.TextField(Find.ById("i0116")).TypeText("hello"); 
ie.TextField(Find.ById("i0118")).Click(); 
ie.TextField(Find.ById("i0118")).TypeText("Hello!"); 

我建議使用此測試記錄。它會給你的elemnt名字在你的源使用方法:

http://www.codeproject.com/Articles/19180/WatiN-Test-Recorder

編輯:

我也能得到這個由DIVID時發現上班。

ie.Element(Find.ById("idDiv_PWD_UsernameExample")).Click() 
+0

感謝您的回覆。第一行不起作用,因爲它根本找不到TextField。測試記錄器(http://sourceforge.net/projects/watintestrecord/?source=dlp)似乎過時了,它不會在Windows 7中運行。 – Henry

+0

我編輯了我的回覆。這是測試和工作。 – Botonomous

+0

此外,ID的可能是動態的,我沒有檢查。您可能需要使用正則表達式。 – Botonomous