# -*- coding: utf-8 -*-

 from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
import time, SendKeys,os
import codecs #用于文件读写,可以指定编码格式 # 进入ecshop登录界面
d = webdriver.Firefox()
d.implicitly_wait(10) # 全局等待时间(10秒)
d.maximize_window() # 最大化窗口
#goods_sn = 'ECS0001102' #货号
14 '''从数据文件中读取测试数据'''
fp=codecs.open(os.getcwd()+'\\testData.txt','r',encoding='utf-8') #打开测试数据文档
listData = [] #读取测试数据放到list中
for item in fp.readlines():
listData.append(item.rstrip()) #将取出的数据中换行符去掉
goods_name,goods_sn,cat_id,brand_id,suppliers_id=listData[0],listData[1],listData[2],listData[3],listData[4] #取到的值赋值给变量
fp.close() #关闭测试数据文档 d.get(r'http://192.168.7.85:9000/ecshop3/admin')
time.sleep(3)
# 登录ecshop
d.find_element_by_name('username').clear()
d.find_element_by_name('username').send_keys('admin')
d.find_element_by_name('password').clear()
d.find_element_by_name('password').send_keys('admin123456')
d.find_element_by_class_name('btn-a').click()
time.sleep(3)
# 切换到menu-frame
d.switch_to.frame(d.find_element_by_id('menu-frame'))
d.find_element_by_link_text('商品列表').click()
time.sleep(3) d.switch_to.default_content()
d.switch_to.frame(d.find_element_by_id('main-frame'))
# d.find_element_by_link_text('添加新商品').click()
d.find_element_by_css_selector('.action-span.btn-add-goods>a').click()
time.sleep(3) # 输入商品信息
d.find_element_by_name('goods_name').clear()
d.find_element_by_name('goods_name').send_keys(goods_name)
d.find_element_by_name('goods_sn').clear()
d.find_element_by_name('goods_sn').send_keys(goods_sn)
Select(d.find_element_by_name('cat_id')).select_by_value(cat_id)
Select(d.find_element_by_name('brand_id')).select_by_visible_text(brand_id)
Select(d.find_element_by_name('suppliers_id')).select_by_visible_text(suppliers_id)
d.find_element_by_name('shop_price').clear()
d.find_element_by_name('shop_price').send_keys('')
d.find_element_by_name('volume_number[]').clear()
d.find_element_by_name('volume_number[]').send_keys('')
d.find_element_by_name('volume_price[]').clear()
d.find_element_by_name('volume_price[]').send_keys('')
d.find_element_by_name('virtual_sales').clear()
d.find_element_by_name('virtual_sales').send_keys('')
d.find_element_by_id('is_promote').click() # 运行JS脚本,删除readonly(只读)元素
js_start = 'document.getElementById("promote_start_date").removeAttribute("readonly")'
d.execute_script(js_start)
# 添加日期
d.find_element_by_id('promote_start_date').clear()
d.find_element_by_id('promote_start_date').send_keys('2018-06-01') # js字符串
js_end = 'document.getElementById("promote_end_date").removeAttribute("readonly")'
# 执行js代码
d.execute_script(js_end) d.find_element_by_id('promote_end_date').clear()
d.find_element_by_id('promote_end_date').send_keys('2018-07-10')
# 上传商品图片
d.find_element_by_name('goods_img').click() #点击浏览按钮,打开选择文件窗口
time.sleep(2)
SendKeys.SendKeys('C:\\Users\\Administrator\\Desktop\\123.png')
SendKeys.SendKeys('{ENTER}')
time.sleep(2) d.find_element_by_css_selector('[class=\'button\'][value=\' 确定 \']').click()
time.sleep(5)
# 添加成功,回到商品列表界面
d.find_element_by_link_text('商品列表').click()
time.sleep(3)
# 获取到自身后用..切换到父辈再到子辈
d.find_element_by_xpath('//span[contains(.,"'+goods_sn+'")]/../../td[12]/a[4]').click()
time.sleep(2)
# 切换到alert
js = d.switch_to.alert
# 确定
js.accept()

文本读写可参考此文

