2016-08-04 20 views
1

Ich versuche, Paypal-Abhebungen mit C# und Selen zu automatisieren. Die Anwendung meldet sich bei Paypal an, indem sie die angegebenen Anmeldeinformationen verwendet und auf den Link "Geld überweisen" klickt, der dann ein Popup-Fenster anzeigt (das wie ein Iframe aussieht). Mein Problem ist, dass ich auf keine der Elemente im Pop-up klicken kann, und ich habe jeden Vorschlag ausprobiert, den ich finden konnte.Selenium WebDriver: Element kann nicht gefunden werden (C#)

ist hier ein Screenshot der Form und der darunter liegende html:

paypal form

Ich versuche, auf die zu klicken Sie auf ‚Aus‘ Dropdown und unter anderem habe ich versucht:

driver.FindElement(By.XPath("//*[@id=\"selection-container\"]/form/section/table/tbody/tr[2]/td/div[1]/div[1]")).Click(); 

und

((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].hidden = false;", driver.FindElement(By.XPath("//*[@id=\"selection-container\"]/form/section/table/tbody/tr[2]/td/div[1]/div[1]"))); 

aber entweder zu bekommen und ‚Können lo Cate Element 'oder' Element nicht sichtbar 'Fehler. Wie komme ich zum Eingabeelement 'Von' im Popup? (Wenn Sie PayPal verwenden, können Sie sich auch anmelden und bei Bedarf einen Blick auf das Pop-up werfen).

Antwort

2

Sie zum iframe ersten

IWebElement frame = driver.FindElement(By.TagName("iframe")); // locate the iframe element 
driver.SwitchTo().Frame(frame); 

driver.FindElement(By.XPath("//*[@id=\"selection-container\"]/form/section/table/tbody/tr[2]/td/div[1]/div[1]")).Click(); 

wechseln müssen Und um zurück zu schalten

driver.SwitchTo().DefaultContent(); 
+0

Dies hat den Trick. – Mario

+0

Versuchen Sie immer, die beste Antwort zu geben, wenn OP einfach das Element 'By.cssSelector' finden könnte als' By.CssSelector ("div # Auswahl-Container div.source-dropdown") Warum schlagen Sie vor es mit 'xpath zu finden '... ?? –

+0

@SaurabhGaur der 'xpath' ist der OP-Code – Guy

0

Versuchen

[FindsBy(How = How.CssSelector, Using = "div[class$='source-dropdown']")] 
public IWebElement _ddSource; 

Die '$' das Ende des Attribut gibt, in dem Fall das Ende der Klasse ist source-dropdown

+0

Oder wenn Sie es tun wollen Inline 'driver.FindElement (By.CssSelector (" div:

IWebElement frame = driver.FindElement(By.CssSelector("iframe[src ='/moneytransfer']"); driver.SwitchTo().Frame(frame); 

jetzt Sie, dass mithilfe dieser cssSelector Pop-up klicken können [class $ = 'source-dropdown'] ")). Klicken Sie auf();' –

+0

Ich habe es gerade versucht und bekomme immer noch 'Element kann nicht gefunden werden'. – Mario

+0

@Mario versuchen mit 'By.CssSelector (" div # Auswahl-Container div.source-dropdown ")' nach dem Umschalten Frame .. –

0

Zuerst müssen Sie zu diesem iframe wechseln. verwenden Sie den folgenden Code:

div[class$='source-dropdown'] 
+0

Ich habe dies versucht, aber immer noch den Fehler 'Unable to locate element' bekommen. Aus irgendeinem Grund wurde der Iframe nicht gefunden. Aber wenn ich mit By.TagName aussah, wie Guy es vorgeschlagen hatte, dann funktionierte es wie ein Zauber. – Mario