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()没有被调用。

你知道怎么解决这个问题吗?

这似乎是一个已知的问题

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

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

在讨论中有一个报告的解决方法

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

该元素是一个html-select元素,所以你需要使用Select()类。

选择文本为项目1<option>使用Selenium,您需要为element_to_be_clickable()诱导WebDriverWait,您可以使用以下定位器策略之一:

  • UsingCSS_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')
    
  • UsingXPATH:

    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
    

引用

你可以在下面找到一些相关的讨论:

  • 如何使用Selenium和Python从下拉菜单中选择一个选项

相关内容

  • 没有找到相关文章

最新更新