2017-09-29 3 views
0

Donc, l'application web que nous développons a un mode TV/PC, et je teste la possibilité de passer entre ces deux modes. `Comment cliquer sur un élément en fonction de ses coordonnées avec selenium webdriver

def pc_to_tv(self): 
     pc_to_tv = self.driver.find_element_by_xpath(
      'html/body/div[1]/div/topbar/header/div[2]/div[2]/div[1]/button[1]') 
     pc_to_tv.click() 

def tv_to_pc(self): 
     tv_to_pc = self.driver.find_element_by_xpath(
      'html/body/div[1]/div/topbar/header/div[2]/div[2]/div[1]/button[2]') 
     tv_to_pc.click()` 

Le problème est, quand je passe du PC à la télévision, l'écran « zoome », faisant apparaître le bouton au même endroit, il serait sans zoom. donc, je ne peux pas cliquer sur le bouton avec ma méthode 'tv_to_pc', parce qu'en cliquant sur le bouton actuel, il clique là où le bouton devrait être. Donc, la solution que j'ai trouvé était de cliquer sur le bouton avec les coordonnées, de cette façon je vais cliquer sur l'endroit que je veux, au lieu de cliquer sur un endroit non cliquable comme je le faisais. La chose est, je ne sais pas comment faire cela, et j'ai besoin d'aide à ce sujet.

+0

Cela ressemble à celui-ci: https://sqa.stackexchange.com/questions/8535/selenium-how-to-click-at-xy-coordinates – Quinn

Répondre

-1

essayer moveToElement puis effectuer cliquez sur

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element); 
new Actions(driver).moveToElement(element, x, y).click().perform(); 

x est xOffset y est yOffset

S'il vous plaît voir que si vous utilisez Javascript pour cliquer sur son ne va pas être un clic natif.

+0

Cela ne fonctionnera pas car Selenium pense déjà que l'élément est en le mauvais endroit. – JeffC

+0

@JeffC Je répondais à la question "comment cliquer à co-ordi naire", n'a pas fait attention à cet élément n'était pas en vue. vous pouvez obtenir l'élément en vue en utilisant l'instruction suivante avant d'exécuter l'étape. (Pilote (JavascriptExecutor)) .executeScript ("arguments [0] .scrollIntoView (true);", élément); – user8672807

+0

Ce n'est pas le problème non plus. Le problème est que lorsque le navigateur est zoomé, Sélénium déforme l'emplacement de l'élément sur la page et il manque donc le clic. C'est sur la page et n'a pas besoin de défilement. – JeffC

0

Je suggère que vous cliquez simplement sur le bouton en utilisant JavaScriptExecutor. Il va cliquer n'importe où sur la page. Voir How to execute a javascript in a Python webdriver et d'autres questions pour plus d'informations. Le format général est

element = driver.find_element_by_id("someId") 
driver.execute_script("arguments[0].click();", element) 

Aussi ... vous ne voulez pas utiliser XPaths comme ça. Tout XPath qui commence à la balise HTML ou est plus que juste quelques niveaux profonds va être très fragile. Faites des recherches sur des xpaths au sélénium et lisez quelques guides pour plus d'informations.