【问题标题】:Wait in Python Selenium with page object model not working在 Python Selenium 中等待页面对象模型不起作用
【发布时间】:2019-09-17 00:07:46
【问题描述】:

我有这个登录页面输入用户名密码并点击登录按钮(这是我的代码):

    def enter_username(self):
    # Click on Email field
    self.find_element(*self.locator.email_field).click()
    # Clear Email field
    self.find_element(*self.locator.email_field).clear()
    # Tape Email
    self.find_element(*self.locator.email_field).send_keys(user1_email)

def enter_password(self):
    # Click on Password field
    self.find_element(*self.locator.password_field).click()
    # Clear Password field
    self.find_element(*self.locator.password_field).clear()
    # Tape Password
    self.find_element(*self.locator.password_field).send_keys(user1_password)

def click_login(self):
    # Click on the user menu
    self.find_element(*self.locator.login_button).click()

我使用这个包含 ID 的定位器类:

class LoginPageLocators(object):

email_field = (By.XPATH,'//*[@id="sCourriel"]')
password_field = (By.XPATH,'//*[@id="sPassword"]')
login_button = (By.NAME,'loginBTN')

我使用这个基本页面:

class Page(object):
def __init__(self, driver, base_url=uat_qa_url):
    self.base_url = base_url
    self.driver = driver
    self.timeout = 30

def find_element(self, *locator):
    return self.driver.find_element(*locator)

def open(self, url):
    url = self.base_url + url
    self.driver.get(url)

def get_title(self):
    return self.driver.title

def get_url(self):
    return self.driver.current_url

def hover(self, *locator):
    element = self.find_element(*locator)
    hover = ActionChains(self.driver).move_to_element(element)
    hover.perform()

我的测试用例:

    def test_consultation_CCI_WBA_001(self):
    loginPage = LoginPage.Loginpage(self.driver)
    consultationPage = ConsultationsPage.Consultationspage(self.driver)
    homePage = HomePage.Homepage(self.driver)

    # Test case CCI_WBA_001 (Créer une consultation avec les informations nécessaires)

    # Login ass admin
    loginPage.enter_username()
    time.sleep(5)
    loginPage.enter_password()
    time.sleep(5)
    loginPage.click_login()
    time.sleep(5)

我的问题:如何消除 time.sleep 或如何使用等待元素存在? 谢谢

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    你有两个选择。

    1) 隐式等待:当您有以下代码行时,它将确保驱动程序等待元素的指定时间。

    driver.implicitly_wait('10')
    

    2) 显式等待:您可以使用以下命令显式等待元素出现。

    需要进口:

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

    代码:

    def enter_username(self):
        # wait for the email element (update the location strategy based on your condition)
        email = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.id("id goes here"))))
        # Clear Email field
        email.clear()
        # Tape Email
        email.send_keys(user1_email)
    

    【讨论】:

    • 但是我如何使用我的定位器页面,它包含超过 100 个 id (xpath, name, id)?
    • 我如何使用 def hover
    • 现在我有这个错误:AttributeError: 'bytes' object has no attribute
    • 在我让 Pycharm 解析我的导入并从 telnetlib 中获取 EC 后,我得到了相同的“'bytes' 对象没有属性”错误。确保导入是答案中的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    相关资源
    最近更新 更多