PHP WebDriver là gì?

Trong bài đăng này, chúng ta sẽ khám phá một số điều cơ bản về thử nghiệm chấp nhận của người dùng với Selenium. Chúng tôi sẽ thực hiện việc này với khung thử nghiệm đơn vị cổ điển PHPUnit, trình duyệt web Firefox và với thư viện php-webdriver mới do Facebook phát triển gần đây

Selenium cho phép chúng tôi ghi lại các hành động của người dùng mà chúng tôi thực hiện bên trong trình duyệt và sau đó tự động hóa chúng. PHPUnit sẽ được sử dụng để thực hiện các xác nhận khác nhau và kiểm tra xem chúng có ngụy biện không. Và

php composer.phar install
5 được sử dụng để kết nối PHP với Selenium, để thực hiện thao tác trình duyệt trong PHP

Có thể bạn đã biết, bản thân PHPUnit có thể thực hiện các thao tác Selenium thông qua PHPUnit. Có phần mở rộng PHPUnit_Selenium bạn có thể sử dụng. Thay vào đó, chúng tôi sẽ sử dụng php-webdriver vì triển khai này hiện đại và API của nó sạch hơn và trông giống như API Java Selenium gốc. Đó là lý do tại sao nó dễ học hơn và mạnh hơn nhiều so với PHPUnit. Ví dụ: nó cho phép bạn sử dụng gửi các sự kiện chạm gốc, điều này rất quan trọng trong thời đại của các ứng dụng web sẵn sàng cho thiết bị di động

Lấy các công cụ

Hãy cài đặt tất cả các công cụ cần thiết bằng Composer. Đối với điều này, chúng tôi sẽ cần tạo tệp

php composer.phar install
6

{
    "require-dev": {
        "phpunit/phpunit": "*",
        "facebook/webdriver": "dev-master"
    }
}

Chúng tôi sẽ không phát triển bất kỳ ứng dụng nào, vì vậy chúng tôi ổn, chỉ với phần

php composer.phar install
7. Hãy chạy

php composer.phar install

và lấy các phiên bản mới nhất của cả hai thư viện. Chúng tôi cũng sẽ cần máy chủ Selenium có thể thực thi được. Bạn cần cài đặt Java để chạy máy chủ Selenium. Bạn có thể khởi chạy nó bằng cách chạy cái này

java -jar selenium-server-standalone-2.37.0.jar

Và khi các công cụ đã được chuẩn bị, hãy viết một số bài kiểm tra

Kiểm tra đơn vị PHP

Vì vậy, hãy thử kiểm tra một cái gì đó trên web. Hãy bắt đầu với thứ gì đó đơn giản và nổi tiếng, như Github. Vì vậy, hãy tạo một tệp và đặt tên nó là

php composer.phar install
8


class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>

Như bất kỳ bài kiểm tra PHPUnit nào, nó sẽ mở rộng

php composer.phar install
9 (như đã đề cập, chúng tôi không sử dụng PHPUnit_Extensions_Selenium2TestCase ở đây). Đối với mọi thử nghiệm, chúng tôi sẽ cần khởi chạy trình duyệt, hay nói cách khác, chúng tôi đang bắt đầu phiên Selenium. Điều này được thực hiện bằng cách tạo phiên bản
java -jar selenium-server-standalone-2.37.0.jar
0


class GitHubTests extends PHPUnit_Framework_TestCase {

    /**
     * @var \RemoteWebDriver
     */
    protected $webDriver;

	public function setUp()
    {
        $capabilities = array(\WebDriverCapabilityType::BROWSER_NAME => 'firefox');
        $this->webDriver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
    }

}
?>

Phần khởi tạo này được lấy từ file php-webdriver README. Chúng tôi chưa có bất kỳ bài kiểm tra nào, vì vậy hãy viết một cái gì đó rất cơ bản. Cái gì đó như. “Nếu tôi mở https. //github. com, tiêu đề trang phải chứa GitHub”


class GitHubTest extends PHPUnit_Framework_TestCase {

    /**
     * @var \RemoteWebDriver
     */
    protected $webDriver;

	public function setUp()
    {
        $capabilities = array(\WebDriverCapabilityType::BROWSER_NAME => 'firefox');
        $this->webDriver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
    }

    protected $url = 'https://github.com';

