Khung thử nghiệm Espresso - WebView
WebView là một dạng xem đặc biệt do android cung cấp để hiển thị các trang web bên trong ứng dụng. WebView không cung cấp tất cả các tính năng của một ứng dụng trình duyệt chính thức như chrome và firefox. Tuy nhiên, nó cung cấp quyền kiểm soát hoàn toàn đối với nội dung được hiển thị và hiển thị tất cả các tính năng android được gọi bên trong các trang web. Nó cho phép WebView và cung cấp một môi trường đặc biệt, nơi có thể dễ dàng thiết kế giao diện người dùng bằng công nghệ HTML và các tính năng gốc như máy ảnh và quay số một số liên lạc. Bộ tính năng này cho phép WebView cung cấp một loại ứng dụng mới được gọi là ứng dụng Kết hợp , trong đó giao diện người dùng được thực hiện bằng HTML và logic nghiệp vụ được thực hiện bằng JavaScript hoặc thông qua một điểm cuối API bên ngoài.
Thông thường, việc kiểm tra một WebView cần phải là một thách thức vì nó sử dụng công nghệ HTML cho các phần tử giao diện người dùng chứ không phải giao diện / chế độ xem người dùng gốc. Espresso vượt trội trong lĩnh vực này bằng cách cung cấp một tập hợp mới cho các trình so khớp web và xác nhận web, có chủ ý giống với các trình so khớp chế độ xem gốc và xác nhận chế độ xem. Đồng thời, nó cung cấp một cách tiếp cận cân bằng bằng cách bao gồm một môi trường thử nghiệm dựa trên công nghệ web.
Web Espresso được xây dựng dựa trên khung WebDriver Atom, được sử dụng để tìm và thao tác các phần tử web. Atom tương tự như các hành động xem. Atom sẽ thực hiện tất cả các tương tác bên trong một trang web. WebDriver hiển thị một tập hợp các phương thức được xác định trước, như findElement () , getElement () để tìm các phần tử web và trả về các nguyên tử tương ứng (để thực hiện hành động trong trang web).
Câu lệnh kiểm tra web chuẩn trông giống như đoạn mã dưới đây,
onWebView()
.withElement(Atom)
.perform(Atom)
.check(WebAssertion)
Đây,
onWebView () - Tương tự như onView (), nó cho thấy một bộ API để kiểm tra một WebView.
withElement () - Một trong số các phương thức được sử dụng để định vị các phần tử web bên trong trang web bằng cách sử dụng Atom và trả về đối tượng WebInteration, tương tự như ViewInteraction.
performance () - Thực thi hành động bên trong trang web bằng Atom và trả về WebInteraction.
check () - Điều này thực hiện xác nhận cần thiết bằng cách sử dụng WebAssertion.
Mã thử nghiệm web mẫu như sau,
onWebView()
.withElement(findElement(Locator.ID, "apple"))
.check(webMatches(getText(), containsString("Apple")))
Đây,
findElement () định vị một phần tử và trả về một Atom
webMatches tương tự như phương pháp so khớp
Viết đơn đăng ký mẫu
Hãy để chúng tôi viết một ứng dụng đơn giản dựa trên WebView và viết một trường hợp thử nghiệm bằng phương thức onWebView () . Làm theo các bước sau để viết một ứng dụng mẫu -
Khởi động Android studio.
Tạo dự án mới như đã thảo luận trước đó và đặt tên là MyWebViewApp .
Di chuyển ứng dụng sang khung AndroidX bằng Trình tái cấu trúc → Di chuyển sang menu tùy chọn AndroidX .
Thêm tùy chọn cấu hình bên dưới vào tệp AndroidManifest.xml để cấp quyền truy cập Internet.
<uses-permission android:name = "android.permission.INTERNET" />
Web Espresso được cung cấp dưới dạng một plugin riêng biệt. Vì vậy, hãy thêm phần phụ thuộc vào app / build.gradle và đồng bộ hóa nó.
dependencies {
androidTestImplementation 'androidx.test:rules:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-web:3.1.1'
}
Loại bỏ thiết kế mặc định trong hoạt động chính và thêm WebView. Nội dung của activity_main.xml như sau,
<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity">
<WebView
android:id = "@+id/web_view_test"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent" />
</RelativeLayout>
Tạo một lớp mới, ExtendedWebViewClient mở rộng WebViewClient và ghi đè phương thức shouldOverrideUrlLoading để tải hành động liên kết trong cùng một WebView ; nếu không, nó sẽ mở một cửa sổ trình duyệt mới bên ngoài ứng dụng. Đặt nó trong MainActivity.java .
private class ExtendedWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
Bây giờ, hãy thêm đoạn mã dưới đây vào phương thức onCreate của MainActivity . Mục đích của mã là tìm WebView , định cấu hình đúng cách và sau đó tải url đích.
// Find web view
WebView webView = (WebView) findViewById(R.id.web_view_test);
// set web view client
webView.setWebViewClient(new ExtendedWebViewClient());
// Clear cache
webView.clearCache(true);
// load Url
webView.loadUrl("http://<your domain or IP>/index.html");
Đây,
Nội dung của index.html như sau:
<html>
<head>
<title>Android Web View Sample</title>
</head>
<body>
<h1>Fruits</h1>
<ol>
<li><a href = "apple.html" id = "apple">Apple</a></li>
<li><a href = "banana.html" id = "banana">Banana</a></li>
</ol>
</body>
</html>
Nội dung của tệp apple.html được tham chiếu trong index.html như sau:
<html>
<head>
<title>Android Web View Sample</title>
</head>
<body>
<h1>Apple</h1>
</body>
</html>
Nội dung của tệp banana.html được tham chiếu trong banana.html như sau,
<html>
<head>
<title>Android Web View Sample</title>
</head>
<body>
<h1>Banana</h1>
</body>
</html>
Đặt index.html, apple.html và banana.html trong máy chủ web
Thay thế url trong phương thức loadUrl bằng url đã định cấu hình của bạn.
Bây giờ, hãy chạy ứng dụng và kiểm tra thủ công xem mọi thứ có ổn không. Dưới đây là ảnh chụp màn hình của ứng dụng mẫu WebView -
Bây giờ, hãy mở tệp ExampleIusalmentedTest.java và thêm quy tắc bên dưới:
@Rule
public ActivityTestRule<MainActivity> mActivityRule =
new ActivityTestRule<MainActivity>(MainActivity.class, false, true) {
@Override
protected void afterActivityLaunched() {
onWebView(withId(R.id.web_view_test)).forceJavascriptEnabled();
}
};
Tại đây, chúng tôi đã tìm thấy WebView và JavaScript được bật của WebView vì khung thử nghiệm web espresso hoạt động độc quyền thông qua công cụ JavaScript để xác định và thao tác phần tử web.
Bây giờ, hãy thêm trường hợp thử nghiệm để kiểm tra WebView của chúng tôi và hành vi của nó.
@Test
public void webViewTest(){
onWebView()
.withElement(findElement(Locator.ID, "apple"))
.check(webMatches(getText(), containsString("Apple")))
.perform(webClick())
.withElement(findElement(Locator.TAG_NAME, "h1"))
.check(webMatches(getText(), containsString("Apple")));
}
Ở đây, thử nghiệm được thực hiện theo thứ tự sau,
đã tìm thấy liên kết, apple sử dụng thuộc tính id của nó thông qua phương thức findElement () và kiểu liệt kê Locator.ID .
kiểm tra văn bản của liên kết bằng phương thức webMatches ()
thực hiện hành động nhấp vào liên kết. Nó mở trang apple.html .
lại tìm thấy phần tử h1 bằng cách sử dụng các phương thức findElement () và kiểu liệt kê Locator.TAG_NAME .
cuối cùng kiểm tra lại văn bản của thẻ h1 bằng phương thức webMatches () .
Cuối cùng, chạy test case bằng menu ngữ cảnh của studio android.