我对 Python 比较陌生。我正在尝试使用 Python Selenium Web Driver 进行一些网络自动化。我将为不同的场景编写单独的脚本:例如一个用于登录,另一个用于检查登录页面上的工具提示等等。
我的问题是我想对所有测试用例使用相同的 Firefox 实例。这样登录后我的测试脚本将在同一个登录的 FireFox 实例上运行。
请让我知道如何实现这一目标。
谢谢,
莫希马
我对 Python 比较陌生。我正在尝试使用 Python Selenium Web Driver 进行一些网络自动化。我将为不同的场景编写单独的脚本:例如一个用于登录,另一个用于检查登录页面上的工具提示等等。
我的问题是我想对所有测试用例使用相同的 Firefox 实例。这样登录后我的测试脚本将在同一个登录的 FireFox 实例上运行。
请让我知道如何实现这一目标。
谢谢,
莫希马
不要编写单独的脚本。而是编写不同的函数:
def login(): ...
def check_tooltips(): ...
如果您希望将函数放在不同的文件中,那没问题;您可以从另一个模块导入一个模块(例如 tooltips.py):
import tooltips
def login(): ...
def main():
login()
tooltips.check_tooltips()
你可以使用@classmethod 装饰器。因此,例如,您的第一个测试验证登录功能,而不是第二个测试验证例如搜索按钮或其他东西等等,所有这些都使用一个浏览器实例。
下面我使用 python 2.7 和 unittest
import unittest
from selenium import webdriver
class HomePage(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.selenium = webdriver.Firefox()
cls.selenium.maximize_window()
def test_login(self):
self.selenium.get('http://...')
self.selenium.find_element_by_id()
#and so on
def test_search_btn(self):
pass
@classmethod
def tearDownClass(cls):
cls.selenium.quit()
if __name__ == '__main__':
unittest.main()
如果你对 OOP 犹豫不决,你也可以使用非 OOP 方式
# your imports
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import csv
import win32com.client
import time
import os
driver=webdriver.Chrome()
driver.get("your url")
wait=WebDriverWait(driver,30)
# select the username and password fields and enter your details and after that click the login button. after that you will see welcome page in the same instance.
username=wait.until(EC.presence_of_element_located((By.ID, 'LoginEmailOrNickname')))
username.send_keys(email)
passw=wait.until(EC.presence_of_element_located((By.ID, 'login-password')))
passw.send_keys(pas)
submit=wait.until(EC.presence_of_element_located((By.ID, 'SignInButton')))
submit.click()
time.sleep(5)
# here comes welcome page after login
mykijiji=wait.until(EC.presence_of_element_located((By.LINK_TEXT, 'My Kijiji')))
mykijiji.click()