    public function testGitHubHome()
    {
        $this->webDriver->get($this->url);
        // checking that page title contains word 'GitHub'
        $this->assertContains('GitHub', $this->webDriver->getTitle());
    }    

}
?>

Bây giờ chúng tôi thực hiện thử nghiệm đầu tiên của mình với phpunit

vendor/bin/phpunit GitHubTest.php

và trong vài giây, chúng ta sẽ thấy một cửa sổ Firefox có Trang Github trong đó

PHP WebDriver là gì?

vui lòng chú ý văn bản WebDriver trong thanh trạng thái, điều này cho bạn biết rằng cửa sổ trình duyệt này được kiểm soát bởi WebDriver

Trong bảng điều khiển, chúng ta sẽ thấy đầu ra này

PHPUnit 3.7.28 by Sebastian Bergmann.


.

Time: 19.44 seconds, Memory: 1.75Mb

OK (1 test, 1 assertion)

Chúng tôi sẽ thấy rằng thử nghiệm đã kết thúc, nhưng cửa sổ trình duyệt vẫn mở. Đó là bởi vì chúng tôi đã không triển khai phương pháp

java -jar selenium-server-standalone-2.37.0.jar
1, phương pháp này sẽ được sử dụng để đóng phiên webdriver


class GitHubTest extends PHPUnit_Framework_TestCase {

    /**
     * @var \RemoteWebDriver
     */
    protected $webDriver;

	public function setUp()
    {
        $capabilities = array(\WebDriverCapabilityType::BROWSER_NAME => 'firefox');
        $this->webDriver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
    }

    public function tearDown()
    {
        $this->webDriver->quit();
    }
}
?>

Kiểm tra nâng cao

Chúng tôi đã không chạm vào bất kỳ thành phần trang nào trong thử nghiệm trước đó. Chúng tôi vừa mở trang và kiểm tra tiêu đề của nó. Nhưng sức mạnh của webdriver tiết lộ khi bạn muốn nhấp vào các phần tử, điền vào biểu mẫu, kéo và thả các phần tử, v.v. Đó là lý do tại sao chúng tôi sẽ viết một bài kiểm tra thể hiện một số tính năng này

Nhưng làm thế nào có thể kiểm soát trình duyệt? . WebDriver cho phép chúng tôi định vị phần tử trên trang theo ID, tên lớp, tên phần tử, CSS hoặc XPath. Hãy liệt kê tất cả các loại định vị có thể, được lấy từ lớp

java -jar selenium-server-standalone-2.37.0.jar
2

  • java -jar selenium-server-standalone-2.37.0.jar
    3 - tìm kiếm phần tử theo lớp CSS của nó
  • java -jar selenium-server-standalone-2.37.0.jar
    4 - tìm kiếm phần tử bằng bộ chọn CSS của nó (như jQuery)
  • java -jar selenium-server-standalone-2.37.0.jar
    5 - tìm kiếm phần tử theo id của nó
  • java -jar selenium-server-standalone-2.37.0.jar
    6 - tìm kiếm một liên kết có văn bản hiển thị bằng với giá trị được cung cấp
  • java -jar selenium-server-standalone-2.37.0.jar
    7 - giống như trên, nhưng liên kết chứa một phần giá trị
  • java -jar selenium-server-standalone-2.37.0.jar
    8 - tìm kiếm phần tử theo tên thẻ của nó
  • java -jar selenium-server-standalone-2.37.0.jar
    9 - tìm kiếm phần tử bằng xpath. Cách phức tạp nhất nhưng hiệu quả nhất cho vị trí phần tử

Để tìm phần tử, chúng ta nên sử dụng phương pháp


class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>
0, với bộ định vị được chỉ định bằng
java -jar selenium-server-standalone-2.37.0.jar
2

Sau khi tìm thấy phần tử phù hợp, chúng ta có thể nhấp vào phần tử đó. Như thế này


class GitHubTest extends PHPUnit_Framework_TestCase {

    /**
     * @var \RemoteWebDriver
     */
    protected $webDriver;

	public function setUp()
    {
        $capabilities = array(\WebDriverCapabilityType::BROWSER_NAME => 'firefox');
        $this->webDriver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
    }

    public function tearDown()
    {
        $this->webDriver->close();
    }

