2016-08-04 112 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

相關問題