2016-05-29 13 views
1

I dieser web site mit Python Selen anmelden möchten, für die ich diesen Code geschrieben haben:Login Website mit Python Selen

# -*- coding: utf-8 -*- 
from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.support.ui import Select 
from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import NoAlertPresentException 
import unittest, time, re 

class Mps(unittest.TestCase): 
    def setUp(self): 
     self.driver = webdriver.Firefox() 
     self.driver.implicitly_wait(30) 
     self.base_url = "https://www.google.it/" 
     self.verificationErrors = [] 
     self.accept_next_alert = True 

    def test_mps(self): 
     driver = self.driver 
     driver.get(self.base_url + "/portaleTitolari/titolari.html") 
     driver.find_element_by_id("ext-gen30").clear() 
     driver.find_element_by_id("ext-gen30").send_keys("username33") 
     driver.find_element_by_id("ext-gen11").clear() 
     driver.find_element_by_id("ext-gen11").send_keys("password33") 
     driver.find_element_by_id("ext-gen38").click() 

    def is_element_present(self, how, what): 
     try: self.driver.find_element(by=how, value=what) 
     except NoSuchElementException as e: return False 
     return True 

    def is_alert_present(self): 
     try: self.driver.switch_to_alert() 
     except NoAlertPresentException as e: return False 
     return True 

    def close_alert_and_get_its_text(self): 
     try: 
      alert = self.driver.switch_to_alert() 
      alert_text = alert.text 
      if self.accept_next_alert: 
       alert.accept() 
      else: 
       alert.dismiss() 
      return alert_text 
     finally: self.accept_next_alert = True 

    def tearDown(self): 
     self.driver.quit() 
     self.assertEqual([], self.verificationErrors) 

if __name__ == "__main__": 
    unittest.main() 

Das Problem ist, Benutzernamen und Passwort-Eingabefeld Name jedes Mal ändert. Wie kann ich in dieser Situation den Benutzernamen, das Passwort-Eingabefeld und den Login-Button finden?

+0

Mit "Name ändern" meinen Sie, dass sich das Attribut 'id' ändert? –

Antwort

0

Beide Eingabefelder scheinen statische Klassen zu haben. Suchen Sie einfach mit xpath nach einem Eingabeelement mit der angegebenen Klasse. Etwas wie:

driver.find_element_by_xpath("//input[@class='login_component_input']") 

Da das Passwort die gleiche Klasse verwendet, können Sie den Elementtyp in der Abfrage versuchen, einschließlich:

driver.find_element_by_xpath("//input[@class='login_component_input' and @type='password']") 

XPath eine sehr ausdrucksstarke Sprache ist. Sie sollten sich etwas Zeit nehmen, um es zu verstehen, wenn Sie Websites automatisieren.

+0

Arbeit für die erste Eingabe, Login .. bat nicht für Passwort arbeiten – kingcope

+0

@kingcope: Haben Sie die richtige Klasse für das Passwort verwendet? Es ist natürlich anders. –

+0

Wie kann ich die Passworteingabe finden? – kingcope