selenium 自动化项目实战——添加购物车

常规代码

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
# 访问小米网页
driver.get("https://www.mi.com")
time.sleep(2)
# 点击登录按钮
# driver.find_element_by_css_selector('#J_siteUserInfo>a:nth-child(1)').click()
driver.find_element_by_xpath('//a[text()="登录"]').click()
time.sleep(2)
# 处理用户协议,点击同意。一般用户协议只在第一次时出现,使用if处理
# btns = driver.find_element_by_class_name("btn-primary")
btns = driver.find_element_by_xpath('//button[text()="同意"]').click()
if btns:
    btns[0].click()
# 输入用户名密码
driver.find_element_by_id("username").send_keys("username")
driver.find_element_by_id("pwd").send_keys("*******")
# 点击登录
driver.find_element_by_id("login-button").click()
time.sleep(2)
# 搜索商品
driver.find_element_by_id("search").send_keys("小米10 Pro\n")
time.sleep(2)
# 选择第一个商品
driver.find_element_by_xpath('//div[@class="goods-list clearfix"]/div[1]/div/a').click()
time.sleep(5)
# 切换到新窗口——商品详情页面
for handle in driver.window_handles:
    driver.switch_to.window(handle)
    # 判断切换到目标窗口的标题是否为:小米10 Pro立即购买-小米商城
    if "小米10 Pro立即购买-小米商城" == driver.title:
        print("已经切换到新窗口")
        break
# 点击加入购物车
time.sleep(3)
driver.find_element_by_xpath('//a[text()="加入购物车"]').click()
# 检查是否成功登录
res = driver.find_element_by_css_selector(".goods-info>span").text
assert '小米10 Pro 全网通版' in res
print("加入购物车成功")
# 退出浏览器
driver.quit()

代码模块化

# 首页
class IndexPage():
    def __init__(self,driver):
        self.driver = driver
        # 访问小米网页,确保处于首页
        self.driver.get("https://www.mi.com")
        # time.sleep(2)
    def to_login(self):
        # 点击登录按钮
        self.driver.find_element_by_xpath('//a[text()="登录"]').click()
        # time.sleep(2)
        # 处理用户协议,点击同意。一般用户协议只在第一次时出现,使用if处理
        btns = self.driver.find_element_by_xpath('//button[text()="同意"]').click()
        if btns:
            btns[0].click()
        # 返回登录页对象
        return LoginPage(self.driver)
# 登录页
class LoginPage():
    def __init__(self,driver):
        self.driver = driver
    def login(self,username,psw):
        # 输入用户名密码
        self.driver.find_element_by_id("username").send_keys(username)
        self.driver.find_element_by_id("pwd").send_keys(psw)
        # 点击登录
        self.driver.find_element_by_id("login-button").click()
        # time.sleep(2)
        # 返回首页对象
        return IndexPage(self.driver)
    # 搜索商品
    def search_item(self):
        self.driver.find_element_by_id("search").send_keys("小米10 Pro\n")
        return GoodItemsPage(self.driver)
    # def search_item(self,item="小米10 Pro"):
    #     # 搜索商品
    #     self.driver.find_element_by_id("search").send_keys(item+'\n')
    #     # time.sleep(2)
    #     return GoodItemsPage(self.driver)

# 商品页面
class GoodItemsPage():
    def __init__(self,driver):
        self.driver = driver
    def pick_item(self):
        # 选择第一个商品
        self.driver.find_element_by_xpath('//div[@class="goods-list clearfix"]/div[1]/div/a').click()
        # time.sleep(5)
        # 切换到新窗口——商品详情页面
        for handle in driver.window_handles:
            driver.switch_to.window(handle)
            # 判断切换到目标窗口的标题是否为:小米10 Pro立即购买-小米商城
            if "小米10 Pro立即购买-小米商城" == driver.title:
                print("已经切换到新窗口")
                return ItemPage(self.driver)
# 商品详情页
class ItemPage():
    def __init__(self,driver):
        self.driver = driver
    def add_to_cart(self):
        # 点击加入购物车
        # time.sleep(3)
        self.driver.find_element_by_xpath('//a[text()="加入购物车"]').click()
        return ShopCartPage(self.driver)
# 购物车页面
class ShopCartPage():
    def __init__(self,driver):
        self.driver = driver
    def check_item(self):
        # 检查是否成功登录
        res = self.driver.find_element_by_css_selector(".goods-info>span").text
        assert '小米10 Pro 全网通版' in res
        print("加入购物车成功")
if __name__ == "__main__":
    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    # 使用类调用函数
    a = IndexPage(driver).to_login()
    a.login("username","******")
    a.search_item().pick_item().add_to_cart().check_item()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值