2017-09-25 18 views
0

Was wir haben:benötigen WebDriver Methoden außer Kraft setzen

driver = WebDriver.Chrome.. 

def get_driver(): 
#wrapper for webdriver 
    return driver 

weiter - viele:

get_driver().find_el... 
get_driver().implicitly_wait.. 

und so weiter in vielen Dateien

I paar WebDriver Funktionen außer Kraft setzen müssen (wie find_elements_by_xpath und find_elements_by_id) ohne den Code in vielen Dateien zu ändern.

Was war mein Ansatz: Erstellen Sie eine Klasse get_driver() anstelle der Funktion, Vererbung von meinem Treiber und Override-Funktionen, die ich brauche. So etwas Ähnliches:

class get_driver(driver): 

    def find_element_by_xpath(self, xpath): 
     return WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath))) 

Es sah sogar wie zur Arbeit zu gehen, aber jedes Mal, wenn ich versuche, meine get_driver() aufrufen find_element_by_xpath (...) meine Klasse erstellt eine andere Instanz von Fahrer und öffnen Sie ein neues Browserfenster.. Wie könnte ich das vermeiden?

+0

Was möchten Sie erreichen, indem Sie diese Methoden überschreiben? –

Antwort

0

Es kann verschiedene Wege geben, dies zu tun. Aber unter Ansatz funktioniert gut für mich

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.wait import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 


class PatchDriver(): 
    driver = None 

    orignal_method = None 


    def __find_element_by_xpath(self, xpath): 
     return WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath))) 

    @staticmethod 
    def patch(driver): 
     PatchDriver(driver) 
     return driver 

    def __init__(self, driver): 
     self.driver = driver 

     self.orignal_method = driver.find_element_by_xpath 
     driver.find_element_by_xpath = self.__find_element_by_xpath 


driver = PatchDriver.patch(driver) 

driver.get("http://tarunlalwani.com") 

elem = driver.find_element_by_xpath("(//a)[3]") 

elem.click() 

driver.quit() 
Verwandte Themen