Ответ 1
В Java или JavaScript:
driver.navigate().refresh();
Это должно обновить страницу.
Я ищу более элегантный способ обновления веб-страницы во время тестов (я использую Selenium2). Я просто посылаю ключ F5, но мне интересно, имеет ли драйвер метод обновления всей веб-страницы Вот мой код
while(driver.findElements(By.xpath("//*[text() = 'READY']")).size() == 0 )
driver.findElement(By.xpath("//body")).sendKeys(Keys.F5);
//element appear after text READY is presented
driver.findElement(By.cssSelector("div.column a")).click();
Возможно, это лучшее решение для поиска элемента на обновленной странице вручную
В Java или JavaScript:
driver.navigate().refresh();
Это должно обновить страницу.
В Python существует способ для этого: driver.refresh()
. Возможно, это не то же самое на Java.
В качестве альтернативы вы можете driver.get("http://foo.bar");
, хотя я думаю, что метод обновления должен работать нормально.
В python
Использование встроенного метода
driver.refresh()
или, выполняя JavaScript
driver.execute_script("location.reload()")
Найдены различные подходы к обновлению приложения в селене: -
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
Вот немного другая версия С#:
driver.Navigate().Refresh();
Альтернативный вариант для Обновление страницы (F5)
driver.navigate().refresh();
(или)
Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
5 различных способов обновления веб-страницы с помощью Selenium Webdriver
Нет специального дополнительного кодирования. Я просто использовал существующие функции по-разному, чтобы заставить его работать. Вот они:
Использование метода sendKeys.Keys
driver.get("https://accounts.google.com/SignUp");
driver.findElement(By.id("firstname-placeholder")).sendKeys(Keys.F5);
Использование метода navigate.refresh()
driver.get("https://accounts.google.com/SignUp");
driver.navigate().refresh();
Использование метода navigate.to()
driver.get("https://accounts.google.com/SignUp");
driver.navigate().to(driver.getCurrentUrl());
Использование метода get()
driver.get("https://accounts.google.com/SignUp");
driver.get(driver.getCurrentUrl());
Использование метода sendKeys()
driver.get("https://accounts.google.com/SignUp");
driver.findElement(By.id("firstname-placeholder")).sendKeys("\uE035");
Вы также можете попробовать
Driver.Instance.Navigate().Refresh();
Существует также случай, когда вы хотите обновить только определенный iframe на странице, а не полную страницу.
Вы делаете следующее:
public void refreshIFrameByJavaScriptExecutor(String iFrameId){
String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}
Важно отметить, что вызов 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.
В PHP:
$driver->navigate()->refresh();