click Function does not correspond to top-left corner of the element
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- javascript, php
- Domínio
- testing-qa
Direção de pesquisa
Comece reproduzindo clickWithLeftButton e moveMouseOver com a configuração fornecida do Firefox, Selenium e geckodriver, comparando o comportamento do offset com o Chrome. Use as medições de offset de JavaScript fornecidas como referência; considera-se concluído quando o offset solicitado seleciona o canto pretendido do elemento nos testes de aceitação do Firefox.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- PHP
- Estrelas
- 39
- Forks
- 25
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de Codeception/module-webdriver
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
Codeception/module-webdriver#151 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 25/100
Codeception/module-webdriver#135 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 38/100
Codeception/module-webdriver#130 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
Codeception/module-webdriver#128 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 45/100
Codeception/module-webdriver#126 ·
Todas as issues de Codeception/module-webdriver
Issues semelhantes
-
Bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
Automattic/safe-publish#594 ·
-
needs-triage Platform(Default)
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
HttpClient
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
symfony/symfony-docs#23092 ·
-
sync-en
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
-
sync-en
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 95/100