Bonjour à tous,
Dans le cadre d'un projet, nous utilisons WatiN pour nos tests fonctionnels. Notre version est 2.0.20, utilisé dans Visual Studio 2008 sur plateforme .NET 3.5.
A l'intérieur de l'un de nos processus business, nous devons passer par un système web nous permettant d'ajouter / sélectionner / éditer des partenaires (grosso mobo = clients). Ce système est intégré sur une page web de notre processus à l'aide d'une IFrame.
Mon problème est que WatiN n'arrive pas à sélectionner les éléments qui se trouvent à l'intérieur de la frame. J'ai d'abord pensé à ajouter un Thread.sleep d'une dizaine de seconde avant d'essayer d'accéder à des éléments de la frame (qui n'est pas chargée en même temps que la page principale).
Dans les codes qui suivent, m_commonTools.MyFrame est équivalent à :
Mon premier code ressemblait donc à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part GetFrame(ie)
J'ai pas trouvé beaucoup de documentation ou de forums sur WatiN, mais ce lien m'a donné une piste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Thread.Sleep(7000) m_commonTools.MyFrame.Button(Find.ById("ucSearch_btnSearch")).Click()
http://geekswithblogs.net/mnf/archiv...ames-page.aspx
J'ai donc adapté mon code pour récupérer l'objet frame dans un premier temps puis en cherchant pour le bouton comme suit :
Ce code de test me retourne cette erreur que je ne comprends pas du tout :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Thread.Sleep(7000) Dim mpssFrame As WatiN.Core.Frame = m_commonTools.MyFrame.Frame("myIFrame") Dim button As WatiN.Core.Button = mpssFrame.Button(Find.ById("ucSearch_btnSearch")) button.Click()
Est-ce un problème car ma frame est en fait une <IFrame> ? Si oui, est-il possible de résoudre cette erreur ? je n'ai pas vu d'objet IFrame dans le WatiN.Core, il n'y a visiblement qu'un objet Frame.failed: Unable to cast COM object of type 'mshtml.HTMLDocumentClass' to interface type 'mshtml.DispHTMLDocument'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{3050F55F-98B5-11CF-BB82-00AA00BDCE0B}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
System.InvalidCastException
Message: Unable to cast COM object of type 'mshtml.HTMLDocumentClass' to interface type 'mshtml.DispHTMLDocument'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{3050F55F-98B5-11CF-BB82-00AA00BDCE0B}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
Source: mscorlib
StackTrace:
at System.RuntimeType.InvokeDispMethod(String name, BindingFlags invokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
at mshtml.HTMLDocumentClass.get_all()
at WatiN.Core.Native.InternetExplorer.AllFramesProcessor..ctor(HTMLDocument htmlDocument)
at WatiN.Core.Native.InternetExplorer.IEDocument.get_Frames()
at WatiN.Core.FrameCollection..ctor(DomContainer domContainer, INativeDocument htmlDocument)
at WatiN.Core.Document.get_Frames()
at WatiN.Core.Document.Frame(Constraint findBy)
at WatiN.Core.Document.Frame(String id)
Ou dois-je accéder aux éléments de l'iframe totalement différemment ? (si oui, quelques lignes d'exemples seraient les bienvenues)
Merci d'avance, j'espère que j'ai posté plus ou moins au bon endroit, je n'ai pas vu de sous-forum dédié à WatiN (trop peu utilisé ?)
Salutations !
Partager