Прежде всего, ваш вопрос немного удивителен, как он работает? У вас есть .
в xpaths, и по моим знаниям selenium действительно нужен .
в xpath. В любом случае ответ на ваш вопрос:
Если есть возможность использовать любой другой элемент локатора, чем XPath затем использовать это, это, безусловно, сократить время выполнения. Поскольку вы использовали для цикла, и каждый цикл попытается найти элемент, используя xpath и selenium, проанализирует весь html-документ, чтобы найти элемент, поэтому, очевидно, это увеличит время выполнения.
Если нет возможности использовать какой-либо другой локатор, кроме xpath, тогда вы можете отключить неявное ожидание перед выполнением операции выше. Поскольку ваш код не выполняет никаких действий, таких как щелчок, который обновляет загруженную страницу, поэтому не будет проблем, связанных с временем. Просто убедитесь, что перед выполнением вышеуказанной операции требуется table
dom полностью загружен.
Не забудьте включить неявное ожидание после завершения выше.
Это будет выглядеть следующим образом:
driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
List<WebElement> rows = table.findElements(By.xpath("//tbody//tr//td//.."));
List<ArrayList<String>> rowsData = new ArrayList<ArrayList<String>>();
for(WebElement row:rows){
List<WebElement> rowElements = row.findElements(By.xpath("//td"));
ArrayList<String> rowData = new ArrayList<String>();
for(WebElement column:rowElements){
rowData.add(column.getText().toString());
}
rowsData.add(rowData);}
return rowsData;
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Если вам не нужно брать все столбцы, я бы предложил, не делайте этого.Попробуйте просто найти один элемент, если это так. – Saifur
Мне нужно получить все данные столбцов, так как эти данные нужно сравнивать с данными из db/criteria. – user3188928
Вам нужны столбцы и строки? – Saifur