Щелчок по нескольким рядам радиокнопок с помощью селена - PullRequest
0 голосов
/ 04 июля 2019

Я работаю с таблицей на веб-странице с X строками. Каждая строка представляет запрашивающего, либо просящего о предоставлении чего-либо, либо об отзыве. Целью этой автоматизации является автоматическое утверждение предоставления или отзыва. Следующий код работает, но, как ни странно, только при первом появлении предоставления или отзыва соответственно:

            var table = driver.FindElement(By.XPath(@"//*[@id=""span_pending_approvals""]/form/table/tbody"));
            var rows = table.FindElements(By.TagName("tr"));

            var rowCount = 1;

            foreach (var row in rows)
            {
                if (row.Text.Contains("Grant"))
                {
                    var requester = row.Text.Split(' ')[3];
                    row.FindElement(By.XPath("//input[@value='approve']")).Click();
                }
                else if (row.Text.Contains("Revoke"))
                {
                    row.FindElement(By.XPath("//input[@value='revoke']")).Click();
                }

                rowCount++;
            }

Выход составляет:

Amy - Grant[X] Wait[]
Andy - Grant[] Wait[]
Anthony - Grant[] Wait[]
Brad - Revoke[X] Wait[]
Beth - Revoke[] Wait[]
Bort - Revoke[] Wait[]

Когда я хочу:

Amy - Grant[X] Wait[]
Andy - Grant[X] Wait[]
Anthony - Grant[X] Wait[]
Brad - Revoke[X] Wait[]
Beth - Revoke[X] Wait[]
Bort - Revoke[X] Wait[]

Мысли о том, почему это работает только при первом появлении каждого параметра? Когда я перехожу через отладчик, я вижу .Click (); обрабатывается, как и ожидалось, для каждой строки, но фактически регистрируется на веб-странице только для первых появлений «Предоставить» или «Отменить».

1 Ответ

1 голос
/ 04 июля 2019

Обновите скрипт, как показано ниже.

foreach (var row in rows)
       {
            if (row.Text.Contains("Grant"))
            {
                var requester = row.Text.Split(' ')[3];
                row.FindElement(By.XPath(".//input[@value='approve']")).Click();
            }
            else if (row.Text.Contains("Revoke"))
            {
                row.FindElement(By.XPath(".//input[@value='revoke']")).Click();
            }

            rowCount++;
        }

Просто ограничив область действия текущей строкой, а не всей используемой dom.в начале xpath под строкой

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...