Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

click Function does not correspond to top-left corner of the element

Ouverte
#38 4 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
35/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
javascript, php
Domaine
testing-qa

Piste de recherche

Commencez par reproduire clickWithLeftButton et moveMouseOver avec la configuration fournie de Firefox, Selenium et geckodriver, en comparant le comportement de l’offset avec Chrome. Utilisez comme référence les mesures d’offset JavaScript fournies ; le travail est considéré comme terminé lorsque l’offset demandé sélectionne le coin prévu de l’élément dans les tests d’acceptation de Firefox.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

What are you trying to achieve?

We are trying to click an element in a webpage.

What do you get instead?

Wrong element (the left or the right element) gets clicked instead. Based on the documentation here clickWithLeftButton with offset should place the cursor on the upper left corner of the element, but with extensive testing, we've found out that the position of the cursor is actually at the center of the element. Note that we are writing acceptance tests for a web application. The same code works fine with Chrome (configuration below) but it does not work well with Selenium/Gecko/Firefox. We are using an RTL language (Persian) in UTF-8.

Part of the code that is failing :

        $I->moveMouseOver($class,10,10);
        $I->wait(1);
        $I->clickWithLeftButton($class,10,10);
Details

Codeception : 4
PHP : 7.2 Remi
Selenium : 3.8.1 with enablePassThrough function
Geckodriver : 0.26.0
Mozilla Firefox : 72.0.1
OS : Windows 10

acceptance.suite.yml:

# Codeception Test Suite Configuration
#
# Suite for acceptance tests.
# 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
        - Db
        - Asserts
    depends:
        - Db:
        - WebDriver:
        - Asserts:
    url: 'http://localhost/'
    config:
        WebDriver:
             url: 'http://localhost/'
             port: 4444
        Db:
            dsn: 'mysql:host=1.1.1.1;dbname=mysql;charset=utf8'
            user: 'root'
            password: 'password'
            populate: false
            cleanup: false
            reconnect: true

env:
    firefox:
        modules:
            config:
                WebDriver:
                  url: 'http://localhost/'
                  window_size: 1920*1080
                  browser: firefox
                  capabilities:
                    acceptInsecureCerts: true
                    unexpectedAlertBehaviour: 'accept'
                    binary: "/opt/firefox/firefox-bin"
    chrome:
        modules:
            config:
                WebDriver:
                  url: 'http://localhost/'
                  window_size: 1920*1080
                  browser: chrome
                  capabilities:
                     chromeOptions: # additional chrome options
                       args: ["--no-sandbox", "--disable-notifications", "--start-maximized", "--disk-cache-dir=null", "--aggressive-cache-discard", "--disable-dev-shm-usage"]

After a lot of trial-and-errors, we eventually fixed our problem using the following code. The code uses JS functionalities to find the width and height of an element, then moves the cursor and selects the top right corner (This is where we found out that its not selecting the top left corner) :


        $width = 'var a = document.evaluate(\''.$class.'\', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.offsetWidth; return a;';
        $width = $I->executeJS($width);
        var_dump($width);
        $height = 'var a = document.evaluate(\''.$class.'\', document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.offsetHeight;  return a;';
        $height = $I->executeJS($height);
        var_dump($height);

        $I->moveMouseOver($class,(($width/2)),0);
        $I->wait(1);
        $I->clickWithLeftButton($class,(($width/2)),0);

Let me know if more information is needed.

Langage dominant
PHP
Étoiles
39
Forks
25
Métriques de merge des PR
Aucune PR mergée en 30 j

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de Codeception/module-webdriver

Toutes les issues de Codeception/module-webdriver

Issues similaires

Plus d'issues PHP

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.