    public function testSearch()
    {
        $this->webDriver->get($this->url);
        // find search field by its id
        $search = $this->webDriver->findElement(WebDriverBy::id('js-command-bar-field'));
        $search->click();
	}    
}
?>

PHP WebDriver là gì?

Chúng tôi đang nhấp vào trường tìm kiếm toàn cầu GitHub, nằm ở thanh menu trên cùng, khớp với id của nó. Nhân tiện, làm thế nào chúng ta có được id của phần tử? . Tìm kiếm bộ định vị phần tử là nhiệm vụ quan trọng nhất trong thử nghiệm chấp nhận. Đối với mọi bài kiểm tra, chúng tôi cần lấy các yếu tố liên quan đến nó. Hãy chỉ ra một số thủ thuật đơn giản chắc chắn sẽ giúp bạn viết các bài kiểm tra chấp nhận phức tạp

yếu tố định vị. Mẹo & Thủ thuật

Điều đầu tiên chúng ta có thể làm là tạm dừng việc thực hiện kiểm thử. Trong khi cửa sổ trình duyệt vẫn đang mở, chúng ta có thể sử dụng nó để tìm định vị. Để tạm dừng thực hiện kiểm tra, hãy viết phương thức trợ giúp này bên trong một lớp kiểm tra

php composer.phar install
0

Nếu chúng tôi sử dụng nó ở đâu đó trong các thử nghiệm của mình, PHPUnit sẽ đợi phím


class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>
2 được nhấn trong bảng điều khiển trước khi tiếp tục

php composer.phar install
1

Bây giờ khi cửa sổ trình duyệt được mở, chúng tôi có thể tự do tìm kiếm phần tử cần thiết mà không cần vội vàng. Chúng tôi đang sử dụng Công cụ dành cho nhà phát triển Firefox cho việc đó. Với Trình kiểm tra phần tử bên trong, chúng ta có thể trỏ đến phần tử và nhận bộ định vị CSS duy nhất của nó

PHP WebDriver là gì?

Đó là cách chúng tôi có id trường tìm kiếm.


class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>
3. Thực hiện các bước mẫu, hãy tiếp tục viết bài kiểm tra của chúng tôi và tìm kho lưu trữ
php composer.phar install
5 trên GitHub

php composer.phar install
2

Nếu chúng tôi chạy thử nghiệm này, chúng tôi sẽ thấy rằng nó không thành công ở bước cuối cùng

PHP WebDriver là gì?

Đó là bởi vì chúng tôi quên rằng GitHub sử dụng


class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>
5 theo mặc định và GitHub là một công ty chứ không phải một tổ chức phi lợi nhuận (như chúng tôi từng nghĩ về nó, he-he). Mặc dù vậy, hãy thay đổi url dự kiến ​​thành 'https. //github. com/facebook/php-webdriver’ và xem bài kiểm tra đã vượt qua chưa

Phần tử không tìm thấy

Có lẽ chúng tôi cũng sẽ muốn kiểm tra xem phần tử có nằm trên một trang không. Nếu chúng tôi đang sử dụng


class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>
6 của PHPUnit, chúng tôi sẽ có một số xác nhận thú vị mà chúng tôi có thể sử dụng cho mục đích đó. Trong trường hợp thư viện php-webdriver, chúng tôi sẽ cần tự triển khai chúng. Nhưng điều đó khá dễ dàng. Php-Webdriver đưa ra nhiều ngoại lệ khác nhau mà chúng ta có thể xử lý và chuyển đổi thành các xác nhận của PHPUnit

php composer.phar install
3

Bạn có thể tạo xác nhận tương tự theo cách tương tự

Chúng tôi sẽ sử dụng phương pháp


class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>
7 mới được tạo để kiểm tra xem không có hình đại diện người dùng nào trên trang “facebook/php-webdriver”

php composer.phar install
4

tái cấu trúc

Để làm sạch một số thứ, chúng tôi sẽ tách các phương pháp kiểm tra và phương pháp hỗ trợ. Bạn nên chuyển xác nhận tùy chỉnh thành đặc điểm.


class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>
8. Và trình chuyển đổi tạm dừng

class GitHubTests extends PHPUnit_Framework_TestCase {
}
?>
9 có thể được chuyển sang đặc điểm

class GitHubTests extends PHPUnit_Framework_TestCase {

    /**
     * @var \RemoteWebDriver
     */
    protected $webDriver;

