首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在页面对象模型不起作用的Python Selenium中等待

在页面对象模型不起作用的Python Selenium中等待
EN

Stack Overflow用户
提问于 2019-09-16 23:41:00
回答 1查看 250关注 0票数 0

我有一个登录页面,可以输入用户名和密码,然后点击Login按钮(这是我的代码):

代码语言:javascript
复制
    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的定位器类:

代码语言:javascript
复制
class LoginPageLocators(object):

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

我使用这个基页:

代码语言:javascript
复制
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()

我的测试用例:

代码语言:javascript
复制
    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或如何使用等待元素存在?谢谢

EN

Stack Overflow用户

发布于 2019-09-17 00:07:46

您有两个选项。

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

代码语言:javascript
复制
driver.implicitly_wait('10')

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

所需的导入:

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

代码:

代码语言:javascript
复制
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)
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57960280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档