Selenium 学习笔记(三)

手工步骤:

1. 登录系统之后,在搜索栏输入iPhone,点击搜索

2. 点击商品进入商品详情

3. 添加到购物车

4. 点击购物车,跳转购物车;点击结算,跳转结算页面

5. 添加寄送地址、支付方式、配送方式,点击结算

过程中遇到得问题:

1. 如果获取得元素是多项,一定记得要用find_elements,然后再使用数组下标获取或者使用select获取

2. 中间添加地址得时候,卡住了

这个是因为select是特殊得网页下拉框元素,上方我尝试通过具体城市id获取是获取不到,需要先定位到下拉框,然后再选择

 1 import time
 2 from selenium import webdriver
 3 from selenium.webdriver.support.select import Select
 4 
 5 driver = webdriver.Chrome()
 6 driver.get("http://localhost/index.php")
 7 driver.maximize_window()
 8 driver.implicitly_wait(30)
 9 
10 # 点击登录按钮,切换窗口,然后输入帐号
11 driver.find_element_by_link_text("登录").click()
12 current_tab = driver.current_window_handle
13 all_tab = driver.window_handles
14 for i in all_tab:
15     if i != current_tab:
16         driver.switch_to.window(i)
17     else:
18         driver.close()
19 
20 driver.find_element_by_name("username").send_keys("眼底有霜")
21 driver.find_element_by_name("password").send_keys("jingmingtian")
22 driver.find_element_by_name("cookie").click()
23 driver.find_element_by_class_name("login_btn").click()
24 
25 driver.find_element_by_link_text("账号设置").click()
26 driver.find_element_by_link_text("个人资料").click()
27 
28 driver.find_element_by_id("true_name").clear()
29 driver.find_element_by_id("true_name").send_keys("消愁")
30 xb = driver.find_elements_by_id("xb")
31 xb[1].click()
32 # find_elements 记得是带S得,获取节点下所以元素,结果是数组形式
33 
34 # 日历模块,查看源码发现,带有readonly 属性,无法直接写入,而通过日历模块选择太麻烦,所以先清除该属性
35 js = 'document.getElementById("date").removeAttribute("readonly")'
36 driver.execute_script(js)
37 
38 driver.find_element_by_id("date").clear()
39 driver.find_element_by_id("date").send_keys("2000-01-01")
40 driver.find_element_by_id("qq").clear()
41 driver.find_element_by_id("qq").send_keys("1111111")
42 driver.find_element_by_class_name("btn4").click()
43 
44 # 提交表单后,会生成浏览器弹窗
45 time.sleep(3)
46 # time这块,输入后,字体下方会提示红线,证明当前找不到这个方法,需要导入。
47 # 直接按快捷键  Alt + Enter 快捷导入
48 driver._switch_to.alert.accept()
49 
50 # 弹窗有accept() 和dismiss()
51 
52 driver.find_element_by_name("keyword").send_keys("iphone")
53 driver.find_element_by_name("keyword").submit()
54 
55 js2 = 'document.getElementsByClassName("p1")[0].childNodes[1].removeAttribute("target")'
56 driver.execute_script(js2)
57 
58 driver.find_element_by_css_selector("body > div.shopCon.w1100 > div.ShopboxR.fl > div.protect_con > div > p > a").click()
59 
60 driver.find_element_by_id("joinCarButton").click()
61 # driver.find_element_by_link_text("加入购物车").click()
62 driver.find_element_by_css_selector("body > div.shop_last.w1100 > div.other_shopl.fl > div.shopCar_T > span.shopCar_T_span3").click()
63 driver.find_element_by_css_selector("body > div.shopCarbox.w1100 > div:nth-child(4) > div:nth-child(3) > a").click()
64 
65 driver.find_element_by_class_name("add-address").click()
66 driver.find_element_by_name("address[address_name]").send_keys("那么骄傲")
67 driver.find_element_by_name("address[mobile]").send_keys("186181818186")
68 
69 # select city ,select 是网页下拉框元素,一般通过find_elements然后通过数组获取,select_by_value;select_by_visible_text;select_by_index来定位具体选择项
70 city = driver.find_elements_by_class_name("add-new-area-select")[0]
71 Select(city).select_by_index(3)
72 city1 = driver.find_elements_by_class_name("add-new-area-select")[1]
73 Select(city1).select_by_index(1)
74 city2 = driver.find_elements_by_class_name("add-new-area-select")[2]
75 Select(city2).select_by_index(6)
76 
77 driver.find_element_by_name("address[address]").send_keys("anywhere")
78 driver.find_element_by_name("address[zipcode]").send_keys("00000")
79 driver.find_element_by_class_name("aui_state_highlight").click()

下次回顾整理一下,然后写一下ActionChains.

2017-09-14  10:08:52

原文地址:https://www.cnblogs.com/good-time/p/7518035.html