一、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+"’";
则错误消失。。