Примечание автора: Это неэффективно. Но весело, потому что монады потрясающие. Это не подходит для производственного кода Python.
>>> sum(l, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Это просто суммирует элементы итерабельности, переданные в первом аргументе, обрабатывая второй аргумент как начальное значение суммы (если не указано, 0
вместо этого этот случай даст вам ошибку).
Поскольку вы суммируете вложенные списки, вы фактически получаете [1,3]+[2,4]
в результате sum([[1,3],[2,4]],[])
, который равен [1,3,2,4]
.
Обратите внимание, что работает только в списках списков. Для списков списков списков вам понадобится другое решение.
В Java или JavaScript:
driver.navigate().refresh();
Это должно обновить страницу.
Найдены различные подходы к обновлению приложения в селене: -
1.driver.navigate().refresh();
2.driver.get(driver.getCurrentUrl());
3.driver.navigate().to(driver.getCurrentUrl());
4.driver.findElement(By.id("Contact-us")).sendKeys(Keys.F5);
5.driver.executeScript("history.go(0)");
Для живого кода см. ссылку http://www.ufthelp.com/2014/11/Methods -Browser-Refresh-Selenium.html
Вот немного другая версия C #:
driver.Navigate().Refresh();
В Python существует способ для этого: driver.refresh()
. Возможно, это не то же самое в Java.
В качестве альтернативы вы могли бы driver.get("http://foo.bar");
, хотя я думаю, что метод обновления должен работать нормально.
Вы также можете попробовать
Driver.Instance.Navigate().Refresh();
В python
Использование встроенного метода
driver.refresh()
или выполнения JavaScript
driver.execute_script("location.reload()")
5 различных способов обновления веб-страницы с помощью Selenium Webdriver
Специального дополнительного кодирования нет. Я просто использовал существующие функции по-разному, чтобы заставить его работать. Здесь они:
driver.get("https://accounts.google.com/SignUp");
driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5);
driver.get("https://accounts.google.com/SignUp");
driver.navigate().refresh();
driver.get("https://accounts.google.com/SignUp");
driver.navigate().to(driver.getCurrentUrl());
driver.get("https://accounts.google.com/SignUp");
driver.get(driver.getCurrentUrl());
driver.get("https://accounts.google.com/SignUp");
driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035");
Альтернативный для обновления страницы (F5)
driver.navigate().refresh();
(или)
Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
Важно отметить, что вызов driver.navigate (). refresh () иногда кажется асинхронным, то есть он не ждет завершения обновления, он просто «запускает обновление» и не выполняет блокировать дальнейшее выполнение, в то время как браузер перезагружает страницу.
Хотя это, похоже, происходит в меньшем числе случаев, мы полагали, что лучше убедиться, что это работает на 100%, добавив ручную проверку, будет ли страница действительно начал перезагружать.
Вот код, который я написал для этого в классе объектов основной страницы:
public void reload() {
// remember reference to current html root element
final WebElement htmlRoot = getDriver().findElement(By.tagName("html"));
// the refresh seems to sometimes be asynchronous, so this sometimes just kicks off the refresh,
// but doesn't actually wait for the fresh to finish
getDriver().navigate().refresh();
// verify page started reloading by checking that the html root is not present anymore
final long startTime = System.currentTimeMillis();
final long maxLoadTime = TimeUnit.SECONDS.toMillis(getMaximumLoadTime());
boolean startedReloading = false;
do {
try {
startedReloading = !htmlRoot.isDisplayed();
} catch (ElementNotVisibleException | StaleElementReferenceException ex) {
startedReloading = true;
}
} while (!startedReloading && (System.currentTimeMillis() - startTime < maxLoadTime));
if (!startedReloading) {
throw new IllegalStateException("Page " + getName() + " did not start reloading in " + maxLoadTime + "ms");
}
// verify page finished reloading
verify();
}
Некоторые примечания:
Опять же, в подавляющем большинстве случаев цикл do / while запускает одиночный время, потому что код за пределами навигации (). refresh () не выполняется, пока браузер фактически не перезагрузит страницу полностью, но мы видели случаи, когда на самом деле требуется секунд, чтобы пройти через этот цикл, потому что navigate (). refresh ( ) не блокировалось, пока браузер не завершил загрузку.
Другой способ обновить текущую страницу с помощью selenium в Java.
//first: get the current URL in a String variable
String currentURL = driver.getCurrentUrl();
//second: call the current URL
driver.get(currentURL);
Используя это, будет обновлена текущая страница, например, щелкнув адресную строку браузера и нажав enter.
Существует также случай, когда вы хотите обновить только определенный iframe на странице, а не полную страницу.
Вы делаете следующее:
public void refreshIFrameByJavaScriptExecutor(String iFrameId){
String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}