即使x路径正确,Selenium Python脚本也不会引发任何元素错误异常?

时间:2016-07-24 11:12:07

标签: python python-2.7 selenium selenium-webdriver selenium-chromedriver

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
driver=webdriver.Chrome()
driver.get("https://paytm.com/")
driver.maximize_window()
driver.find_element_by_class_name("login").click()
driver.implicitly_wait(10)
driver.find_element_by_xpath("//md-input-container[@class='md-default-theme md-input-invalid']/input[@id='input_0']").send_keys("99991221212")

在上面的代码中,我使用fire bug验证了xpath,突出显示了正确的元素。但是当脚本运行失败时?你能帮帮我一个人吗?

2 个答案:

答案 0 :(得分:3)

在硒中,每个框架都单独处理。由于登录位于单独的iframe元素中,因此您需要先使用以下命令切换到它:

iframe = driver.find_elements_by_tag_name('iframe')[0]
driver.switch_to_frame(iframe) 

之前尝试与其元素进行互动。

或者在这种情况下,你会等待框架存在,它将是:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://paytm.com/")
driver.maximize_window()

wait = WebDriverWait(driver, 10)

wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "login"))).click()
wait.until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe")))

_input = wait.until(EC.visibility_of_element_located((By.ID,"input_0")))
_input.send_keys("99991221212")

答案 1 :(得分:0)

您应该尝试使用WebDriverWait等到页面上显示input元素,如下所示: -

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://paytm.com/")
driver.maximize_window()

wait = WebDriverWait(driver, 10)

wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "login"))).click()

#now switch to iframe first      
wait.until(EC.frame_to_be_available_and_switch_to_it((By.TAG_NAME, "iframe")))

input = wait.until(EC.visibility_of_element_located((By.ID, "input_0")))
input.send_keys("99991221212")

希望它有帮助...:)