帮助中心

   

热门搜索: 免费续期  推广  永久会员

Python3 Selenium定位不到元素的原因及解决方案(2)

各位在使用Python3 Selenium的时候,有没有曾经遇到定位不到元素呢?这个时候,你是怎么去解决的?下面让代理IP为大家介绍不同原因的解决思路。

Python3 Selenium定位不到元素的原因及解决方案

在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况:

报错信息: no such element: Unable to locate element: {“method”:”xpath”,”selector”:”xpath”}

之前迅联加速已经介绍了前4种原因跟解决方案,下面我们来继续针对这个问题来把剩下了几个原因进行梳理。

5、原因五以及解决方案

(1)原因

二次定位,如弹出框登录:如百度登录弹出框登录百度账号,需先定位到百度弹出框,然后再定位到用户名密码登录。

(2)解决方案

”’

Project:登录百度账号

”’

from selenium import webdriver

import time

driver = webdriver.Firefox()

driver.get(“http://www.baidu.com/”)

time.sleep(3)

#点击登录:有些name为tj_login的元素为不可见的,点击可见的那个登录按钮即可。

#否则会报:ElementNotVisibleException

element0=driver.find_elements_by_name(“tj_login”)

for ele0 in element0:

if ele0.is_displayed():

ele0.click()

#在登录弹出框,需先定位到登录弹出框

#否则会报:NoSuchElementException

element1=driver.find_element_by_class_name(“tang-content”)

element11=element1.find_element_by_id(“TANGRAM__PSP_8__userName”)

element11.clear()

element11.send_keys(“登录名”)

element2=element1.find_element_by_id(“TANGRAM__PSP_8__password”)

element2.clear()

element2.send_keys(“密码”)

element3=element1.find_element_by_id(“TANGRAM__PSP_8__submit”)

element3.click()

element3.submit()

try:

assert “登录名” in driver.page_source

except AssertionError as e:

print “登录失败”

else:

print “登录成功”

time.sleep(3)

finally:

print “测试记录:已测试”

driver.close()

6、原因六以及解决方案

(1)原因

窗口切换:窗口句柄还处在上一个窗口,导致无法定位新窗口的元素。

(2)解决方案

String currentWindow = driver.getWindowHandle();//获取当前窗口句柄

Set<String> handles = driver.getWindowHandles();//获取所有窗口句柄

for(String windowId : handles){

if(!windowId.equals(currentWindow)){

driver.switchTo().window(windowId);

System.out.println(driver.getCurrentUrl());

break;

}

}

7、原因七以及解决方案

(1)原因

不可见元素定位:如上百度登录代码,通过名称为tj_login查找的登录元素,有些是不可见的。

(2)解决方案

加一个循环判断,找到可见元素(is_displayed())点击登录即可。

8、原因八以及解决方案

(1)原因

firefox安全性强,不允许跨域调用出现报错:因为firefox安全性强,不允许跨域调用。

(2)解决方案

Firefox 要取消XMLHttpRequest的跨域限制的话,

第一是从 about:config 里设置:signed.applets.codebase_principal_support = true; (地址栏输入about:config 即可进行firefox设置)

第二就是在open的代码函数前加入类似如下的代码:

try{

netscape.security.PrivilegeManager.enablePrivilege(“UniversalBrowserRead”);

} catch (e) {

alert(“Permission UniversalBrowserRead denied.”);

}

以上就是Python3 Selenium遇到定位不到元素的导致原因以及解决方法,希望能够对各位使用者起到帮助。

关闭
19907977089
关注微信公众号,免费送30分钟时长