Я хотел бы знать, если есть способ, с помощью XPath или CssSelectors, если есть последовательный способ ждать, пока jQuery DataTable не завершил загрузку для использования с Селеном.Дождитесь JQuery DataTable загружается с селеном
ответ
См. https://datatables.net/reference/event/processing.
Это событие вызывается, когда DataTables делает некоторый вид обработки - быть, сортировка, фильтрация или любой другой вид обработки данных
public static void WaitUntilDataTableHasFinishedLoading(this IWebDriver driver, IWebElement processingTable)
{
processingTable.WaitForAttribute("style", "display: none;");
}
Использование:
IWebElement x = SeleniumInfo.Driver.FindElement(By.Id("tableName_processing"));
SeleniumInfo.Driver.WaitUntilDataTableHasFinishedLoading(x);
DataTables обеспечивает initComplete function:
... чтобы знать, когда ваша таблица полностью инициализирован, данные загружаются и нарисовано
Вы можете комбинировать его с Selenium ожидания() -> до(). Вот пример использования PHP:.
$this->webDriver->wait($timeoutInSeconds, $intervalInMilliseconds)->until(
// a php anonymous function executed every $intervallInMilliseconds
// it tells Selenium to execute some JS in the brower
// when this methods returns true, Selenium stops waiting
function(){
return 'loaded' === func_get_arg(0)->executeScript(
// the javascript method provided by DataTable
"$('#dataTableId').dataTable({
\"initComplete\": function(settings, json) {
return 'loaded';
}
}
);");
},
"DataTable still not loaded after $timeoutInSeconds."
);
Когда DataTable загружен, JS $ ('# dataTableId') DataTable() возвращает 'загружен' и PHP анонимная функция возвращает истину, и Селен перестает ждать. Если DataTable не загружается после $ timeoutInSeconds секунд, исключение будет вызываться с помощью «DataTable, который еще не загружен после $ timeoutInSeconds». сообщение.
Надеюсь, это поможет.
Спасибо. Я собираюсь проверить, могу ли я как-нибудь это сделать в C# –
поделитесь некоторым кодом. –
не нужно, так как все jQuery DataTables имеют один и тот же скелет –