我正在为我的应用程序创建一个测试程序,我希望在我的代码中有一个同步的动作延迟,以便等待下一页加载,然后搜索我需要的选择器。 我已经使用了setTimeout但返回不在那里工作。
var myelement = "click button here";
if (myelement.indexOf("click")>=0) {
for (var i=1; i<=4 ; i++) {
title = document.querySelector("#element > .row:nth-of-type("+i+") > .title").textContent;
if ( title == "title x" ) {
document.querySelector("#element > .row:nth-of-type("+i+") > .button > a").click();
//wait for 5sec to load next page
var content = document.querySelector("#message").textContent.trim();
if (content == "my content" ) {
return true;
}
}
}
}
如果我没有插入延迟,第9行(var content)会返回错误TypeError: Cannot read property 'textContent' of null
这里有什么帮助吗? 感谢
答案 0 :(得分:0)
网页没有没有服务器和数据库,cookie或localStorage的状态,因此如果您尝试执行setTimout并重新加载页面,您将丢失状态并且函数将不会触发。
您需要使用 localStorage 之类的内容来保存页面加载之间的状态。检查您的州的价值,并在页面加载时采取适当的措施。
var myelement = "click button here";
// this will be run on page load
// if the localStorage.content is set you have passed from the previous page
if (localStorage.content) {
// check the value
if (content == "my content") {
console.log(localStorage.content, true)
// reset the localStorage value
localStorage.removeItem('content')
}
}
if (myelement.indexOf("click") >= 0) {
for (var i = 1; i <= 4; i++)(function(i) {
title = document.querySelector("#element > .row:nth-of-type(" + i + ") > .title").textContent;
if (title == "title x") {
document.querySelector("#element > .row:nth-of-type(" + i + ") > .button > a").click();
// set the localStorage value for the next page load
localStorage.content = document.querySelector("#message").textContent.trim();
window.location.href = '/somewhere-else'
}
})(i)
}
答案 1 :(得分:0)
不要使用 setTimeout ,它在循环中效果不佳。因此,请使用 sleep ,这在以下
中实现if(isset($_POST['search'])){
$sql = 'SELECT * FROM sales';
$where = array();
$params = array();
if (!empty($_POST['startdate']) && !empty($_POST['enddate'])) {
$where[] = "submitdate BETWEEN :a AND :b";
$params[':a'] = $_POST['startdate'];
$params[':b'] = $_POST['enddate'];
}
if (!empty($_POST['recordstatus'])) {
$where[] = "status = :status";
$params[':status'] = $_POST['recordstatus'];
}
if(count($where) > 0)
$sql .= ' WHERE ' . implode('AND', $where);
$stmt = $DB_con->prepare($sql);
foreach($params as $param => $value) {
$stmt->bindParam($param, $value);
}
$stmt->execute();
for($i=0; $row = $stmt->fetch(); $i++) {
echo $row ['submitdate'];
echo $row['status'];
}
因此,在循环中,您可以使用我刚刚为您创建的function sleep(mills){
var t=new Date().getTime(); // Store current Time;
while((new Date().getTime()-t)<mills);
}
函数。