Selenium 2(Python实现)入坑01_NoSuchElementException

       在看《Selenium2自动化测试实战》4.6获得验证信息时出现各种NoSuchElementException问题,甚是崩溃,尝试各种元素定位方法,都以失败告终,最后发现Selenium使用webdriver只能在一个页面识别,而126邮箱的登陆页面嵌套着frame,因此需要先跳转至对应frame,才能使用元素定位法。

        另外,具体定位问题可参考:Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException),我也是参考这一篇博客的,但是对于126对页面的修改使得frame跳转不能直接使用id,后续代码中有需改方法。

1. 我遇到的问题

(1)用户名、密码、frame的id是动态变化的,所以不能用id了;

(2)登陆框,嵌在frame中,所以不正确跳转frame就不能定位元素。

2. 解决

(1)查看页面后发现用户名和密码框对应的class是不改变的,直接使用class

(2)修改参考博客中driver.switch_to_frame('x-URS-iframe') 为driver.switch_to.frame("")。括号中的内容是可以填id或那么,因为id不可用,所以填name,html页面中name=“”。

(3)发现find_element_by_xpath定位方法是最为通用的,可以使用xpath定位到大部分元素。

3. 代码

from selenium import webdriver
from time import *

driver = webdriver.Firefox()
driver.get("http://www.126.com")

#sleep延迟用于更好的看执行效果
sleep(3)
driver.switch_to.frame("")

print("Login Before"+"="*30)

title = driver.title
print("title:",title)

now_url = driver.current_url
print(now_url)

sleep(3)
driver.find_element_by_xpath("//input[@class='j-inputtext dlemail j-nameforslide']").clear()
driver.find_element_by_xpath("//input[@class='j-inputtext dlemail j-nameforslide']").send_keys("username")
sleep(3)
driver.find_element_by_xpath("//input[@class='j-inputtext dlpwd']").clear()
driver.find_element_by_xpath("//input[@class='j-inputtext dlpwd']").send_keys("password")
sleep(3)
driver.find_element_by_xpath("//a[@id='dologin']").click()

print("Login after"+"="*30)

title = driver.title
print("title:",title)

now_url = driver.current_url
print(now_url)

user = driver.find_element_by_xpath("//span[@id='spnUid']").text
print(user)

driver.quit()

4. 其他参考

(1)用firefox获取html页面元素的Xpath

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值