2016-08-04 201 views
1

我试图通过使用C#和Selen自动化PayPal取款。该应用程序使用提供的凭证登录Paypal并点击“转账资金”链接,然后显示一个弹出窗口(它看起来是一个iframe)。我的问题是,我无法点击弹出窗口中的任何元素,并且我尝试了所有可以找到的建议。Selenium WebDriver:无法定位元素(C#)

这里是形式的截图和底层的HTML:

paypal form

我试图单击“发件人”下拉列表,然后在其他的事情,我已经试过:

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

((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]"))); 

但要么得到和“无法LO凯特元素“或”元素不可见“错误。如何到达弹出窗口中的“From”输入元素? (如果您使用贝宝,您也可以登录并根据需要查看弹出窗口)。

回答

2

你需要切换到iframe第一

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(); 

并转回

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

这个技巧。 – Mario

+0

总是尝试提供最好的答案,如果OP可以简单地使用'By.cssSelector'作为'By.CssSelector(“div#selection-container div.source-dropdown”)来找到元素'为什么你建议使用'xpath '...? –

+0

@SaurabhGaur'xpath'是OP代码 – Guy

0

尝试

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

'$'指定属性的结束,如是之类的到底是source-dropdown

+0

或者,如果你想这样做内嵌'driver.FindElement(By.CssSelector(“分区:

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

现在你可以点击,通过使用该cssSelector弹出[class $ ='source-dropdown']“))。Click();' –

+0

刚试过,仍然'无法定位元素'。 – Mario

+0

@Mario尝试在切换帧后使用'By.CssSelector(“div#selection-container div.source-dropdown”)'.. –

0

首先你需要切换到iframe。使用下面的代码:

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

我试过这个,但仍然得到'无法定位元素'的错误。由于某种原因没有找到iframe。但是,如果我将Guy的建议改为使用By.TagName,那么它就像魅力一样。 – Mario

相关问题