Selenium WebDriver - 能够在IFrame中定位对象,但Click()不准确

时间:2013-03-12 02:38:36

标签: selenium webdriver selenium-webdriver

正在测试的应用程序产生一个功能的IFrame。我可以使用以下任何定位器策略,XPATH,CSS或LinkText在IFrame上完美地定位元素。但是,当我执行Click()时,代码会点击其他位置。例如,屏幕有一个多选题,有4个答案,脚本应该点击第3个选项,但最后点击第1个。如果按钮无法完全按下按钮,则问题会严重得多。 Click()事件不会引发任何错误。我尝试过使用Action()界面,但没有运气。 Action.Perform()抛出一个错误,即屏幕元素在HTML之外。有人可以帮忙吗?

我正在使用Selenium WebDriver(.NET)版本2.31和Firefox 19.0.2与.NET framework 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();
    }

1 个答案:

答案 0 :(得分:2)

嗯......我能够通过点击下一步按钮注入JavaScript来解决问题。这是代码:

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以及所有投入的人!