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()。
知道如何解决这个问题吗?
该元素是 html-select 元素,因此您需要使用 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
在对我的主页进行 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()。
知道如何解决这个问题吗?
该元素是 html-select 元素,因此您需要使用 Select()
class.
使用 element_to_be_clickable()
and you can use either of the following
<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