テスト中にWebページを更新するためのもっとエレガントな方法を探しています(私はSelenium 2を使用しています)。 F5キーを送信しただけですが、Webページ全体を更新する方法がドライバにあるかどうか疑問に思います
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");
を使用することもできますが、refreshメソッドは問題なく機能するはずです。
Pythonで
組み込みメソッドを使用する
driver.refresh()
または、JavaScriptを実行する
driver.execute_script("location.reload()")
Selenium Webdriverを使用してWebページを更新する5つの方法
特別な特別なコーディングはありません。私はちょうどそれを機能させるためにさまざまな方法で既存の関数を使用しました。どうぞ :
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");
Seleniumでアプリケーションを更新するためのさまざまなアプローチを見つけました -
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();
ページ更新(F5)の代わりに使用
driver.navigate().refresh();
(または)
Actions actions = new Actions(driver);
actions.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
注意すべき重要なことの1つは、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ループは1回実行されます。これは、browse()。refresh()を超えるコードが、ブラウザが実際にページを完全に再ロードするまで実行されないためです。 navigate()。refresh()はブラウザのロードが完了するまでブロックされないため、実際にはこのループを通過するのに数秒かかります。
あなたも試すことができます
Driver.Instance.Navigate().Refresh();
ページ全体ではなくページ上の特定のiframeのみを更新したい場合もあります。
あなたは以下の通りです:
public void refreshIFrameByJavaScriptExecutor(String iFrameId){
String script= "document.getElementById('" + iFrameId+ "').src = " + "document.getElementById('" + iFrameId+ "').src";
((IJavaScriptExecutor)WebDriver).ExecuteScript(script);
}
PHPの場合:
$driver->navigate()->refresh();
JavaのSeleniumを使って現在のページを更新するもう一つの方法
//first: get the current URL in a String variable
String currentURL = driver.getCurrentUrl();
//second: call the current URL
driver.get(currentURL);
これを使用すると、ブラウザのアドレスバーをクリックしてEnterキーを押すなど、現在のページが更新されます。