Есть ли простой способ создать список этих элементов, чтобы я мог просмотреть список и щелкнуть? - PullRequest
0 голосов
/ 21 сентября 2019

Я хочу создать список кнопок «Да», чтобы можно было циклически проходить по списку и нажимать кнопку «Да», а не нацеливать их по отдельности.

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

Я подошел к решению этой проблемы, используя два цикла for, но яЯ не уверен, как бороться с пустыми столбцами, чтобы это испортило мой цикл.

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

//button[contains (text(), 'Yes')][x]

Вот ссылка !

<div class="section">
    <h2 class="section-heading">Section 1</h2>
    <div class="section-content">
        <div class="grid group">
            <div class="grid col span 1_of_2"></div>
            <div class="grid col span 1_of_2"></div>
        </div>
    </div>
</div>
<div class="section">
    <h2 class="section-heading">Section 1</h2>
    <div class="section-content">
        <div class="grid group">
            <div class="grid col span 1_of_2">
                <div id="button-group">
                    <button>No</button>
                    <button>Yes</button>
                </div>
            </div>
            <div class="grid col span 1_of_2"></div>
        </div>
        <div class="grid group">
            <div class="grid col span 1_of_2"></div>
            <div class="grid col span 1_of_2"></div>
        </div>
        <div class="grid group">
            <div class="grid col span 1_of_2"></div>
            <div class="grid col span 1_of_2"></div>
        </div>
        <div class="grid group">
            <div class="grid col span 1_of_2">
                <div id="button-group">
                    <button>No</button>
                    <button>Yes</button>
                </div>
            </div>
            <div class="grid col span 1_of_2"></div>
        </div>
    </div>
</div>

Ответы [ 2 ]

1 голос
/ 21 сентября 2019

Вы можете вызвать метод Driver.FindElements, чтобы получить список кнопок, например:

var ListButton =Driver.FindElements(By.XPath("//button[contains (text(), 'Yes')]"));

    foreach(var Actualbutton in ListButton )
    {
        if ( Actualbutton.Displayed && Actualbutton.Enabled )
        {
            Actualbutton.Click();
        }
    }

Примечание: если сайт обновляется после нажатия кнопки, вам потребуется обновить список, в противном случаевы получите исключение reference to object not established as an instance of an object

, в этом случае вы можете сделать что-то вроде этого:

//collect list of buttonyes
 var ListButton =Driver.FindElements(By.XPath("//button[contains (text(), 'Yes')]"));

    for(int i=0 ;i<ListButton.Count ;i++ )
    {
        if(ListButton[i].Enabled &&ListButton[i].Displayed )
        {
            ListButton[i].Click ( );
            System.Threading.Thread.Sleep ( 2000 );
        }         
        ListButton=Driver.FindElements ( By.XPath ( "//button[contains (text(), 'Yes')]" ) );
    }
1 голос
/ 21 сентября 2019

Если я правильно понял вопрос, вы можете использовать querySelector: document.querySelectorAll(".grid > .grid > #button-group > button"), чтобы выбрать все кнопки, затем отфильтровать все кнопки, которые имеют «Нет», и тогда у вас есть список кнопок.

Я не очень знаком с C # Selenium, но вот пример того, как это может выглядеть:

IWebDriver driver; // assume assigned elsewhere
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
var elements = js.ExecuteScript<Array<IWebElement>>("document.querySelectorAll('.grid > .grid > #button-group > button')");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...