This commit is contained in:
Tiệp Sunflower
2023-03-06 14:23:39 +07:00
commit aa9c76c82f
2234 changed files with 449471 additions and 0 deletions

340
test/Untitled-1.html Normal file
View File

@@ -0,0 +1,340 @@
<div class="blog-ver-2020">
<div class="container">
<div id="breadcrumb">
<ol class="ul clearfix" itemscope itemtype="http://schema.org/BreadcrumbList">
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<a href="/" itemprop="item" class="nopad-l">
<span itemprop="name"><span style="font-size: 0px">Home</span><i
class="icon icon-home"></i></span>
</a>
<meta itemprop="position" content="1" />
</li>
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<a href="/tin-tuc" itemprop="item" class="nopad-l">
<span itemprop="name"> Tin tức </span>
</a>
<meta itemprop="position" content="2" />
</li>
{if="isset($article_detail.categoryInfo)"}
<li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<a href="{$article_detail.categoryInfo.0.request_path}" itemprop="item" class="nopad-l">
<span itemprop="name">
{$article_detail.categoryInfo.0.name}
</span>
</a>
<meta itemprop="position" content="3" />
</li>
{/if}
</ol>
</div>
</div>
<div class="bg-white p-3">
<div class="container">
<div class="row">
<div class="col-8 detail-content">
<div class="detail-head">
<h1>
{$article_detail.title}
</h1>
<span class="rage-date">
Từ
{if="$article_detail.article_time != '' "} {$article_detail.article_time}
{else} {$article_detail.lastUpdate}
{/if}
</span>
<div class="author">
<img src="{#IMAGE_PATH#}img-author.png" alt="">
<span>
by <b>ANPHAT</b> <i class="fa fa-minus"></i> {$article_detail.lastUpdate}
</span>
</div>
</div>
<div class="emtry-detail d-flex">
<div class="share">
<!-- Go to www.addthis.com/dashboard to customize your tools -->
<div class="addthis_inline_share_toolbox_883r"></div>
</div>
<div class="article-detail content nd overflow-hidden" id="find_toc">
<div id="first-paragraph"></div>
{$article_detail.content}
</div>
</div>
<div class="blog-comnent">
<div id="respond" class="comment-respond">
<h3 id="reply-title" class="comment-reply-title">
Trả lời
</h3>
<form method="post" enctype="multipart/form-data" onsubmit="return check_news_comment()"
id="commentform" class="comment-form">
<input type=hidden name='user_post[item_type]' value='article' />
<input type=hidden name='user_post[item_id]' value='{$article_detail.id}' />
<input type=hidden name='user_post[item_title]' value='{$article_detail.title}' />
<input type=hidden name='user_post[rate]' value='0' />
<input type=hidden name='user_post[title]' value='{$article_detail.title}' />
<input type=hidden name='user_post[user_email]' value='{$customer_info.email}' />
<input type=hidden name='user_post[user_name]' value='{$customer_info.name}' />
<input type=hidden name='user_post[user_avatar]' value='0' />
<p class="comment-notes"><span id="email-notes">Email của bạn sẽ không được hiển thị
công khai.</span> Các trường bắt buộc được đánh dấu <span
class="required">*</span></p>
<p class="comment-form-comment">
<label for="blog-comment">Bình luận</label>
<textarea id="blog-comment" name="comment" cols="45" rows="8"
maxlength="65525"></textarea>
</p>
<p class="comment-form-author">
<label for="blog-author">Tên <span class="required">*</span></label>
<input id="blog-author" name="author" type="text" value="" size="30"
maxlength="245">
</p>
<p class="comment-form-email">
<label for="blog-email">Email <span class="required">*</span></label>
<input id="blog-email" name="email" type="text" value="" size="30" maxlength="100"
aria-describedby="email-notes">
</p>
<p class="comment-form-url">
<label for="blog-url">Trang web</label>
<input id="blog-url" name="url" type="text" value="" size="30" maxlength="200">
</p>
<!-- <p class="comment-form-cookies-consent">
<input id="cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes">
<label for="cookies-consent">Lưu tên của tôi, email, và trang web trong trình duyệt này cho lần bình luận kế tiếp của tôi.</label>
</p> -->
<p class="form-submit">
<input name="submit" type="submit" id="submit" class="submit" value="Phản hồi">
</p>
</form>
</div>
{if="sizeof($comment_list) > 0"}
{loop="comment_list"}
<div class="item_comment {if=" $counter==0"}first{/if}">
<div class="comment_left">
{if="strlen($value.user_avatar)
< 3"} <img src="{#IMAGE_PATH#}noavatar.jpg" alt="avatar" />
{else}
<img src="{$value.user_avatar}" alt="avatar" />
{/if}
</div>
<div class="comment_right">
<div class="comment-name">
<span>{$value.user_name}</span>
{if="$value.is_user_admin == 1"}<i
class="note">Adminitrastor</i>{else}<!--<i class="icon-star star{$value.rating}"></i>-->{/if}
</div>
<p>{$value.content}</p>
{if="$value.is_user_admin == 1 || $value.approved == 1"}
<div class="info_feeback">
<span style="color:#888;">({$value.post_time|show_datetime_from_unix})</span>
</div>
{/if}
<!--{$user_reply = $value.user_name}-->
{if="$value.reply_count > 0 "}
{loop="$value.reply_list"}
<div class="item_reply">
<div class="comment_left">
{if="strlen($value.user_avatar)
< 3 && 1<2"} <img src="{#IMAGE_PATH#}noavatar.jpg" alt="avatar" />
{else}
<img src="{$value.user_avatar}" alt="avatar" />
{/if}
</div>
<div class="comment_right">
<div class="comment-name">
<span>{$value.user_name}</span>
{if="$value.is_user_admin == 1"}<i class="note">QUẢN TRỊ VIÊN</i>{/if}
</div>
<p>{$value.content}</p>
{if="$value.is_user_admin == 1 || $value.approved == 1"}
<div class="info_feeback">
<span style="color:#888">({$value.post_time|show_datetime_from_unix})</span>
<span style="color:#26a159;"><img src="{#IMAGE_PATH#}icon_like.png"
alt="like" />&nbsp;{$value.people_like_count}</span>
</div>
{/if}
</div><!--comment_right-->
<div class="clear"></div>
{/loop}
</div>
{/if}
</div>
<!--comment_right-->
<div class="clear"></div>
</div>
<!--item_reply-->
{/loop}
{/if}
</div>
</div>
<div class="col-4 detail-slidebar">
<div class="box-new">
<a data-count="1" class="title-theme" href="#">
Tin mới nhất
</a>
<div class="item-sidebar border-bottom">
{loop="$new_article_list"}
{if="$counter==0"}
<div class="blog-item">
<a href="{$value.url}" class="b-img">
<img src="{$value.image.original}" alt="{$value.title}">
</a>
<a href="{$value.url}" class="b-link">
{$value.title}
</a>
<div class="other-view">
<span class="b-author">
By <a href="{$value.url}">{$value.lastUpdateByUser}</a>
</span>
<time>
<i class="fa fa-clock-o"></i>
{$value.lastUpdate}
</time>
<span class="comment">
<i class="fa fa-comment"></i>
{$value.review_count}
</span>
<span class="view">
<i class="fa fa-eye"></i>
{$value.visit}
</span>
</div>
<p>
{|subString:$value.summary,200}
</p>
</div>
{/if}
{/loop}
</div>
<div class="list-blog">
{loop="$new_article_list"}
{if="$counter>0&&$counter<4"} <div class="blog-item">
<div class="d-flex">
<a href="{$value.url}" class="b-img pr-3"
style="-ms-flex: 0 0 40%;flex: 0 0 40%;max-width: 40%;">
<img src="{$value.image.original}" alt="{$value.title}">
</a>
<div class="left"
style=" -ms-flex-preferred-size: 0;flex-basis: 0;-ms-flex-positive: 1;flex-grow: 1;max-width: 100%;">
<a href="{$value.url}" class="b-link">
{$value.title}
</a>
<div class="other-view">
<time>
<i class="fa fa-clock"></i>
{$value.lastUpdate}
</time>
<span class="comment">
<i class="fa fa-comment"></i>
{$value.review_count}
</span>
<span class="view">
<i class="fa fa-eye"></i>
{$value.visit}
</span>
</div>
</div>
</div>
</div>
{/if}
{/loop}
</div>
<div class="box-top">
<div data-count="2" class="title-theme">
bài viết nhiều người xem
</div>
<div class="list-blog">
{loop="$top_article_list"}
{if="$counter<4"} <div class="blog-item">
<a href="{$value.url}" class="b-img">
<img src="{$value.image.original}" alt="{$value.title}">
</a>
<a href="{$value.url}" class="b-link">
{$value.title}
</a>
<div class="other-view">
<span class="b-author">
By <a href="{$value.url}">{$value.lastUpdateByUser}</a>
</span>
<time>
<i class="fa fa-clock-o"></i>
{$value.lastUpdate}
</time>
<span class="comment">
<i class="fa fa-comment"></i>
{$value.review_count}
</span>
<span class="view">
<i class="fa fa-eye"></i>
{$value.visit}
</span>
</div>
<p>
{|subString:$value.summary,200}
</p>
</div>
{/if}
{/loop}
</div>
<div class="box-product">
<div data-count="2" class="title-theme">
sản phẩm bán chạy nhất
</div>
<div class="product-list-sidebar" id="blog-2020-prods">
</div>
</div>
{if="sizeof($article_detail.related.product) > 0 "}
<div class="box-product">
<h4 data-count="2" class="title-theme">
sản phẩm liên quan
</h4>
<div class="product-list-sidebar">
{loop="$article_detail.related.product"}
<div class="ps-item">
<a href="{$value.productUrl}" class="ps-img">
<img src="{$value.productImage.large}" alt="{$value.productName}">
{if="$value.marketPrice > $value.price && $value.price > 0"}
{$discount = ceil(100 - $value.price*100/$value.marketPrice)}
<div class="icons_ps p-discount-ps">-{$discount}%</div>
{/if}
</a>
<div class="entry-ps">
<p class="p-row"><span class="p-rate-ps"><i
class="icons_ps icon-p-rate icon-p-rate_{$value.rating}"></i>({$value.reviewCount})</span>
<span class="p-sku">Mã SP : {$value.productSKU}</span>
</p>
<a href="{$value.productUrl}" class="p-name-ps">{$value.productName} </a>
<span class="p-price-ps">{$value.price|format_price} đ</span>
<span class="p-old-price-ps">{if="$value.marketPrice > 0
"}{$value.marketPrice|format_price} đ {/if}</span>
{if="sizeof($value.specialOffer)>0"}
<!--{$countKmai = 0}
{loop="$value.specialOffer"}
{$countKmai ++}
{/loop} -->
<span class="p-total-offer-ps">
{$countKmai} khuyến mãi
</span>
{/if}
</div>
</div>
{/loop}
</div>
</div>
{/if}
</div>
</div>
</div>
</div>
</div>

204
test/add_to_cart.js Normal file
View File

@@ -0,0 +1,204 @@
// ====== ** Thay đổi thông tin test ở đây ** ======
// Trình duyệt test
const Browser = 'chrome'; // Lựa chọn: chrome, firefox
const DOMAIN = "https://demopc8.hurasoft.com/?show_template=xstore"; // Tên miền
var text_search = 'case'; // Từ khóa tìm kiếm
var productNameClass = '.p-name'; // Class chứa url sản phẩm
var buttonAddProductId = '#add_to_cart' // Id/class nút thêm sp vào giỏ ở trang chi tiết sản phẩm
// Thông tin người dùng, sử dụng để nhập vào form: Mua hàng, đăng ký, đăng nhập, bình luận,.....
var user_name = 'Test giỏ hàng'; // ==== Tên
var user_email = 'test@mail.com'; // ==== Email
var user_mobile = '0987654321'; // ==== Số điện thoại
var user_address = 'Số 3 ngõ 18 Yên Lãng'; // ==== Địa chỉ
var user_province = 'Hà Nội'; // ==== Tỉnh/Thành phố
var user_district = 'Quận Đống Đa'; // ==== Quận/Huyện
var user_ward = 'Phường Láng Hạ'; // ==== Phường/Xã
var user_content = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.'; // Nội dung
// ============================================================================================================
// ==================================== ** KHÔNG THAY ĐỔI ** ====================================
const { Builder, By, Select, until, implicitlyWait } = require("selenium-webdriver");
const { Driver } = require("selenium-webdriver/chrome");
require('chromedriver');
require('selenium-webdriver/chrome');
(async function AddToCartTest() {
let driver = await new Builder().forBrowser(Browser).build();
try {
// Setup
await driver.get(DOMAIN);
await driver.manage().window().maximize();
await driver.manage().setTimeouts({ implicit: 3000, pageLoad: 3000, script: 3000 })
driver.executeScript(`
var jquery_script = document.createElement('script');
jquery_script.src = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js';
document.getElementsByTagName('head')[0].appendChild(jquery_script);
`)
driver.executeScript('$ = window.jQuery;'); // Load jQuery
// == End Setup
// 1. Header: Tìm kiếm sp
var input_search = await driver.findElement(By.xpath("//input[@name='q']"));
await testSearchWeb(driver, text_search, input_search).then(function redirectProductDetail() {
goToProductDetail(driver, productNameClass);
});
// 2. Chi tiết sp: Thêm sp vào giỏ
await driver.wait(until.elementLocated(By.css(buttonAddProductId))).click();
// 3. Giỏ hàng: Gửi đơn hàng
await submitCartForm(driver);
} finally {
checkListWeb(driver);
setTimeout(() => {
driver.quit();
}, 5000)
}
})();
// == Header: Test hiển thị danh sách sản phẩm tìm kiếm
async function testSearchWeb(driver, text_search, input_search) {
await driver.actions()
.move({ origin: input_search })
.pause(1000)
.doubleClick()
.sendKeys(text_search)
.pause(2000)
.perform();
await driver.findElement(By.xpath("//button[@type='submit']")).click(); //== Kiểm tra đến trang tìm kiếm
await checkListWeb(driver);
}
// == Ô sản phẩm: Điều hướng đến trang chi tiết sản phẩm
async function goToProductDetail(driver, productNameClass) {
var productUrl = driver.findElement(By.css(productNameClass));
await driver.actions()
.move({ origin: productUrl })
.pause(1000)
.press()
.perform();
await productUrl.click();
await checkListWeb(driver);
}
// == Giỏ hàng: Nhập thông tin người dùng và gửi
async function submitCartForm(driver) {
await driver.findElement(By.xpath("//input[@name='user_info[name]']")).sendKeys(user_name);
await driver.findElement(By.xpath("//input[@name='user_info[email]']")).sendKeys(user_email);
await driver.findElement(By.xpath("//input[@name='user_info[mobile]']")).sendKeys(user_mobile);
await driver.findElement(By.xpath("//input[@name='user_info[address]']")).sendKeys(user_address);
await new Select(driver.findElement(By.xpath("//select[@name='user_info[province]']"))).selectByVisibleText(user_province);
await new Select(driver.findElement(By.xpath("//select[@name='user_info[district]']"))).selectByVisibleText(user_district);
await new Select(driver.findElement(By.xpath("//select[@name='user_info[ward]']"))).selectByVisibleText(user_ward);
await driver.findElement(By.css("form[action='/send-cart']")).submit();
await checkListWeb(driver);
}
// Hiển thị bảng danh sách test
async function checkListWeb(driver) {
await driver.executeScript(CreateTableCheck);
await driver.executeScript(checkSearch, check_list);
await driver.executeScript(checkAddCart, check_list);
await driver.executeScript(checkSendCart, check_list);
}
function CreateTableCheck() {
var table_container = document.createElement('div');
table_container.id = 'js-table-container';
document.body.appendChild(table_container);
$("#js-table-container").html(`
<style>#js-table-check td, #js-table-check th {border: 1px solid #ccc;padding: 7px 10px;}</style>
<div id="js-table-check" style="position:fixed;left:10px;bottom:50px;z-index: 999;background:#fff;box-shadow:0 1px 5px rgb(0 0 0 / 30%);padding:10px;">
<table>
<thead>
<tr align="center"><th>Danh sách</th> <th>Trạng thái</th></tr>
</thead>
<tbody> <!-- //check list --> </tbody>
</table>
</div>
`);
}
var check_list = 'function checkListFormFunc(condition, results) {if (condition) {$("#js-table-check tbody").append(`<tr><td>${results}:</td> <td align="center" style="font-weight:700;color:green;">OK</td></tr>`)} else {$("#js-table-check tbody").append(`<tr><td>${results}:</td> <td align="center" style="font-weight:700;color:red;">FALSE</td></tr>`)}}';
var tableCheck = '$("#js-table-check")';
// ============= *** Danh sách kiểm tra *** =============
// Kiểm tra tìm kiếm
function checkSearch(check_list, text_search) {
eval(check_list);
var check_input = '';
var current_url = location.search;
if (current_url.includes = '?q=' + text_search || $('input[name="q"]').val() != '') {
check_input = 'ok';
}
checkListFormFunc(check_input !== '', 'Kiểm tra tìm kiếm sản phẩm')
}
// Kiểm tra thêm sản phẩm vào giỏ hàng
function checkAddCart(check_list) {
eval(check_list);
var current_url = location.pathname;
var check_quantity = '';
if (current_url == '/cart' || current_url == '/send-cart') {
check_quantity = 'ok';
}
checkListFormFunc(check_quantity !== '', 'Kiểm tra thêm sản phẩm vào giỏ hàng');
}
// Kiểm tra gửi đơn hàng
function checkSendCart(check_list) {
eval(check_list);
var check_sendCart = $('.content-send h1').text().trim();
var check_text = '';
if (check_sendCart == 'Đặt hàng thành công') {
check_text = 'Đặt hàng thành công'
}
checkListFormFunc(check_text !== '', 'Kiểm tra gửi đơn hàng');
}

52
test/check_form.js Normal file
View File

@@ -0,0 +1,52 @@
// ==================================== ** KHÔNG THAY ĐỔI ** ====================================
const { Builder, By, Select, until, implicitlyWait } = require("selenium-webdriver");
const { Driver } = require("selenium-webdriver/chrome");
require('chromedriver');
require('selenium-webdriver/chrome');
const Browser = 'chrome'; // Lựa chọn: chrome, firefox
const DOMAIN = "https://demopc8.hurasoft.com/lien-he?show_template=xstore"; // Tên miền
// Thông tin người dùng, sử dụng để nhập vào form: Mua hàng, đăng ký, đăng nhập, bình luận,.....
var user_name = 'Test Liên hệ'; // ==== Tên
var user_email = 'test@mail.com'; // ==== Email
var user_mobile = '0987654321'; // ==== Số điện thoại
var user_message = 'Test nội dung'; // ==== Nội dung
(async function AddToCartTest() {
let driver = await new Builder().forBrowser(Browser).build();
try {
await driver.get(DOMAIN);
await driver.manage().window().maximize();
await driver.manage().setTimeouts({ implicit: 3000, pageLoad: 3000, script: 3000 })
driver.executeScript(`
var jquery_script = document.createElement('script');
jquery_script.src = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js';
document.getElementsByTagName('head')[0].appendChild(jquery_script);
`)
driver.executeScript('$ = window.jQuery;'); // Load jQuery
await driver.findElement(By.id("contact_name_detail")).sendKeys(user_name);
await driver.findElement(By.id("contact_email_detail")).sendKeys(user_email);
await driver.findElement(By.id("contact_tel_detail")).sendKeys(user_mobile);
await driver.findElement(By.id("contact_message_detail")).sendKeys(user_message);
await driver.findElement(By.className("btn-red")).click();
}
finally {
setTimeout(() => {
//driver.quit();
}, 5000)
}
})();

24
test/searchTest.js Normal file
View File

@@ -0,0 +1,24 @@
const { Builder, By, Key } = require("selenium-webdriver");
require('chromedriver');
async function searchTest() {
let driver = await new Builder().forBrowser('chrome').build();
//
await driver.get("https://mialala.vn/")
// nhap text tìm kiếm
var text_search = 'Đồ ngủ';
await driver.findElement(By.id("js-global-seach")).sendKeys(text_search, Key.RETURN);
setInterval(() => {
driver.close()
}, 2000);
}
searchTest()

View File

@@ -0,0 +1 @@
Key.RETURN