解决Selenium弹出新页面无法定位元素问题
  问题来源
  一般来讲,咱们进行自动化登录,以后想直接进行对图书的续约操作,可是利用元素定位的方式,怎么都不到元素,我一直以为是我的规则用的不对,致使元素不到,其实,只是窗口句柄还停留在上一个页面算了!对于新弹出的页面尚未定位那怎么可能取得在新页面的元素呢!!这是新手(我)犯下最大的错误,只顾于对元素方式的定位,却没成心识到页面发生跳转后的handles的转变。
  请看测试;
#coding=utf-8
from selenium import webdriver
import time
browser=webdriver.Firefox()
("baidu")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
sreach_window=browser.current_window_handle  //此行代码用来定位当前页面
browser.find_element_by_xpath("/html/body/div[3]/div[4]/div/div[3]/div[4]/h3/a").click()
time.sleep(5)
  固然若是我一点都不改,也是进行不了测试的,这位大哥把注释符号写错了,不是//,而是#啊大哥
  ok,然后运行下:犯错了
  所以我感到好奇的是,这位大哥到底有无跑过这段代码,看着原创的样子应该没有剽窃才对啊,那应该是测试过代码才对,可是可重复性在哪?最后发现需要修改http成这样才能访问(大哥少加个/):
  ("baidu/")修改后代码如下:
#coding=utf-8
from selenium import webdriver
import time
browser=webdriver.Firefox()
("baidu/")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(1)
sreach_window=browser.current_window_handle #此行代码用来定位当前页面
time.sleep(2)
browser.find_element_by_xpath("/html/body/div[3]/div[3]/div/div[3]/div[4]/h3/a").click()#我这里修改了一下div[4],大哥的索引直接到有道翻译了,无益于下一步测试
time.sleep(1)
  ok,这次能正常索引到值,可是我要说的是可是
  这根本没有跳转页面!仍是在同一个页面进行操作的!若是我把大哥的代码改成:
  在我测试的时候,发生了奇怪的事情,一样的代码,有时候能跑有时候抛犯错误,我已设定休眠时间,莫非是我频繁访问致使百度封我?适才上述的代码我都实际测试过的,可是此刻又不能用了--wtf--,所以。我换了稳定的引擎,我采用bing搜索来试试,上面的全数作废,若是有人知道问题出在哪,请留言
selenium中xpath定位
  7.19补充
  应该是搜索引擎热点的问题,每次键入相同的值可能搜索结果首项会不一致的,百度可能更新热点比较快把,所以出现了我所谓不稳定的情况
  正题测试
  我和上述那位大哥不同的观点在于,他用的
  sreach_window=browser.current_window_handle
  方式并非能实现对新窗口句柄的捕捉,我以bing主页为测试页,从头构造了一下,
#coding=utf-8
from selenium import webdriver

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。