Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Codeception Acceptance test confused by overlaid tabs

Đang mở
#43 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
25/100
Loại issue
Lỗi
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Đình trệ
Công nghệ
php
Lĩnh vực
testing-qa

Hướng nghiên cứu

Bắt đầu với hành vi của module WebDriver đằng sau waitForElementVisible(), see(), click(), performOn() và clickWithRightButton() khi được sử dụng trên các tab chồng lên nhau. Nếu có thể, hãy tái hiện chuỗi thao tác đã báo cáo bằng một tab fixture tối thiểu; được xem là hoàn tất khi các bước kiểm tra khả năng hiển thị và thao tác nhấp luôn nhắm đến các phần tử đang hiển thị mà không cần workaround thủ công.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

What are you trying to achieve?

Run an Acceptance test on a set of tabs.

What do you get instead?

A variety of errors where $I can click on elements I can't see and can't see elements that I can click on.
Sometimes using performOn() solves the problem, sometimes it causes problems where see and click work.

I have four tabs (not browser tabs). They are overlaid except for the tab headings.
Each tab contains a button (in the same location) that reloads a grid.
In a loop, I select a tab by clicking on a heading then on the reload button, then perform a series of tests involving clicking and right-clicking on the grid.

All four tab heading are always visible, but after the first pass, Codeception considers them visible but can't see them. All selectors are unique in these examples.

$element = "#orphans-{$nameLower}s-reload";
$I->waitForElementVisible($element, 5);
// $I->see($element);  // fails
$I->click($element);

The test above works as is, but fails when I uncomment the second line.

