UI自动化中我遇到的问题整理

一、element not interactable

元素无法交互

1、隐藏元素

鼠标悬停:

 chain = ActionChains(self.driver)
 implement = self.driver.find_element_by_id("loginname")
 chain.move_to_element(implement).perform()

2、等待

time.sleep(3)

3、用js的方法点击

a = self.driver.find_elements_by_xpath("//dd[text()='外购件']")[0]
self.driver.execute_script('$(arguments[0]).click()', a)

二、Compound class names not permitted

classname不允许使用复合类名做参数,classname中含有空格

用driver.find_elements_by_css_selector("[class=‘fa fa-sign-out’]")[0](获取的是一个列表)

[]

三、 Element is not currently visible and may not be manipulated

元素当前不可见,不能操作

display状态,不可选

1、写死为block(不太好)

2、在其不为display时选中(有时始终为display)

3、通过其他标签获取

dl dd标签为了更好的显示内容,select在提交表单时用

四、selenium常用xpath定位方式

#按标签属性,查找属性name值为xxx的元素
find_element_by_xpath('//*[@name="xxx"]') #按标签文本,查找标签文本为xxx的元素
find_element_by_xpath('//*[text()="xxx"]') #按父元素属性,查找属性name值为xxx的下级第一个div元素
find_element_by_xpath('//*[@name="xxx"]/div[1]') #按子元素属性,查找属性name值为xxx的父元素
find_element_by_xpath('//*[@name="xxx"]/..') find_element_by_xpath('//*[@name="xxx"]/parent::') #按兄弟元素属性,查找属性name值为xxx的同级第一个div元素
find_element_by_xpath('//*[@name="xxx"]/../div[1]') find_element_by_xpath('//*[@name="xxx"]/preceding-sibling::a[1]')  #该节点的同级前一个元素
find_element_by_xpath('//*[@name="xxx"]/following-sibling::a[1]')  #该节点的同级后一个元素  #按模糊匹配
find_element_by_xpath('//*[contains(str1,str2)]') #str1为标签的属性或是文本,str2为要匹配的字符串
#组合定位 用于界面一个div下有两个一模一样的div,例如时间控件选择
find_element_by_xpath('//div[@name-"xxx"]/div[2]//div[@value="xxx"]')
find_element_by_xpath('//[@attribute_name1='attribute_value1'][@attribute_name2='attribute_value2]')
aa = self.driver.find_elements_by_xpath("//a[text()='不合格品']")
a = self.driver.find_elements_by_xpath("//a[contains(text(),'不合格品')]")

注意标签不要写错

注意xpath路径问题

扩展:(待整理)

获取标签内容

获取标签属性 detail_url = element.find_element_by_xpath(".//a").get_attribute(“href”)

获取标签状态

是否显示:使用element.is_displayed()方法

是否可用:dr.find_element_by_class_name(‘btn’).is_enabled()

是否被选中:element.is_selected()

另:

数据库1054错误解决办法:

1054, “Unknown column ‘xxx’ in ‘where clause’”
例如:一个hql语句:final String hql = “from ActiveCert ac where ac.issuerName=”+issueName";

设置issueName值为ysy,则错误如下:

Unknown column
‘ysy′ in ‘where clause’

sql中如果issueName是整型的倒不会出现什么错误,而如果sql中字符串类型必须要包含在引号内。

所以修改hql为:final String hql = “from ActiveCert ac where ac.issuerName=’”+issueName+"’";

则错误消失。。

你可能感兴趣的:(测试相关)