如何在不执行“ find_element”的情况下用硒定义按钮? (蟒蛇)

时间:2018-12-06 10:12:36

标签: python selenium

我真的很想预定义定位符并将其分配给我的测试自动化项目中的变量,因此以后我可以像这样引用变量名:

login_button = <browser>.find_element_by_id("login")
login_button.click()

问题是,如果这些定位符保存在“文件A”中,并且我将该文件导入到“文件B”中(在程序的开头),则比在导入过程中执行那些“ find_element”方法时,包含这些按钮的页面尚未加载,这当然使我例外。

如何将按钮保存到变量中并在一开始导入包含文件?

2 个答案:

答案 0 :(得分:0)

您可以将此类变量存储为字符串,例如:

// component
methods: {
  getUser(userId) {
    this.$store.dispatch('GET_USER', userId)
      .then(response => {
        console.log(response); // no longer undefined
      });
  }
}

// vuex
actions: {
  GET_USER: ({commit}, userId) => {
    return api.getUserById(userId); // removed 'then' method
  }
}

然后在需要时使用:

login_button_click = "driver.find_element_by_id('login').click()"

答案 1 :(得分:0)

我认为,您应该像这样分割文件:

文件_a:

def click_login(driver):
    login_elem = driver.find_element_by_id('login')
    login_elem.click()


def send_username(driver, username: str):
    login_elem = driver.find_element_by_id('username')
    login_elem.send_keys(username)


def send_password(driver, password: str):
    login_elem = driver.find_element_by_id('password')
    login_elem.send_keys(password)

file_b

from file_a import *
from selenium import webdriver


driver = webdriver.Chrome()
username = "my_username"
password = "my_password"

def preform_login():
    send_username(driver, username)
    send_password(driver, password)
    click_login(driver)

对于测试,您应该为所有var使用一个配置文件config.ini

再次,这只是我的意见...

希望这对您有所帮助!