3

被测应用程序为功能生成一个 IFrame。我可以使用以下任何定位器策略 XPATH、CSS 或 LinkText 在 IFrame 上完美定位元素。但是,当我执行 a 时Click(),代码会单击不同的位置。例如,屏幕上有一个包含 4 个答案的多项选择题,脚本应该单击第 3 个选项,但最终单击第 1 个选项。如果按钮根本无法单击该按钮,则问题会更加严重。该Click()事件不会引发任何错误。我曾尝试使用该Action()界面,但没有运气。会Action.Perform()引发屏幕元素在 HTML 之外的错误。有人可以帮忙吗?

我正在使用 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();
    }
4

1 回答 1

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

非常感谢这篇文章和所有参与的人!!

于 2013-03-12T18:08:49.857 回答