Django Selenium 测试 onclick 不调用函数

Django Selenium test onclick not calling function

在对我的主页进行 Selenium 测试时,我 运行 遇到了以下问题:

我在页面上有很多按钮。单击其中一个时,选择列表会通过 javascript 函数填充多个选项。单击其中一个按钮后,选择列表可能如下所示:

<select id="selectionList" name="List1" size="10" style="width:100%;">
<option style="color:#0275d8">Item Type 1</option>
<option onclick="onSelection()" id="Item_1">Item 1</option>
<option onclick="onSelection()" id="Item_2">Item 2</option>
<option onclick="onSelection()" id="Item_3">Item 3</option>
<option onclick="onSelection()" id="Item_4">Item 4</option>
<option onclick="onSelection()" id="Item_5">Item 5</option>
<option onclick="onSelection()" id="Item_6">Item 6</option>
<option style="color:#0275d8">Item Type 2</option>
<option onclick="onSelection()" id="Item_7">Item 7</option>
<option onclick="onSelection()" id="Item_8">Item 8</option>
<option onclick="onSelection()" id="Item_9">Item 9</option>
<option onclick="onSelection()" id="Item_10">Item 10</option>
</select>

在我的测试中,我使用以下方法点击其中一项。

WebDriverWait(self.browser, 60).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='Item_1']"))).click()

我看到第 1 项被突出显示,但没有调用 onSelection() 函数。

我也试过这个

time.sleep(10)
self.browser.find_element_by_id("Item_1").click()

项目 1 再次突出显示,但未调用函数 onSelection()。

知道如何解决这个问题吗?

该元素是 元素,因此您需要使用 Select() class.

使用 you need to induce for the element_to_be_clickable() and you can use either of the following :

select 文本作为 项目 1<option>
  • 使用CSS_SELECTOR:

    select = Select(WebDriverWait(self.browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "select#selectionList[name='List1']"))))
    select.select_by_visible_text('Item 1')
    
  • 使用XPATH:

    select = Select(WebDriverWait(self.browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='selectionList' and @name='List1']"))))
    select.select_by_visible_text('Item 1')
    
  • 注意:您必须添加以下导入:

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

参考资料

您可以在以下位置找到一些相关讨论:

这似乎是一个已知问题

https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/2556

问题被标记为已关闭,但似乎只是因为原始报告者放弃了问题 and/or 因为它是从旧问题跟踪器报告的导入错误。

讨论中报告了一种解决方法

driver.action.click_and_hold(element).perform
sleep(1)
driver.action.release.perform

我认为代码是非正式的,因为 AFAIK 没有 driver.action。相反,你必须做 actions = ActionChains(driver).

查看此处了解更多信息:https://www.tutorialspoint.com/what-are-actionchains-class-in-selenium-with-python