如何使用onclick事件作为webdriver中的选择器?

时间:2018-07-08 16:17:43

标签: python selenium selenium-webdriver xpath webdriver

以下是元素:

<label title="Place Order" style="cursor: pointer" onclick="AjaxPageLoad(fno, 'FNOOrder');">Place Order<div></div></label>

我正在尝试单击此按钮,但是需要使用@onclick作为主要区别。我读了其他类似的问题,但似乎无法解决这个问题:

driver.find_element_by_xpath("//a[contains(@onclick,'fno')]").click()

driver.find_element_by_xpath("//a[contains(@onclick,'FNOOrder')]").click()

我得到的错误:

ElementNotInteractableException: Message: Element <a id="lnkFNO" class="active" href="javascript:void(0)"> could not be scrolled into view

但是该元素是可见的,因此我认为xpath必须是错误的。

2 个答案:

答案 0 :(得分:1)

根据 HTML ,您已经共享了使用onclick事件单击所需元素的步骤,必须引发 WebDriverWait ,您可以使用以下解决方案:

  • xpath 使用 onclick

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"]"))).click()
    
  • xpath 使用 onclick title

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@title='Place Order'][@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"]"))).click()
    
  • xpath 使用 onclick 标题 innerHTML

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[@title='Place Order'][@onclick=\"AjaxPageLoad(fno, 'FNOOrder');\"][contains(.,'Place Order')]"))).click()
    

注意:您必须添加以下导入:

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

答案 1 :(得分:0)

尝试使用css选择器,如果您熟悉Web开发,应该会更容易。

driver.find_element_by_css_selector("label[onclick*=fno]").click()

以上代码将选择带有onclick参数的标签包含'fno'字符串。在这里您可以找到所有选择器:https://www.w3schools.com/cssref/css_selectors.asp