用户前台登录–>搜索商品–>加入购物车–>购物车结算–>添加收货地址
涉及知识点:
1、登录后进行等待和窗口最大化操作:
智能等待–隐式等待
driver.implicitly_wait(10)
窗口最大化
driver.maximize_window()
2、问题:脚本运行时好时坏(10次中8次成功,2次失败)
原因:脚本稳定性不够,由于页面响应时间不一致造成
解决方案:增加隐式等待 implicitly_wait(10)
智能等待–隐式等待:
优点:智能的判断,下一行代码应该等待多久;只需要写一次,后面所有代码都生效
缺点:有些特殊情况不起作用,例如页面没有重新加载,只是局部信息更新
若页面1s加载成功找到元素,则等待1s;若页面10s加载成功找到元素,则等待10s;若10s后,页面未加载成功找到元素,则抛出异常
3、driver.implicitly_wait(5)隐式等待 和 time.sleep(5)de 区别:
两者都是时间等待的作用
区别:
隐式等待是一种智能等待,可以自动判断需要等待多久,括号中的5表示最大等待时间五秒,如果5秒后页面UI人没有加载成功,抛出异常,而time.sleep(5)是指固定等待
隐式等待只需要在声明driver之后写一次代码,time.sleep在每次需要延时等待时,都要写重新写
4、find_element_by_class_name() 和 find_element_by_css_selector()的区别:
find_element_by_class_name() 不支持 同时用两个class name定位
find_element_by_css_selector() 支持使用多个class name定位,在每个class name前面加上小数点即可,例如".shopCar_btn_03.fl"
如果不确定多个class name中谁是唯一的,可采用此方法
5、问题:新窗口中的元素不能定位和操作
原因:点击某些连接,导致浏览器出现了新窗口,但selenium仍然工作在原来的窗口
解决方案:进行窗口切换
1、找到新窗口的句柄
new_windows = driver.window_handles[-1]
2、通过句柄切换到新窗口
driver.switch_to.window(new_windows)
6、find_element 和 find_elements 的区别:
find_element 找到页面中满足条件的第一个元素
find_elements 找到页面中所有满足条件的元素,然后通过下标选择第几个元素,经常用例组合class_name或者tag_name使用
可理解为:find_element() == find_elements()[0]
7、问题:如何选择下拉框中的选项
解决方案:定位找到元素后,将其强制转换成下拉框类型 Select(页面元素)
下拉框选择:调用select类中的方法
Select(页面元素).select_by_visible_text(“选项的文本值”)
Select(页面元素).select_by_.value(选项的value属性的值)
Select(页面元素).select_by_index(第几个选项)
8、问题:Select自动导包错误
解决方案:光标定位在Select上,Alt + Enter,选择import this name --> 选择导入 selenium.webdriver.support.select
代码:
# ###########################################################
# 用户前台登录-->搜索商品-->加入购物车-->购物车结算-->添加收货地址
# ###########################################################