selenium的namespace错误与无法定位:NamespaceError: An attempt was made to create...andUnable to locate elemen

   日期:2020-05-30     浏览:120    评论:0    
核心提示:selenium报错:NamespaceError: An attempt was made to create or change an object in a way which is incorrect with regard to namespaces一、报错二、原因一、报错selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression /html/body/div/div[4]/pytho

selenium报错:NamespaceError: An attempt was made to create or change an object in a way which is incorrect with regard to namespaces'

  • 一、报错
  • 二、原因
  • 三、解决方法

说明:selenium中的窗口似乎视角窗口柄、窗口句柄,我在此处就叫窗口了

一、报错

第一个报错:namespace error
‘selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression’ “/html/body/div/div[4]/div[2]/diy:lawyee[2]/div[3]/div[6]/div/a[2]” is invalid: '‘NamespaceError: An attempt was made to create or change an object in a way which is incorrect with regard to namespaces’

第二个报错: Unable to locate element
但是出现另一个问题:就是无法定位,出现报错:

selenium.common.exceptions.NoSuchElementException: Message:: //div[@class="listTMain clearfix"]


但是确实是在元素所在的窗口,使用

browser.switch_to.window(browser.window_handles[1])

二、原因

xpath中有:
xpath语法

'//diy:lawyee[2]/div[@class="LM_tool clearfix"]/div[@class="fr tool_All"]/a[1]/label'

由于语法中存在标签:diy:lawyee导致的namespace错误

去掉 这个标签diy:lawyee,不报namespace error


第二个问题的原因:
浏览器的原因,我使用的是firefox浏览器,浏览器窗口定位的问题;例如:

此时窗口处于文书列表页


此时窗口处于首页

三、解决方法

第一个报错的解决方法,就是去掉标签,重新写一个不含这个会导致namespaceerror的标签

第二个报错解决方法:
但是重写后又会出现第二个报错:不能定位元素

这个报错也花了很久时间才发现,原因不明

在chrome浏览器中需要进行窗口移动,要在那个窗口进行操作就要移动到哪一个窗口,(默认处于第一个窗口)例如需要在第一个窗口操作则移至第一个窗口,命令为:

browser.switch_to.window(browser.window_handles[1])

其中的数字为试图移动到的窗口,0为第一个窗口,而1为第二个窗口,依次类推

但是在firefix中会自动移至当前窗口(默认是当前操作窗口),本以为不用这一命令,但是元素定位时却定位不到;然而使用该命令却出现以下报错:

IndexError: list index out of range

解决方法为:我想到的解决方法就是向chrome一样进行窗口移动,先由当前窗口移至第一个窗口,然后移动回来。
命令类似为:

browser.switch_to.window(browser.window_handles[0])
browser.switch_to.window(browser.window_handles[1])

第二个是要操作的窗口,我要操作的窗口为第二个窗口,
各位需要操作的窗口是什么就按照窗口所在的位置进行变动即可,如第三个则为:

browser.switch_to.window(browser.window_handles[3])

这样就可以了

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服