	public function setUp()
    {
        $capabilities = array(\WebDriverCapabilityType::BROWSER_NAME => 'firefox');
        $this->webDriver = RemoteWebDriver::create('http://localhost:4444/wd/hub', $capabilities);
    }

}
?>
0. Chúng tôi có thể kích hoạt đặc điểm này trong một lớp kiểm tra, khi chúng tôi phát triển một bài kiểm tra và tắt nó đi sau khi chúng tôi hoàn thành

Dự án demo hoàn chỉnh, sau khi tái cấu trúc cơ bản này, bạn có thể tìm thấy trên GitHub

Còn Codeception thì sao?

Vì vậy, bạn đã nhận thấy rằng đây là blog Codeception. Nhưng chúng tôi hoàn toàn không sử dụng Codeception framework trong hướng dẫn này. Chắc chắn, chúng ta cần đề cập rằng Codeception bao gồm thư viện php-webdriver và mô-đun WebDriver ngay từ phiên bản 1. 7. Trong Codeception, bạn có thể thực hiện tất cả các thao tác trên web theo cách đơn giản hơn nhiều bằng API WebGuy. Nếu bạn sử dụng Codeception, bạn không cần triển khai các xác nhận WebDriver của riêng mình cũng như không cần viết mã soạn sẵn

kết luận

Bất kể bạn có đang sử dụng Codeception hay không, bạn nên hiểu cách thực hiện thử nghiệm chấp nhận dựa trên trình duyệt chỉ bằng cách sử dụng chính php-webdriver. Thư viện Php-webdriver cung cấp các API rất rõ ràng và linh hoạt mà bạn sẽ thích làm việc với

PHP là ngôn ngữ phổ biến để phát triển web, nhưng không phải để kiểm tra web. Các kỹ sư tự động hóa thử nghiệm thích Java và Ruby hơn nó. Và có một lý do nghiêm trọng cho điều đó. Không có thứ gọi là “liên kết Selenium chính thức” cho PHP, tôi. e. không có thư viện máy khách Selenium cho PHP được tạo bởi nhóm Selenium. Các nhà phát triển của php-webdriver tiến rất gần đến các API máy khách Selenium chính thức. Đó là lý do tại sao bạn nên sử dụng php-webdriver - nó thực sự cảm thấy và hoạt động giống như các thư viện Selenium gốc và chính thức. Điều đó đặc biệt quan trọng nếu bạn có kinh nghiệm viết các bài kiểm tra chấp nhận bằng Java hoặc Ruby. Chuyển sang PHP không khó lắm, khi tất cả các API đều giống nhau

WebDriver dùng để làm gì?

Selenium WebDriver là một khung web cho phép bạn thực hiện kiểm tra trên nhiều trình duyệt. Công cụ này được sử dụng để tự động kiểm tra ứng dụng dựa trên web để xác minh rằng ứng dụng đó hoạt động như mong đợi . Selenium WebDriver cho phép bạn chọn ngôn ngữ lập trình để tạo test script.

Làm cách nào để sử dụng Selenium WebDriver trong PHP?

Bắt đầu với Kiểm tra Selenium bằng PHP. .
Bước 1. Cài đặt Xampp. .
Bước 2. Tải xuống Selenium PHP Binding và giải nén nó vào thư mục htdocs. .
Bước 3. Cài đặt bất kỳ IDE nào. .
Bước 4. Tải xuống và cài đặt trình điều khiển trình duyệt. .
Bước 5. Tải xuống máy chủ Selenium. .
Bước 6. Tạo bài kiểm tra

WebDriver nói một cách đơn giản là gì?

Đó là khung tự động hóa web cho phép chúng tôi thực hiện thử nghiệm trên nhiều trình duyệt khác nhau . Nó có thể thực hiện nhiều bài kiểm tra trên nhiều trình duyệt trên nhiều hệ điều hành. WebDriver cho phép viết tập lệnh thử nghiệm trong Linux và chạy nó trong Windows.

WebDriver có giống với Selenium không?

Giới thiệu Selenium IDE so với WebDriver . Để so sánh, Selenium IDE là một plug-in trình duyệt được thiết kế để ghi và phát lại các bài kiểm tra. Selenium WebDriver is a code library of APIs for controlling browsers. In comparison, Selenium IDE is a browser plug-in designed for recording and playing back tests.