/* Test Rename grid item /*
$I->clickWithRightButton("//div[text() = '" . oPageVariables::$namePrefix . $name . "']");
$I->waitForElement("//span[text() = 'Rename {$name}(s)']");
$I->see("//span[text() = 'Rename {$name}(s)']");
$I->click("//span[text() = 'Rename {$name}(s)']");  // fails

This is the opposite problem. All tests succeed except the last one.

Replacing some of these with performOn(), solves the problem in some cases, but in other cases, replacing working code with performOn() fails.

My suspicion is that elements and their characteristics are cached on page load and not not updated when a new tab is selected. It also appears that tab headings of non-active tabs are considered invisible after the first tab is selected.

All operations work perfectly when done manually. I can make all tests pass with a lot of fiddling but no change in the source or logic (so all selectors are correct). I'm just pointing out that in an app that works fine, acceptance test operations that should work, don't when there are overlaid tabs.

I wish I could provide example code, but the code operates in the main page of a CMS, so it's massive (mostly generated by ExtJS 3) and deeply nested. I don't think it would help.

There's nothing useful in the command-line run output, even with -vvv. It just shows which tests pass and which fail.

Details
  • Codeception version:

  • PHP Version: 2.5.2

  • Operating System: Windows 10

  • Installation type: Composer

  • List of installed packages (composer show)
    behat/gherkin v4.5.1 Gherkin DSL parser for PHP 5.3
    codeception/codeception 2.5.2 BDD-style testing framework
    codeception/phpunit-wrapper 7.6.1 PHPUnit classes used by Codeception
    codeception/stub 2.0.4 Flexible Stub wrapper for PHPUnit's Mock Builder
    doctrine/instantiator 1.1.0 A small, lightweight utility to instantiate object...
    facebook/webdriver 1.6.0 A PHP client for Selenium WebDriver
    guzzlehttp/guzzle 6.3.3 Guzzle is a PHP HTTP client library
    guzzlehttp/promises v1.3.1 Guzzle promises library
    guzzlehttp/psr7 1.5.2 PSR-7 message implementation that also provides co...
    myclabs/deep-copy 1.8.1 Create deep copies (clones) of your objects
    phar-io/manifest 1.0.3 Component for reading phar.io manifest information...
    phar-io/version 2.0.1 Library for handling version information and const...
    phpdocumentor/reflection-common 1.0.1 Common reflection classes used by phpdocumentor to...
    phpdocumentor/reflection-docblock 4.3.0 With this component, a library can provide support...
    phpdocumentor/type-resolver 0.4.0
    phpspec/prophecy 1.8.0 Highly opinionated mocking framework for PHP 5.3+
    phpunit/php-code-coverage 6.1.4 Library that provides collection, processing, and ...
    phpunit/php-file-iterator 2.0.2 FilterIterator implementation that filters files b...
    phpunit/php-text-template 1.2.1 Simple template engine.
    phpunit/php-timer 2.0.0 Utility class for timing
    phpunit/php-token-stream 3.0.1 Wrapper around PHP's tokenizer extension.
    phpunit/phpunit 7.5.1 The PHP Unit Testing framework.
    psr/http-message 1.0.1 Common interface for HTTP messages
    ralouphie/getallheaders 2.0.5 A polyfill for getallheaders.
    sebastian/code-unit-reverse-lookup 1.0.1 Looks up which function or method a line of code b...
    sebastian/comparator 3.0.2 Provides the functionality to compare PHP values f...
    sebastian/diff 3.0.1 Diff implementation
    sebastian/environment 4.0.1 Provides functionality to handle HHVM/PHP environm...
    sebastian/exporter 3.1.0 Provides the functionality to export PHP variables...
    sebastian/global-state 2.0.0 Snapshotting of global state
    sebastian/object-enumerator 3.0.3 Traverses array structures and object graphs to en...
    sebastian/object-reflector 1.1.1 Allows reflection of object attributes, including ...
    sebastian/recursion-context 3.0.0 Provides functionality to recursively process PHP ...
    sebastian/resource-operations 2.0.1 Provides a list of PHP built-in functions that ope...
    sebastian/version 2.0.1 Library that helps with managing the version numbe...
    symfony/browser-kit v4.2.2 Symfony BrowserKit Component
    symfony/console v4.2.2 Symfony Console Component
    symfony/contracts v1.0.2 A set of abstractions extracted out of the Symfony...
    symfony/css-selector v4.2.2 Symfony CssSelector Component
    symfony/dom-crawler v4.2.2 Symfony DomCrawler Component
    symfony/event-dispatcher v4.2.2 Symfony EventDispatcher Component
    symfony/finder v4.2.2 Symfony Finder Component
    symfony/polyfill-ctype v1.10.0 Symfony polyfill for ctype functions
    symfony/polyfill-mbstring v1.10.0 Symfony polyfill for the Mbstring extension
    symfony/process v4.2.2 Symfony Process Component
    symfony/yaml v4.2.2 Symfony Yaml Component
    theseer/tokenizer 1.1.0 A small library for converting tokenized PHP sourc...
    webmozart/assert 1.4.0 Assertions to validate method input/output with ni...

  • Suite configuration:

# Perform tests in browser using the WebDriver or PhpBrowser.
# If you need both WebDriver and PHPBrowser tests - create a separate suite.

actor: AcceptanceTester
modules:
    enabled:
        - \Helper\Acceptance
        - WebDriver
        - Asserts
    config:
        WebDriver:
            url: 'http://localhost/test/'
            browser: 'chrome'
            window_size: 'maximize'
            wait: 5
            # window_size: false
            #capabilities:
               # chromeOptions:
                    #args: ["--headless", "--disable-gpu", "--disable-extensions"]

extensions:
    enabled:
        - Codeception\Extension\RunProcess:
              - java -jar c:/Users/BobRay/Downloads/Selenium/selenium-server-standalone-3.9.0.jar
              - C:/Users/BobRay/Downloads/selenium-drivers/chromedriver.exe

Ngôn ngữ chính
PHP
Star
39
Fork
25
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Codeception/module-webdriver

Tất cả issue của Codeception/module-webdriver

Issue tương tự

Thêm issue về PHP

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.