对于想了解测试selenium页面加载时间的正确方法?的读者,本文将提供新的信息,我们将详细介绍selenium检测页面加载完成,并且为您提供关于Behat+Selenium2等待页面加载、javas
对于想了解测试selenium页面加载时间的正确方法?的读者,本文将提供新的信息,我们将详细介绍selenium检测页面加载完成,并且为您提供关于Behat + Selenium 2等待页面加载、java selenium-智能等待页面加载完成、java selenium智能等待页面加载完成示例代码、Javascript Selenium Chrome WebDriver - 处理警报的正确方法的有价值信息。
本文目录一览:- 测试selenium页面加载时间的正确方法?(selenium检测页面加载完成)
- Behat + Selenium 2等待页面加载
- java selenium-智能等待页面加载完成
- java selenium智能等待页面加载完成示例代码
- Javascript Selenium Chrome WebDriver - 处理警报的正确方法
测试selenium页面加载时间的正确方法?(selenium检测页面加载完成)
我正在尝试以编程方式测试网站列表的加载时间。目的是大致模拟用户将感知的页面加载时间。
我的第一种方法是在循环内调用以下代码:
startTime = System.currentTimeMillis(); driver.get("http://" + url); diff = System.currentTimeMillis() - startTime; System.out.println("Load time was " + diff);
问题是有时我会在页面真正加载之前得到时间结果(即,我得到50ms次),所以我猜想控件在driver.get()
完成之前会交给下一条指令。
我应该怎么做才能改善这项测试?
编辑:
正如user1258245建议的那样,我可以等待元素加载,但是问题是我不知道哪些页面需要预先加载。
答案1
小编典典有两种方法可以为您提供有意义的数据。
- 将Browsermob代理与Selenium一起使用。这是python中的示例,但在Java中几乎相同
from browsermobproxy import Server server = Server("path/to/browsermob-proxy") server.start() proxy = server.create_proxy() from selenium import webdriver profile = webdriver.FirefoxProfile() profile.set_proxy(proxy.selenium_proxy()) driver = webdriver.Firefox(firefox_profile=profile) proxy.new_har("google") driver.get("http://www.google.co.uk") proxy.har # returns a HAR JSON blob proxy.stop() driver.quit()
从中返回的HAR文件proxy.har
,它只是一个JSON
Blob,将为您提供所需的信息。我今年早些时候在博客上写过
- 另一种方法是使用现代浏览器中可用的导航时序规范。您所需要做的就是执行一些javaScript,您将获得页面加载等详细信息。
((JavascriptExecutor)driver).executeScript("var performance = window.performance || {};" + "var timings = performance.timing || {};"+ "return timings;"); /* The hashmap returned will contain something like the following. * The values are in milliseconds since 1/1/1970 * * connectEnd: 1280867925716 * connectStart: 1280867925687 * domainLookupEnd: 1280867925687 * domainLookupStart: 1280867925687 * fetchStart: 1280867925685 * legacyNavigationStart: 1280867926028 * loadEventEnd: 1280867926262 * loadEventStart: 1280867926155 * navigationStart: 1280867925685 * redirectEnd: 0 * redirectStart: 0 * requestEnd: 1280867925716 * requestStart: 1280867925716 * responseEnd: 1280867925940 * responseStart: 1280867925919 * unloadEventEnd: 1280867925940 */
Behat + Selenium 2等待页面加载
使用Selenium2Driver将Behat与Mink结合使用时,是否有办法可靠地等待页面加载?
我继承了一些旧的测试,像这样等待:
Background: Given I am on "http://test.example.com" And I wait for "20000" Given I click on the element with css selector ".button1" And I wait for "30000" Given I click on the element with css selector ".button2" And I wait for "30000" Given I click on the element with css selector ".button1" And I wait for "10000"
即仅此一次测试就需要1分钟30秒。
我想做的是有一种通用的方式来等待上一次单击以导致页面加载,而不必每次都等待大量固定的时间。
我可以看到等待页面加载的所有建议,都涉及检查是否已加载特定页面元素。
但是,这些测试是针对各种传统网站运行的,这些网站中并不总是可以检查是否存在标准元素,因此我希望使用一种更通用的方法。
答案1
小编典典您可以将等待方法与javasccript条件一起使用,例如:
/** * @When /^wait for the page to be loaded$/ */public function waitForThePageToBeLoaded(){ $this->getSession()->wait(10000, "document.readyState === ''complete''");}
另一个好的做法是有一个等待元素的方法,如果找到元素则返回元素对象,否则它将引发异常。
对于click方法,您可以具有以下内容:
$this->waitForElement("css_selector")->click();
java selenium-智能等待页面加载完成
我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作。 否则页面上的元素不存在,会抛出异常。
或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操作
selenium 中提供了非常简单,智能的方法,来判断元素是否存在.
###一、实例要求
实例:set_timeout.html 下面的html 代码, 点击click 按钮5秒后, 页面上会出现一个红色的div快, 我们需要写一段自动化脚本智能的去判断这个div是否存在, 然后把这个div 然后高亮。
<html>
<head>
<title>Set Timeout</title>
<style>
.red_box {background-color: red; width = 20%; height: 100px; border: none;}
</style>
<script>
function show_div(){
setTimeout("create_div()", 5000);
}
function create_div(){
d = document.createElement(''div'');
d.className = "red_box";
document.body.appendChild(d);
}
</script>
</head>
<body>
<button id = "b" onclick = "show_div()">click</button>
</body>
</html>
###二、隐式等待
WebDriver driver = new FirefoxDriver();
driver.get("file:///C:/Users/Tank/Desktop/set_timeout.html");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
WebElement element = driver.findElement(By.cssSelector(".red_box"));
((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);
其中
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
意思是, 总共等待10秒, 如果10秒后,元素还不存在,就会抛出异常 org.openqa.selenium.NoSuchElementException
###三、显式等待 显式等待 使用ExpectedConditions类中自带方法, 可以进行显试等待的判断。
显式等待可以自定义等待的条件,用于更加复杂的页面等待条件
public static void testWait2(WebDriver driver)
{
driver.get("E:\\StashFolder\\huoli_28@hotmail.com\\Stash\\Tank-MoneyProject\\浦东软件园培训中心\\我的教材\\Selenium Webdriver\\set_timeout.html");
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box")));
WebElement element = driver.findElement(By.cssSelector(".red_box"));
((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);
}
等待的条件
WebDriver方法
页面元素是否在页面上可用和可被单击
elementToBeClickable(By locator)
页面元素处于被选中状态
elementToBeSelected(WebElement element)
页面元素在页面中存在
presenceOfElementLocated(By locator)
在页面元素中是否包含特定的文本
textToBePresentInElement(By locator)
页面元素值
textToBePresentInElementValue(By locator, java.lang.String text)
标题 (title)
titleContains(java.lang.String title)
java selenium智能等待页面加载完成示例代码
java selenium 智能等待页面加载完成
我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作。 否则页面上的元素不存在,会抛出异常。
或者碰到AJAX异步加载,我们需要等待元素加载完成后, 才能操作
selenium 中提供了非常简单,智能的方法,来判断元素是否存在.
阅读目录
- 实例要求
- 隐式等待
- 显式等待
实例要求
实例:set_timeout.html 下面的html 代码, 点击click 按钮5秒后, 页面上会出现一个红色的div快, 我们需要写一段自动化脚本智能的去判断这个div是否存在, 然后把这个div 然后高亮。
<html> <head> <title>Set Timeout</title> <style> .red_Box {background-color: red; width = 20%; height: 100px; border: none;} </style> <script> function show_div(){ setTimeout("create_div()",5000); } function create_div(){ d = document.createElement('div'); d.className = "red_Box"; document.body.appendChild(d); } </script> </head> <body> <button id = "b" onclick = "show_div()">click</button> </body> </html>
隐式等待
WebDriver driver = new FirefoxDriver(); driver.get("file:///C:/Users/Tank/Desktop/set_timeout.html"); driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS); WebElement element = driver.findElement(By.cssSelector(".red_Box")); ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);
其中
driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);
意思是, 总共等待10秒, 如果10秒后,元素还不存在,就会抛出异常 org.openqa.selenium.NoSuchElementException
显式等待
显式等待 使用ExpectedConditions类中自带方法, 可以进行显试等待的判断。
显式等待可以自定义等待的条件,用于更加复杂的页面等待条件
等待的条件 |
WebDriver方法 |
页面元素是否在页面上可用和可被单击 |
elementToBeClickable(By locator) |
页面元素处于被选中状态 |
elementToBeSelected(WebElement element) |
页面元素在页面中存在 |
presenceOfElementLocated(By locator) |
在页面元素中是否包含特定的文本 |
textToBePresentInElement(By locator) |
页面元素值 |
textToBePresentInElementValue(By locator,java.lang.String text) |
标题 (title) |
titleContains(java.lang.String title) |
只有满足显式等待的条件满足,测试代码才会继续向后执行后续的测试逻辑
如果超过设定的最大显式等待时间阈值, 这测试程序会抛出异常。
public static void testWait2(WebDriver driver) { driver.get("E:\\StashFolder\\huoli_28@hotmail.com\\Stash\\Tank-MoneyProject\\浦东软件园培训中心\\我的教材\\Selenium Webdriver\\set_timeout.html"); webdriverwait wait = new webdriverwait(driver,20); wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_Box"))); WebElement element = driver.findElement(By.cssSelector(".red_Box")); ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element); }
以上就是对Java selenium 等待页面加载的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!
您可能感兴趣的文章:
- Python中使用 Selenium 实现网页截图实例
- Selenium处理select标签的下拉框
- PowerShell调用Web测试工具Selenium实例
- 针对Ruby的Selenium WebDriver安装指南
- java selenium操作弹出对话框示例讲解
- python结合selenium获取XX省交通违章数据的实现思路及代码
- java selenium处理Iframe中的元素示例
- java selenium XPath 定位实现方法
- java selenium 操作浏览器实例
- 玩转python selenium鼠标键盘操作(ActionChains)
Javascript Selenium Chrome WebDriver - 处理警报的正确方法
如何解决Javascript Selenium Chrome WebDriver - 处理警报的正确方法?
我正在尝试关闭 selenium 脚本运行时有时会出现的警报。它阻止了我在 try catch 选项中处理的特定 div 的单击选项。发生此异常时,''正在尝试使用驱动程序功能,但它生成,NoSuchAlertError"。
这是我代码的一部分:
let driver = await new Builder()
.withCapabilities(options)
.forbrowser("chrome")
.build();
// .. some other logic like get website etc. ... //
try {
let dataFromButton= await getDataFromButton(driver); // it fails when alert appear on screen
} catch (e) {
let alert = await driver.switchTo().alert(); // it throws NoSuchAlertError
}
Here is my alert popup,that I''m trying to remove - click on cancel button or call escape key would be enough solution for me
是否有任何特殊的,alerts” 应该以其他方式处理而不是我的示例?
解决方法
我终于找到了使用此代码的 chrome 解决方案:
await driver.executeScript(''window.stop();'');
关于测试selenium页面加载时间的正确方法?和selenium检测页面加载完成的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Behat + Selenium 2等待页面加载、java selenium-智能等待页面加载完成、java selenium智能等待页面加载完成示例代码、Javascript Selenium Chrome WebDriver - 处理警报的正确方法等相关知识的信息别忘了在本站进行查找喔。
本文标签: