Codeception Acceptance test confused by overlaid tabs
還沒有人認領這個 Issue。
評估
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 新手友好度
- 25/100
- Issue 類型
- 缺陷
- 描述清晰度
- 需要釐清
- 活躍度
- 停滯
- 技術堆疊
- php
- 領域
- testing-qa
研究方向
從 WebDriver 模組在重疊分頁上使用 waitForElementVisible()、see()、click()、performOn() 和 clickWithRightButton() 時背後的行為著手。如果可以,請使用最小分頁 fixture 重現回報的序列;當可見性檢查和點擊一律以目前可見的元素為目標,且不需要手動 workaround 時,即表示完成。
由索引模型根據 Issue 內容生成。
描述
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
- 主要語言
- PHP
- 星號
- 39
- 分支
- 25
- PR 合併指標
- 30 天內沒有已合併 PR
環境準備
這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
Codeception/module-webdriver 的其他 Issue
-
難度 5/5 一週以上 新手友好度 35/100
Codeception/module-webdriver#151 · 1 則留言 ·
-
難度 4/5 3-5 天 新手友好度 25/100
Codeception/module-webdriver#135 ·
-
難度 2/5 1-3 小時 新手友好度 38/100
Codeception/module-webdriver#130 ·
-
難度 3/5 1-2 天 新手友好度 35/100
Codeception/module-webdriver#128 ·
-
難度 2/5 1-3 小時 新手友好度 45/100
Codeception/module-webdriver#126 ·
查看 Codeception/module-webdriver 的全部 Issue
相似的 Issue
-
sync-en
難度 1/5 1-3 小時 新手友好度 88/100
維護者通常 1 天內回覆
-
sync-en
難度 1/5 1 小時以內 新手友好度 82/100
維護者通常 3 天內回覆
-
Settings Support Rotation
難度 2/5 1-3 小時 新手友好度 78/100
woocommerce/woocommerce#69424 ·
維護者通常 2 天內回覆
-
難度 1/5 1 小時以內 新手友好度 88/100
woocommerce/woocommerce-paypal-payments#4779 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 72/100
thephpleague/commonmark#1159 ·