首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium Python Behave

Selenium Python Behave
EN

Stack Overflow用户
提问于 2018-08-10 18:04:06
回答 1查看 644关注 0票数 1

我尝试使用WebDriverWait让页面等待,直到它从登录页面转到用户面板页面。

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

class LoginForm(Browser):
    def log_in_as(self, username, password):
        username_field = self.driver.find_element(*LoginPageLocators.EMAIL_FIELD)
        password_field = self.driver.find_element(*LoginPageLocators.PASSWORD_FIELD)
        username_field.send_keys(username)
        password_field.send_keys(password)
        submit_btn = self.driver.find_element(*LoginPageLocators.LOGIN_BTN)
        submit_btn.click()

        try:
            element = WebDriverWait(self, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ssr-webnav"]/div/div[1]/nav[2]/div[2]')))
        finally:
            print("Log In Succesfull")

然后我按步骤调用它

代码语言:javascript
复制
@step(u'I log in as registered user')
def step_impl(context):
    context.login_form.log_in_as("example@gmail.com", "password123")

在environment.py中,我通过以下方式链接它们

代码语言:javascript
复制
def before_all(context):
    context.browser = Browser()
    context.login_form = LoginForm()

登录按预期工作,但是当我添加WebdriverWait时,它抛出一个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "\behave\model.py", line 1329, in run
    match.run(runner.context)
  File "\behave\matchers.py", line 98, in run
    self.func(context, *args, **kwargs)
  File "features\steps\steps.py", line 13, in step_impl
    context.login_form.log_in_as("example@gmail.com", "password123")
  File "\features\pages\login.py", line 27, in log_in_as
    EC.presence_of_element_located((By.XPATH, '//*[@id="ssr-webnav"]/div/div[1]/nav[2]/div[2]')))
  File "\webdriver\support\wait.py", line 71, in until
    value = method(self._driver)
  File "\webdriver\support\expected_conditions.py", line 63, in __call__
    return _find_element(driver, self.locator)
  File \webdriver\support\expected_conditions.py", line 397, in 
    _find_element
    return driver.find_element(*by)
  AttributeError: 'LoginForm' object has no attribute 'find_element'

你知道我错过了什么吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-08-10 23:53:26

通过查看用于Python的Selenium documentation,您似乎需要将一个webdriver对象传递给WebDriverWait(...)。而且在函数调用中传入的是self,而不是self.driver

所以这就是

代码语言:javascript
复制
                        vvvv
element = WebDriverWait(self, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ssr-webnav"]/div/div[1]/nav[2]/div[2]')))

需要是这样的

代码语言:javascript
复制
element = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.XPATH, '//*[@id="ssr-webnav"]/div/div[1]/nav[2]/div[2]')))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51784033

复制
相关文章

相似问题

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