当我尝试使用切换到窗口来查找和处理元素时,会显示元素未找到错误

from selenium import webdriver from selenium.webdriver.common.by import 按导入时间

类 SwtWin():

def swwn(self):

    driver=webdriver.Firefox()

    driver.get("https://learn.letskodeit.com/p/practice")

    driver.implicitly_wait(2)

    ParentWin=driver.current_window_handle

    print(ParentWin)

    driver.find_element_by_id("openwindow").click()

    windows=driver.window_handles

    print(windows)

    for Tab in windows:

          print(Tab)

          if Tab != ParentWin:

             print("Switched to sub window")

             driver.switch_to.window(Tab)

             print(Tab)

             sel=driver.find_element_by_partial_link_text("Login")

             sel.click()

             driver.close()

             break

    driver.switch_to.window(ParentWin)

    driver.execute_script("window.scrollBy(0, 1000);")

    driver.quit()

SwtWin().swwn()

http://img.mukewang.com/6357956f0001b97213470538.jpg

互换的青春
浏览 88回答 1
1回答

绝地无双

如果在元素出现在页面上之前运行元素搜索,则无法找到该元素。在给定的代码中,当driver.find_element_by_id("openwindow").click()被执行时,它会打开一个新页面并且sel=driver.find_element_by_partial_link_text("Login")由于元素未呈现(网络问题、笔记本电脑速度慢等)而失败。在这种情况下,标准解决方案是使用WebDriverWaitclass 来等待元素的状态,并且只有在出现所需状态(例如,页面上存在元素)时,才能继续执行。这是示例from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditionsfrom selenium.webdriver.support.wait import WebDriverWaitdriver = webdriver.Firefox()driver.get("https://learn.letskodeit.com/p/practice")driver.implicitly_wait(2)ParentWin = driver.current_window_handleprint(ParentWin)driver.find_element_by_id("openwindow").click()windows = driver.window_handlesprint(windows)for Tab in windows:    print(Tab)    if Tab != ParentWin:        print("Switched to sub window")        driver.switch_to.window(Tab)        print(Tab)        # wait until "Login" appers on the page        sel = WebDriverWait(driver, 5).until(            expected_conditions.visibility_of_element_located(                (By.PARTIAL_LINK_TEXT, "Login")            )        )        # work with login button        sel.click()        driver.close()        breakdriver.switch_to.window(ParentWin)driver.execute_script("window.scrollBy(0, 1000);")driver.quit()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python