2013-03-12 77 views
3

受測試的應用程序會生成一個IFrame以實現功能。我能夠通過使用以下任何定位策略(XPATH,CSS或LinkText)在IFrame上完美地定位元素。但是,當我執行Click()時,代碼點擊不同的位置。例如,屏幕有4個答案的多項選擇問題,腳本應該點擊第3個選項,但最終點擊第1個選項。如果一個按鈕無法點擊按鈕,問題會更加嚴重。儘管如此,Click()事件不會引發任何錯誤。我嘗試使用Action()界面,但沒有運氣。 Action.Perform()引發屏幕元素超出HTML的錯誤。任何人都可以幫忙嗎?Selenium WebDriver - 能夠在IFrame中查找對象,但Click()不準確

我使用Selenium WebDriver(.NET)版本2.31和Firefox 19.0.2與.NET框架4.0。

driver.SwitchTo().Frame(2); 
System.Threading.Thread.Sleep(20000); 
IWebElement Answer1 = driver.FindElement(By.XPath(".//*[@id='question-reload']/div[3]/div[2]/ul/li[1]/a")); 
Answer1.Click(); 
driver.FindElement(By.LinkText("Find the embassy")).Click(); 
IWebElement Next = driver.FindElement(By.XPath(".//*[@id='next']/b/i")); 
int X = Next.Location.X; 
int Y = Next.Location.Y; 
Next.Click(); 

    for (int i = 0; i < 59; i++) 
    { 
     System.Threading.Thread.Sleep(3000);   
     IWebElement newNext = driver.FindElement(By.XPath(".//*[@id='next']/b/i")); 
     newNext.Click(); 
    } 
+0

你確定元素id,xpath或css沒有動態變化嗎?你可以檢查一次,讓我們知道嗎? – Hemanth 2013-03-12 03:06:34

+0

@HemChe:元素沒有ID。但其他定位器值不會動態改變。 – 2013-03-12 03:33:05

+0

只是一個更新。在Debug模式下執行時,腳本能夠點擊Next按鈕。但完全執行時會失敗。嘗試在Click()事件之前創建智能等待元素,但沒有運氣。 – 2013-03-12 09:34:31

回答

2

嗯......我可以通過注入JavaScript來點擊Next按鈕來解決這個問題。這裏有雲代碼:

System.Threading.Thread.Sleep(1000);    
IJavaScriptExecutor exec = (IJavaScriptExecutor)driver; 
StringBuilder locator = new StringBuilder(); 
locator.Append("document.getElementById('next').click();"); 
exec.ExecuteScript(locator.ToString()); 

由於很多this piece和大家誰在投!

相關問題