selenium with python:driver.title与实际页面标题不同

时间:2016-11-14 19:01:13

标签: python selenium

我在python上编写了一个代码,必须检查加载的页面是否具有预期的标题。但是在页面加载后,行print(driver.title)打印出“Google”而不是预期的“狗 - Google搜索”,您可以在页面源(<title> dog - Google Search </title>)上找到它。

问:为什么driver.title是“谷歌”而不是我们在标题标签之间的内容(“狗 - 谷歌搜索”)?

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

driver = webdriver.Firefox(executable_path = "/usr/local/bin/geckodriver")
driver.get("https:www.google.com") # opens the browser
# finds an input field and paste "dog" into it and then presses "Return"
search_field = driver.find_element_by_name("q")
search_field.send_keys("dog")
search_field.send_keys(Keys.RETURN)


# waits until the title of the page appears)
WebDriverWait(driver, 100).until
(
     EC.presence_of_element_located((By.XPATH, "/html/head/title"))

)

print(driver.title) # prints driver.title (in reality it prints "Google" not "dog - Google Search")

#checks if the title is "dog - Google Search" 
if driver.title == "dog - Google Search":
    print("It works!")
else:
    print("NO JOB YET")

driver.close()

2 个答案:

答案 0 :(得分:2)

需要更改预期条件,因为presence_of_element_located在此方案中保持为true,因为标题仍然可见,因为搜索页面已打开,因此它并不真正等待标题更新。相反,您应该等到标题中的文本更改为预期条件下的预期,如下所示。

WebDriverWait(driver, 10).until(
   EC.text_to_be_present_in_element((By.XPATH, "/html/head/title"), "dog - Google Search")
)

这将轮询DOM 10秒钟,如果找到标题匹配,它将继续下一条指令。

有关详细信息,请参阅Selenium docs on waits

答案 1 :(得分:1)

好的,您必须使用等待条件才能更改标题。 Google会在您输入后立即显示搜索结果。在程序更改之前,程序不会有窗口等待。因此,按Enter或搜索按钮后,您必须明确等待至少1秒才能更改标题。

希望有所帮助。