Web UI 自动化测试学习笔记
1.读取csv文件
1.1 字符串转换成数字
//将某一单元格的值转换成字符串
string Item = Baseline.Row[i][j].ToString();
//去除\
string Item = Regex.replace(Item,"\"","");
//将字符串转换成double数据
double BaselineVal=Convert.ToDouble(Item);
1)使用try...catch...
try{
double BaselineVal=Convert.ToDouble(Item);
}
catch{
}
2)使用Regex,判断字符串是否为数字字符串
转载:
【方法二】:通过正则表达式来判断。 用正则表达式来验证字符串是否为数字字符串。我们要用到Regex类的isMatch()方法。该类在System.Text.RegularExpressions; 您可以通过using System.Text.RegularExpressions;导入命名空间来访问Regex类。也可以直接通过System.Text.RegularExpressions.Regex 来访问。
protected bool isNumberic(string message,out int result)
{
System.Text.RegularExpressions.Regex rex=
new System.Text.RegularExpressions.Regex(@"^\d+KaTeX parse error: Expected 'EOF', got '}' at position 185: … return false; }̲ 通过正则表达式判断是否匹配,…"))
{
//成功
Page.ClientScript.RegisterStartupScript(this.GetType(), “”, “”);
}
补充
//正则匹配 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):\x00-\xff 匹配空行的正则表达式:\n[\s| ]\r 匹配HTML标记的正则表达式:/<(.)>.</\1>|<(.) />/ 匹配首尾空格的正则表达式:(^\s)|(\s$)(像vbscript那样的trim函数) 匹配Email地址的正则表达式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)* 匹配网址URL的正则表达式:http://([\w-]+.)+[\w-]+(/[\w- ./?%&=]*)?
以下是例子: 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中文:οnkeyup=“value=value.replace(/\u4E00-\u9FA5/g,’’)” onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/\u4E00-\u9FA5/g,’’))” 1.用正则表达式限制只能输入全角字符: οnkeyup=“value=value.replace(/\uFF00-\uFFFF/g,’’)” onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/\uFF00-\uFFFF/g,’’))” 2.用正则表达式限制只能输入数字:οnkeyup="value=value.replace(/\d/g,’’) "onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/\d/g,’’))” 3.用正则表达式限制只能输入数字和英文:οnkeyup="value=value.replace(/[\W]/g,’’) "onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/\d/g,’’))”
2.拖动元素问题
WebDriver相关API:
//从元素From向左偏移OffsetX, 向右偏移OffsetY
driver.DragAndDropByOffset(From,int OffsetX,int OffsetY);
//从From偏移到To
driver.DragAndDrop(From,To);
//按住From,鼠标移动到To,释放鼠标
driver.ClickAndHold(From).MoveToElement(To).Release().Build().Perform();
//鼠标向右偏移x,向下偏移y(遇到不好区分的两个元素,微移鼠标实现选取)
driver.MoveByOffset(x,y)
3.Input输入框无法获取文本及更改文本
常规办法:
//获取文本
driver.findElementByXpath("Locator").Text;
//更改文本
driver.findElementByXpath("Locator").Click().Clear().Send_keys("Keys").Build().Perform();
Javascript语句处理:
//获取文本
return driver.execute_script("ducument.getElementById('id').value")
//更改文本
driver.executeScript("ducument.getElementById('id').value='target'")
or
//$("#id").val(“value”);
4.Xpath定位方式
转:https://www.cnblogs.com/wangyi0419/p/11644394.html
[CSDN]Python Selenium Xpath高级定位用法
xpath定位:
- 文本定位,//a[text()='hahahah']
- 模糊定位: //input[contains(@class,'abc')],//input[contains(text(),'abcde')],//div[starts-with(@href,'http')],//div[ends-with(@href,'com')]
- 逻辑定位://div[@id='hehe' and/or @class='haha'] 有的页面有动态id,并且id中一部分是不变的,就可用contains定位
-
# 匹配id以submit开头的元素,如:id='submit'
driver.find_element_by_xpath("//input[start-with(@id,'submit')]") -
# 匹配所有input元素中含有属性的值为readonly的元素
driver.find_element_by_xpath("//input[@*='readonly']")) -
# 匹配id以submit结尾的元素,如:id='submit'
driver.find_element_by_xpath("//input[ends-with(@id,'submit')]") -
# 匹配id中含有submit的元素,如:id='submit'
driver.find_element_by_xpath("//input[contains(@id,'submit')]")
# 匹配name属性中包含na关键字的页面元素
driver.find_element_by_xpath("//input[contains(@name,'na')]") -
# 表示过虑掉在 div id='query_reulst_box' 的下的 style 标签和 meta 标签
driver.find_element_by_xpath("//div[@id='query_reulst_box']/*[not(name()='style' and name()='meta')]//text()) -
# 表示div元素->form元素->input元素的最后一个子元素,得到id值为e2的E元素
driver.find_element_by_xpath("/div/form/input[last()]") -
# 查找所有input标签中含有type属性的元素
driver.find_element_by_xpath("//input[@type]")
# 查找所有a标签中含有onclick属性的元素
driver.find_element_by_xpath("//a[@onclick]")
.....
5.三种等待方式
转:https://www.cnblogs.com/wangyi0419/p/11644394.html
强制等待sleep:
不够灵活,有时会浪费时间,不建议在实际项目中使用,多用于脚本调试;
隐式等待implicitly_wait(time):
针对页面,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。 这样的隐式等待会有个坑,我们都知道js一般都是放在我们的body的最后进行加载,实际这是页面上的元素都已经加载完毕,我们却还在等待全部页面加载结束。隐式等待对整个driver周期都起作用,在最开始设置一次就可以了。
显式等待WebDriverWait:
python版
程序每隔0.5秒(默认)检索一下页面,如果给定的条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。 隐式等待和显示等待都存在时,超时时间取二者中较大的。 至于等待的条件expected_conditions,那真是五花八门:
locator = (By.ID,'kw')
driver.get(base_url)
WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道"))
'''判断title,返回布尔值'''
WebDriverWait(driver,10).until(EC.title_contains(u"百度一下"))
'''判断title,返回布尔值'''
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
'''判断某个元素是否被加到了dom树里,并不代表该元素一定可见,如果定位到就返回WebElement'''
WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su')))
'''判断某个元素是否被添加到了dom里并且可见,可见代表元素可显示且宽和高都大于0'''
WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw')))
'''判断元素是否可见,如果可见就返回这个元素'''
WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav')))
'''判断是否至少有1个元素存在于dom树中,如果定位到就返回列表'''
WebDriverWait(driver,10).until(EC.visibility_of_any_elements_located((By.CSS_SELECTOR,'.mnav')))
'''判断是否至少有一个元素在页面中可见,如果定位到就返回列表'''
WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'设置'))
'''判断指定的元素中是否包含了预期的字符串,返回布尔值'''
WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下'))
'''判断指定元素的属性值中是否包含了预期的字符串,返回布尔值'''
\#WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it(locator))
'''判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False'''
\#注意这里并没有一个frame可以切换进去
WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap')))
'''判断某个元素在是否存在于dom或不可见,如果可见返回False,不可见返回这个元素'''
\#注意#swfEveryCookieWrap在此页面中是一个隐藏的元素
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click()
'''判断某个元素中是否可见并且是enable的,代表可点击'''
driver.find_element_by_xpath("//*[@id='wrapper']/div[6]/a[1]").click()
\#WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='wrapper']/div[6]/a[1]"))).click()
\#WebDriverWait(driver,10).until(EC.staleness_of(driver.find_element(By.ID,'su')))
'''等待某个元素从dom树中移除'''
\#这里没有找到合适的例子
WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]")))
'''判断某个元素是否被选中了,一般用在下拉列表'''
WebDriverWait(driver,10).until(EC.element_selection_state_to_be(driver.find_element(By.XPATH,"//*[@id='nr']/option[1]"),True))
'''判断某个元素的选中状态是否符合预期'''
WebDriverWait(driver,10).until(EC.element_located_selection_state_to_be((By.XPATH,"//*[@id='nr']/option[1]"),True))
'''判断某个元素的选中状态是否符合预期'''