Selenium HTML Table .. сохраняя WebElements, щелкающие по странице - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю в стандартной таблице HTML (tr (строки), td (данные))

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

Если она недействительна, сценарий нажимает кнопку «Назад» на странице, чтобы вернуться к таблице политик.Однако, конечно, поскольку браузер перешел от страницы таблицы, WebElements в таблице устарели и больше не могут быть доступны.

Я пытался сохранить веб-элементы в списке, подобном этому ...

List<IWebElement> rows = new List<IWebElement>(table.FindElements(By.TagName("tr")));

... но это не решает проблему с устаревшими элементами.

Поскольку каждый шаг возвращается к ...

foreach (var row in rows)

... Строка, которая, конечно же, приходит после хранения веб-элементов, я не нашел способа сначала заново сохранить tr-элементы перед продолжением.

Кто-нибудь сталкивался с этим или кто-нибудь нашел умный способ справиться с этой ситуацией, с которой я еще не сталкивался?

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

У меня есть похожий сценарий, и я выполняю его для цикла for.

Вы можете ссылаться на этот пример (синтаксис принадлежит Java, вы можете ссылаться на него в соответствии с C #)

public void locateElement(int i) {
    driver.findElement(By.xpath("(//a[@class=''])[" + i + "]")).click();
}

    try {
        List<WebElement> rows = new List<WebElement>(table.FindElements(By.TagName("tr")));

        for (int i = 1; i <= rows.size(); i++) {

            //To locate on main page, need to use i for each row
            locateElement(i);   

            rows = new List<IWebElement>(table.FindElements(By.TagName("tr")));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
0 голосов
/ 21 сентября 2018

Невозможно сохранить список элементов при переходе на другой URL-адрес, поскольку DOM был очищен, поэтому все ссылки будут очищены.

Вы должны считать строки и проходить по этому номеру.

List<WebElement> rows = new List<WebElement>(table.FindElements(By.TagName("tr")));
var rowsCount = rows.Count;
for(int i=0; i<rowsCount; i++)
{
    var row = rows[i];
    // do what you need to do on this row e.g. row.Click();
    row.Click();

    // click back and wait 
    back.Click();
    System.Threading.Thread.Sleep(10000);

    rows = new List<WebElement>(table.FindElements(By.TagName("tr")));
}
0 голосов
/ 20 сентября 2018

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

List<IWebElement> rows = new List<IWebElement>
                         (table.FindElements(By.TagName("tr")));

foreach (var row in rows) {

   ...
   // click back button on detail page
   backButton.click()
   // find the rows on table page again
   sleep(<5-10 seconds>) for debug purpose,
   rows = new List<IWebElement>(table.FindElements(By.TagName("tr")));

}

// I'm not suer the foreach can remain the next iterate index even
// I assign new value to the `rows`.  If foreach can't work in such case,
// change to `for(var i=0;i<length;i++)` pattern.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...