类型错误:尝试单击“datepicker”时,“str”对象不可调用

-2 python xpath python-2.7 selenium-webdriver

相关的 HTML

<div id="datepickerbox" class="ym-gbox-left">
 <div class="datepick_label">
  <div id="datepicker" class="hasDatepicker">
   <div class="ui-datepicker-inline ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" style="display: block;">
Run Code Online (Sandbox Code Playgroud)

我的代码

self.driver.find_element(By.XPATH('//*[@id="datepicker"]')).click()
dateWidget = self.driver.find_element(By.ID("ui-datepicker-div"))
rows = dateWidget.find_element_by_tag_name("tr")
columns = dateWidget.find_element_by_tag_name("td")
for cell in columns: self.driver.findElement(By.LINK_TEXT("20")).click()
Run Code Online (Sandbox Code Playgroud)

我收到的错误

self.driver.find_element(By.XPATH('//*[@id="datepicker"]')).click()
TypeError: 'str' object is not callable
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

pok*_*oke 5

根据手册的\xe2\x80\x9cLocation elements\xe2\x80\x9d 部分By.XPATH,似乎是一个字符串,正确的用法是这样的:

\n\n
self.driver.find_element(By.XPATH, \'//*[@id="datepicker"]\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

从错误消息来看这也是有意义的,因为您正在调用By.XPATH. 目前的消息来源也证实了这一点。

\n\n

不幸的是,Selenium API 在不同平台上并不真正一致。您正在使用的语法,调用By.xpath()是由 Java 使用的,而在 C# 中,您还必须调用By.Xpath(). 因此,当您看到其他调用 it\xe2\x80\x99 的示例时,很自然地您会感到困惑,而在 Python 中,您突然需要传递它。因此,您不应该\xe2\x80\x99 盲目地相信您在互联网上找到的示例(例如这个),但始终检查它们是哪种语言。并检查有疑问的文档和/或来源。

\n