我要求一般检查是否已加载页面的所有元素。有没有办法检查基本上?
在具体示例中有一个页面,我点击某个按钮,然后我必须等到我点击下一个'按钮。但是,这个' Next'按钮可用,可选择并且可以随时点击。那么如何用selenium检查页面的状态'(?)?
提醒一下:这是一个关于硒的问题,而不是相关网页的质量....
答案 0 :(得分:0)
可靠地确定页面是否已满载可能具有挑战性。没有办法知道是否所有元素都已加载。你必须定义一些"锚"每个页面中的点,以便您知道,如果已加载这些元素,则可以假设整个页面已加载。通常这涉及测试的组合。例如,您可以定义如果下面的测试组合通过,则认为页面已加载:
document.readyState === 'complete'
答案 1 :(得分:0)
有一种称为document.readyState
的东西可以通过Selenium执行JavaScript脚本来检索。这对动态加载的内容不起作用。它返回以下三种状态之一:
<强>载入强> 文档仍在加载,没有css或其他资源可用
<强>互动强> 文档已加载,没有可用的CSS或其他资源
<强>完整强> 文档和css /其他资源都已加载
您至少在寻找互动。您可以通过调用execute_script
:
driver.execute_script("return document.readyState")
答案 2 :(得分:0)
正如你的问题是如果有一种方法让python-selenium等到页面的所有元素都已加载,答案是否。
从根本上说,您可以编写一行代码(或通过函数实现)以检查 'document.readyState' == "complete"
,如下所示:
self.driver.execute_script("return document.readyState").equals("complete"))
但是这种做法有一个缺点,即它不能解释 JavaScript
/ AJAX Calls
。
默认情况下,通过 Page Loading
编写上述行以等待 Selenium
。所以重写相同的是一个完整的overhead
。除非 'document.readyState'
等于 "complete"
,否则客户端(即Web浏览器)永远不会将控件返回给WebDriver实例。一旦满足这个条件,Selenium就会执行下一行代码。
值得一提的是,虽然客户端(即Web浏览器)可以在实现 'document.readyState' equal to "complete"
后将控件返回给WebDriver实例,但它不会占用所有新 HTML DOM
上的Web元素为 present
, visible
, {{1} } 和 interactable
。
因此,根据我们的要求,如果 clickable
与 WebElement
在 interactable
之前 'document.readyState' equal to "complete"
> WebDriverWait
,您必须针对个人 expected_conditions
引导 WebElement
<强> expected_conditions
即可。以下是一些最常用的 element_to_be_clickable(locator)
:
presence_of_element_located(locator)
强> visibility_of(element)
强> <?php
/*take time form file becuse dont wont to use db*/
$my_file = 'file.txt';
$handle = fopen($my_file, 'r+') or die('Cannot open file: '.$my_file);
$data = fread($handle,filesize($my_file));
$data =$data.'000';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>website slider</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="./slick/slick.css">
<link rel="stylesheet" type="text/css" href="./slick/slick-theme.css">
<style>
img {
height: 100vh;
width: 100vw;
}
.imgc{
height: 100vh;
width: 100vw;
}
</style>
</head>
<body>
<!-- silc that i take from upload folder -->
<div class="your-class " id="exampleImage" >
<?php
$images = glob("upload/*.*");
foreach($images as $image)
{
echo '<div><img class="i" src="./'.$image.'" ></div>';
}
?>
</div>
<script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script>
<script src="./slick/slick.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(document).ready(function(){
function sliderInit(){
$('.your-class').not('.slick-initialized').slick({
slidesToShow: 1,
infinite: true,
slidesToScroll: 1,
autoplay: true,
pauseOnHover:true,
autoplaySpeed: <?php echo trim($data); ?>
});
};
/*function for full size*/
function toggleFullscreen(elem) {
elem = elem || document.documentElement;
if (!document.fullscreenElement && !document.mozFullScreenElement &&
!document.webkitFullscreenElement && !document.msFullscreenElement) {
/*$('.your-class').slick('slickPlay');*/
sliderInit();
if (elem.requestFullscreen) {
elem.requestFullscreen();
} else if (elem.msRequestFullscreen) {
elem.msRequestFullscreen();
} else if (elem.mozRequestFullScreen) {
elem.mozRequestFullScreen();
} else if (elem.webkitRequestFullscreen) {
elem.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
}
} else {
sliderInit();
/* $('.your-class').slick('slickPlay');*/
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
}
}
/*call function full size when click on img*/
document.getElementById('exampleImage').addEventListener('click', function() {
toggleFullscreen();
});
/*check if there is any change on img myabe add more or delete*/
setInterval(adddata, 20*1000);
function adddata(){
$.ajax({
url :"adddata.php",
success:function(data){
$('#exampleImage').html(data);
setInterval(sliderInit, 1000);
$('.your-class').slick('slickPlay');
}
})
}
});
</script>
</body>
</html>
强>