C # Do / while цикл Selenium - выполнение определенного оператора только после первоначального выполнения - PullRequest
0 голосов
/ 30 ноября 2018

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

Сейчас у меня есть это:

List<string> addedTestNames = new List<string>();
do
{
    IList<IWebElement> displayedTests = cycle.ReturnListOfTestsWithinCycle();
    for (int i = 0; i < cycle.ReturnListOfTestsWithinCycle().Count; i++)
    {
        addedTestNames.Add(displayedTests[i].Text);
    }
} while (helper.DoesElementExist(driver, cycle.getScrollForwardArrowInResults()));

Мое условие while ищет стрелку прокрутки, если она есть, я снова выполню действия.Если нет, я буду знать, чтобы остановиться и продолжить тестирование.Моя проблема в том, что если стрелка есть, мне нужно щелкнуть ее, чтобы перейти на следующую страницу результатов.Я не знаю, где поставить это действие.Я не могу поставить его в качестве первого условия, потому что если оно есть, я не хочу нажимать на него до добавления 1-й страницы результатов, и я не могу поставить его после добавления первой страницы результатов, потому что это может изменить ответ на мойв то время как условие (стрелка уходит, когда вы находитесь на «последней» странице).Что я действительно хочу сделать, так это завершить все действия один раз, найти наличие стрелки, если она там щелкнет, затем продолжить действия do.

И да, я сортируюнового для всего этого.

1 Ответ

0 голосов
/ 01 декабря 2018

У вас было большинство смелости, вам просто нужно было передвинуть одну вещь и добавить логический флаг, чтобы знать, когда вы закончите.

List<string> addedTestNames = new List<string>();
bool done = false;
do
{
    // MORE OPTIMIZED - OPTION 1
    addedTestNames.AddRange(cycle.ReturnListOfTestsWithinCycle().Select(e => e.Text).ToList());

    // LESS OPTIMIZED - OPTION 2
    //IList<IWebElement> displayedTests = cycle.ReturnListOfTestsWithinCycle();
    //for (int i = 0; i < displayedTests.Count; i++)
    //{
    //    addedTestNames.Add(displayedTests[i].Text);
    //}

    if (helper.DoesElementExist(driver, cycle.getScrollForwardArrowInResults()))
    {
        // click Next
    }
    else
    {
        done = true;
    }
} while (!done);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...