自动化测试-19.selenium定位之通过JS修改html写入日期数据以及从文本读取数据实战的更多相关文章

  1. selenium web driver 使用JS修改input属性

    selenium获取input时候,发现type=”hidden” 的input无法修改value,经牛人指点,可以使用js修改 首先html源文件如下,设置为text .hidden.submit ...

  2. VUE 直接通过JS 修改html对象的值导致没有更新到数据中去

    业务场景 我们在使用vue 编写 代码时,我们有一个 多行文本框控件,希望在页面点击一个按钮 在 文本框焦点位置插入一个 {pk}的数据. 发现插入 这个数据后,这个数据并没有同步到 数据中,但是直接 ...

  3. 【自动化测试】Selenium - 定位

    http://easonhan007.github.io/selenium/2014/01/10/se-secret_01/ 你应该遵照这个规则来选择定位元素的属性.name > id > ...

  4. 自动化测试-7.selenium定位一组对象

    前言 前面的几篇都是讲如何定位一个元素,有时候一个页面上有多个对象需要操作,如果一个个去定位的话,比较繁琐,这时候就可以定位一组对象. webdriver 提供了定位一组元素的方法,跟前面八种定位方式 ...

  5. 纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据

    最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概 ...

  6. js ui框架 My97日期控件 富文本编辑器

    My97日期控件 http://www.my97.net/dp/index.asp 富文本编辑器 http://www.kindsoft.net/demo.php 百度的magic也不错 http:/ ...

  7. 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)

    1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...

  8. 《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)

    1.简介 终于经过宏哥的不懈努力,偶然发现了一个toast的web页面,所以直接就用这个页面来夯实一下,上一篇学过的知识-处理toast元素. 2.安居客 事先声明啊,宏哥没有收他们的广告费啊,纯粹是 ...

  9. 自动化测试-6.selenium的css定位

    前言 大部分人在使用selenium定位元素时,用的是xpath定位,因为xpath基本能解决定位的需求.css定位往往被忽略掉了,其实css定位也有它的价值,css定位更快,语法更简洁.这一篇css ...

随机推荐

  1. input 只能输入数字、字母、汉字等

    1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'')" onafte ...

  2. nginx 模块及运行机制 第三章

    概述:nginx服务器模块.web请求处理机制及事件驱动模型.进程功能和进程间通信 一:Nginx的模块化结构设计: 1.核心模块:指的是nginx服务器运行当中必不可少的模块,这些模块提供了最基本最 ...

  3. Maven+SSM框架(Spring+SpringMVC+MyBatis)(二)

    1.基本概念 2.开发环境搭建 3.Maven Web项目创建 4.SSM整合 此次整合我分两个配置文件: 1)分别是spring-mybatis.xml,包含spring和mybatis的配置文件, ...

  4. day04流程控制,if分支结构,while,for循环

    复习 ''' 1.变量名命名规范 -- 1.只能由数字.字母 及 _ 组成 -- 2.不能以数字开头 -- 3.不能与系统关键字重名 -- 4._开头有特殊含义 -- 5.__开头__结尾的变量,魔法 ...

  5. css实现横向进度条和竖向进度条

    一.横向进度条 <html> <head> <title>横向进度条</title> <style type="text/css&quo ...

  6. UVA11235 Frequent values

    思路 连续的值只会分布在一起成一个块 讨论两边的块,中间就是RMQ了 ST表即可 代码 #include <cstdio> #include <algorithm> #incl ...

  7. html css js 细节

    细节1 1.Chrome中文界面下会将小于12px的字体默认显示为12px,解决方法:在CSS中加入-webkit-text-size-adjust:none; 2.link可以加载除CSS以外的其他 ...

  8. HTTP协议中长连接与短连接的区别

    在HTTP/1.0中, 默认使用的是短连接.也就是说, 浏览器和服务器每进行一次HTTP操作, 就建立一次连接, 但任务结束就中断连接.如果客户端浏览器访问的某个HTML或其他类型的 Web 页中包含 ...

  9. 使用qrcode输入信息生成二维码包含二维码说明信息,点击转化为图片并下载

    说明:输入汉字和数字都可以识别并展示 <body> <h2 id="h2">二维码生成</h2> <br> <span id= ...

  10. [JavaScript-Function] Function Invocation/Call(函数调用) 以及call() and apply() 方法

    介绍:JS函数中的代码会被函数被invoke(调用)时执行. 函数被定义时代码不执行, 函数调用时函数内的代码会被执行. 常用的term是 call a function 而不是 invoke a f ...