无法使用selenium在onclick中执行javascript

时间:2013-07-25 06:49:48

标签: javascript python selenium

使用selenium(使用python绑定),我正在处理一个几乎完全是AJAX的网页;包括超链接。我没有使用element.click()方法,而是希望在标签的“onclick”属性中执行javascript:

标签:

<a onclick="javascript:setEvent(event);requisition_openRequisitionDescription('requisitionListInterface','actOpenRequisitionDescription',_ftl_api.lstVal('requisitionListInterface', 'requisitionListInterface.listRequisition', 'requisitionListInterface.d327682e687', this),'requisitionList');return ftlUtil_followLink(this);" href="#" title="View this job description" id="requisitionListInterface.reqTitleLinkAction.row1">

代码:

from selenium import webdriver
firefox = webdriver.Firefox()
firefox.get("some_url")
elem = firefox.find_element_by_id("requisitionListInterface.reqTitleLinkAction.row1")
jcode = elem.get_attribute("onclick")
firefox.execute_script(jcode)

错误:

WebDriverException: Message: u'event is not defined' ; Stacktrace:

声明:

我不懂Javascript。据我所知,它期待'事件'变量,但我想它与回调有关?

编辑:

我假设javascript正在修改href属性,但是javascript可以在不修改超链接的情况下重定向浏览器吗?

3 个答案:

答案 0 :(得分:4)

您只需点击它即可。

elem.click()

onclick事件将自动触发。

答案 1 :(得分:0)

除非selenium做了一些疯狂的事情,我怀疑,onclick =“javascript:setEvent(event)是无效的javascript。然而,字符串的其余部分是。当执行此代码块时,它会尝试调用一个名为setEvent的函数变量事件,仍未定义。

<a onclick="requisition_openRequisitionDescription('requisitionListInterface','actOpenRequisitionDescription',_ftl_api.lstVal('requisitionListInterface', 'requisitionListInterface.listRequisition', 'requisitionListInterface.d327682e687', this),'requisitionList');return ftlUtil_followLink(this);" href="#" title="View this job description" id="requisitionListInterface.reqTitleLinkAction.row1">

因为您的脚本中没有其他地方需要事件,只需删除它吗?

答案 2 :(得分:0)

from selenium.webdriver.common.action_chains import ActionChains
firefox = webdriver.Firefox()
# You need a mouse to hover the span elements here, and please try this way :)
self.mouse = webdriver.ActionChains(firefox)    

# You need get the span element from its xpath:
elem = firefox.find_element_by_id("requisitionListInterface.reqTitleLinkAction.row1")

# Then you hover on span element by mouse and click on it:
self.mouse.move_to_element(elem).click().perform()