Selenium 学习笔记(三)

摘要:
手动步骤:1.登录系统后,在搜索栏中输入iPhone并单击搜索。2.单击产品以输入产品详细信息。3.添加到购物车。4.点击购物车跳转到购物车;点击结算跳转到结算页面5.添加邮寄地址、付款方式和交付方式,点击结算过程中遇到的问题:1.如果你得到多个元素,记得使用find_元素,然后使用数组下标获取或选择获取。2.在中间添加地址时,这会卡住,因为select是一个特殊的页面下拉框元素

手工步骤:

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

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

3. 添加到购物车

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

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

过程中遇到得问题:

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

2. 中间添加地址得时候,卡住了Selenium 学习笔记(三)第1张

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

1 importtime
2 from selenium importwebdriver
3 from selenium.webdriver.support.select importSelect
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 inall_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

免责声明:文章转载自《Selenium 学习笔记(三)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS开发之socket简介在Asp.net中为用户控件(.ascx)添加自定义属性详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

selenium之截图

selenium支持对当前页面保存截图,使用方法: driver.get_screenshot_as_file(file_path)  代码举例: ...... def get_screenshot(driver, path=''): '''保存页面截图''' n = 0 if path: pass...

Java调用第三方接口示范

在项目开发中经常会遇到调用第三方接口的情况,比如说调用第三方的天气预报接口。 使用流程【1】准备工作:在项目的工具包下导入HttpClientUtil这个工具类,或者也可以使用Spring框架的restTemplate来调用,上面有调用接口的方法【分为Get和Post方式的有参和无参调用】: package com.njsc.credit.util;imp...

Selenium中,若HTML元素输入框带有readonly属性,如何实现修改其元素内容

以上可看出,日期框元素设置了“readyony”属性,设置了对其只能进行只读,不可进行修改。 若在selenium+Python中写入以下代码,如下图所示:  若元素设置了“readonly”只读属性,那么直接对元素进行send_keys的话,是会进行报错的。 那我们如何实现对原本只读属性的元素进行修改内容呢? 我们可以通过selenium先定位此元...

查找正序排列的List中缺失的日期数据的一个算法

Code: public List<DateTime> getMissDateData() { DateTime[] keys = { DateTime.Now.AddDays(-5), DateTime.Now.AddDays(-3), DateTime.Now.AddDays(...

.Net使用Redis详解之ServiceStack.Redis(七)

序言本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中会对list的阻塞功能和事务的运用做二个案例,进行记录学习。 Redis官方推荐的.NET驱动类库为Service.Stack.Redis。然而网上对这个类库的中文文档不是很全面与合理,这篇文章主要就对这个类库做注释展现。不足遗漏...

TP5操作日志记录设计

根据网友的设计进行了部分调整: 用户分为管理员admin表和用户user表 记录操作表数据 增删改: insert/delete/update <?php /** * OperateLog.php * description */ namespace appservice; use thinkDb; use thinkLog; /**...