使用selenium处理网页中的angularjs对话框

时间:2017-07-10 02:25:16

标签: angularjs selenium

我有一个angularjs网页,当我在页面上执行某些操作时会提示。如果没有提示,代码应该忽略并继续,但如果出现提示,则确保接受javascript提示。

当我使用firebug时,我得到了元素的以下属性。     / html / body / div [2]

div [number]在我转到此页面时会发生变化。我无法在XPath中使用相同的内容,因为每次执行测试用例时,div元素都会发生变化。此外,div的属性为 tabindex = -1

 bool status = false;
        WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10));
        IWebElement alert;

        if (wait.Until(ExpectedConditions.InvisibilityOfElementLocated((By.XPath("/html/body/div[2]")
        {
            Console.WriteLine("I am in if loop");
            status = false;
        }
        else
        {
            Console.WriteLine("I am in else loop");
            alert = Browser.Driver.FindElement(By.XPath("/html/body/div[2]"));
            ((IJavaScriptExecutor)webDriver).ExecuteScript("arguments[0].click()", alert);
            status = true;
        }

        return status;

如何处理这样的对话框并确保在出现时接受相同的对话框。

感谢。

Image of the Angular JS dialog box

1 个答案:

答案 0 :(得分:0)

您可以使用警报标题派生xpath。可能如下。 (我不知道确切的html,只是想象标题文本在某个span标签中)

alert = Browser.Driver.FindElement(By.XPath("/html/body//div/span[contains(text(),'Apply changes to controller configuration')]"));

(//)可以避免在div标签上使用索引。