Selenium Webdriver Chrome V80 имена iframe пусты, даже DOM сказал, что у них есть имена - PullRequest
1 голос
/ 04 марта 2020

Я использую селен с C#. Браузер Chrome версия 80. Я использую веб-сайт Microsoft Dynamics CRM 2013 v8.1. Я пытаюсь закрыть диалоговое окно, которое появляется при нажатии кнопки-переключателя. У меня проблема в том, что я не могу найти кнопку, чтобы нажать OK и подтвердить диалог, чтобы закрыть его.

Я попытался войти в chrome и использовать полную копию XPath. Я также использовал идентификатор для кнопки. Эти методы выдавали ошибку, говоря, что не может найти этот элемент. Я решил, что мне нужно изменить фокус фрейма. Когда я посмотрел страницу, выкинул гугл chrome инспектор, у фреймов есть имена. Я переключился на нужный мне фрейм, но селен все еще не мог найти фрейм. Я попытался перехватить iframe и кнопку с помощью id, но безуспешно.

Я включу свой тестовый код ниже.

В резюме Я думаю, что мне нужно изменить фокус фрейма, чтобы получить кнопку, которую я ищу, но ни у одного из фреймов нет имен, которые они имеют в DOM. Любые мысли или предложения.

 public void TestCase()
        {
            using (var xrmBrowser = new Api.Browser(TestSettings.Options))
            {
                xrmBrowser.LoginPage.Login(_xrmUri, _username, _password);
                xrmBrowser.Navigation.OpenSubArea("Client Services", "Cases");
                xrmBrowser.Grid.SwitchView("Active Cases");
                xrmBrowser.CommandBar.ClickCommand("New Case");
                xrmBrowser.ThinkTime(4000);

                // Populate Form
                xrmBrowser.Entity.SetValue("title", "Test API Case");
                xrmBrowser.Entity.SetValue("casetypecode", "Request");
                xrmBrowser.Entity.SetValue("caseorigincode", "Phone");
                xrmBrowser.Entity.SelectLookup("customerid", 0);
                xrmBrowser.Entity.SetValue("new_anonymousclient", true);
                xrmBrowser.ThinkTime(100);
                // xrmBrowser.Driver.SwitchTo().Frame(2);
                // xrmBrowser.Driver.FindElement(By.XPath("/html/body/div/div[2]/button[1]")).Click();
                var iframes = xrmBrowser.Driver.FindElements(By.TagName("iframe"));
                var iframeName = "";
                foreach (var iframe in iframes)
                {
                    // My attempt at getting iframe names. These are all blank but contain 4 iframes.
                    iframeName = iframe.GetAttribute("name");
                }

                xrmBrowser.ThinkTime(100);
                // LABEL btnOK

                xrmBrowser.CommandBar.ClickCommand("Save");
                xrmBrowser.ThinkTime(1000);


            }
        }

PS> Я использую EasyRepro, но не смог закрыть этот всплывающий диалог. В инспекторе chrome я могу получить доступ к кнопке и нажать ее через JS.

...