2016-06-22 26 views
0

Ich habe die gleichen Skripte seit über einem Jahr verwendet, aber seit gestern bekomme ich diesen Fehler, wenn Sie auf Links mit Bildern klicken. Ich bekomme das Element per Xpath und klicke dann darauf."Element ist nicht anklickbar" Fehler in Selen Python

test_101_HomePage_links (__main__.SprintTests) ... ERROR 

====================================================================== 
ERROR: test_101_HomePage_links (__main__.SprintTests) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "D:\Zaakpay\website\sanity results\debug\tests.py", line 17, in test_101_HomePage_links 
    a.click() 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 73, in click 
    self._execute(Command.CLICK_ELEMENT) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webelement.py", line 456, in _execute 
    return self._parent.execute(command, params) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute 
    self.error_handler.check_response(response) 
    File "C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response 
    raise exception_class(message, screen, stacktrace) 
WebDriverException: Message: Element is not clickable at point (281.25, 61). Other element would receive the click: <span></span> 


---------------------------------------------------------------------- 
Ran 1 test in 23.062s 

FAILED (errors=1) 

Weitere Informationen: mit Fenster, Python verwenden, mit Firefox, gleiche Skript funktionierte gut bis gestern

Mein Code:

import unittest 
from selenium import webdriver 
import datetime 
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile 
import time 

class SprintTests(unittest.TestCase): 

    def setUp(self): 
     self.driver = webdriver.Firefox() 
     self.driver.implicitly_wait(30) 
     self.driver.maximize_window() 
     self.driver.get("https://www.zaakpay.com") 

    def test_101_HomePage_links(self): 
     a= self.driver.find_element_by_xpath("/html/body/div[5]/div[1]/div[3]/ul/li[1]/a/i") 
     a.click() 
     time.sleep(5) 
     a = self.driver.find_element_by_xpath('//*[@id="view1"]/p') 
     b=a.text 
     self.assertEqual('-Payment Gateway Services.\n-More than you want payment options with.\n-major credit cards, debit cards and 52 netbanking banks.\n-Fastest Merchant Approval.\n-Smooth integration across 22 platforms.\n-Start in minutes.\n-Multi-Currency Processing Service with 13 currencies.\n\nSIGN UP',b) 


    def tearDown(self): 
     self.driver.quit() 

if __name__ == '__main__': 
    unittest.main(verbosity=2) 

Link i zu klicken bin versucht zu ist kreisförmiges Bild über Text-WEBSITE BEZAHLUNG GATEWAY

+0

einen Screenshot nur nach, wenn diese Ausnahme ausgelöst wird und es in Ihrer Frage. Etwas blockiert Ihren Klick. –

+0

Welches Element hat diesen Klick erhalten? können Sie sagen? Ich hatte diesen Fehler zuvor, das Element, auf das Sie klicken wollten, wurde maskiert oder unsichtbar. –

+0

driver.save_screenshot ("Pfad zum Speichern \\ screen.jpeg") –

Antwort

1

Verwenden von XPATHs li ke diese /html/body/div[5]/div[1]/div[3]/ul/li[1]/a/i sind aus einer Reihe von Gründen problematisch.

In erster Linie sind sie extrem spröde. Alles was es braucht, ist eine kleine Aktualisierung der Seite, eine, die nachts vielleicht sogar visuell wahrnehmbar ist, und die hart codierten Div-Indizes brechen. Die Websiteentwickler haben möglicherweise ein div hinzugefügt, um einen Schriftstil leicht zu ändern, und dann ist Ihr XPATH vollständig zerstört.

Zweitens macht es fast unmöglich zu debuggen, sobald es bricht. Ich habe absolut keine Ahnung, worauf Sie klicken wollten, und wenn dies Produktionscode wäre, den jemand anders zu reparieren versucht, hätten sie auch keine Ahnung, worauf Sie klicken wollten.

Meine beste Vermutung ist, dass zaakpay eine kleine, nicht wahrnehmbare Änderung vorgenommen hat, die die Position Ihres Zielelements im DOM leicht verändert hat. Wenn Sie den XPath zu so etwas wie //div[@class=\"prdtBlck\"]/ul/li/a aktualisieren, wie ich weiter unten getan haben, Ihr Skript funktioniert:

import unittest 
from selenium import webdriver 
import datetime 
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile 
import time 

class SprintTests(unittest.TestCase): 

    def setUp(self): 
     self.driver = webdriver.Firefox() 
     self.driver.implicitly_wait(30) 
     self.driver.maximize_window() 
     self.driver.get("https://www.zaakpay.com") 

    def test_101_HomePage_links(self): 
     a=self.driver.find_element_by_xpath("//div[@class=\"prdtBlck\"]/ul/li/a") 
     a.click() 
     time.sleep(5) 
     a = self.driver.find_element_by_xpath('//*[@id="view1"]/p') 
     b=a.text 
     self.assertEqual('-Payment Gateway Services.\n-More than you want payment options with.\n-major credit cards, debit cards and 52 netbanking banks.\n-Fastest Merchant Approval.\n-Smooth integration across 22 platforms.\n-Start in minutes.\n-Multi-Currency Processing Service with 13 currencies.\n\nSIGN UP',b) 


    def tearDown(self): 
     self.driver.quit() 

if __name__ == '__main__': 
    unittest.main(verbosity=2) 
+1

Ich stimme fast mit allem überein, was Sie angegeben haben, aber ich würde vorschlagen, dass Sie stattdessen einen CSS-Selektor verwenden, "a [href = '# view1']". Dadurch erhalten Sie genau das Element, das OP ohne relative Referenzen sucht. – JeffC

+0

Ich stimme zu, das wäre ein besserer Weg. –

+0

Es gibt keine Änderung in Xpath, Sie können überprüfen, mit Xpath meines Codes und der Webseite. Ich habe 100 solcher Links in meinem Code und alle von ihnen begannen plötzlich Fehler zu geben. Es ist eine schwierige Aufgabe, alle xpath erneut zu schreiben. Wie auch immer, scheint das die einzige Option zu sein. –

Verwandte Themen