【问题标题】:How to double click an option in a multi select using Selenium and Python如何使用 Selenium 和 Python 双击多选中的选项
【发布时间】:2015-08-28 20:23:39
【问题描述】:

我有一个多选框,其中包含您必须双击才能将其发送到“已选择”字段的选项。无论我尝试什么,我似乎都无法让它发挥作用。选择 html 如下所示:

<select name="name1" id="id1" ondblclick="a lot of stuff">
    <option value='value1'>text1</option>
    <option value='value2'>text2</option>
    <option value='DoubleClickMe'>DoubleClickMe</option>
    <option value='value4'>text4</option>
    <option value='value5'>text5</option>
</select>

我想双击“DoubleClickMe”值将其发送到另一个字段。我试过了:

ret = driver.find_element_by_xpath("//select[@id='id1']/option[text()='DoubleClickMe']")

actionChains.double_click(ret).perform()

最初,这就像双击页面上的其他地方一样(至少突出显示其他一些文本)。现在......它似乎正在选择一堆选项来发送,就好像它点击了两次以上。同样,我尝试过:

actionChains.click(ret).click(ret).perform()

这个给我的结果和上一个一样。

在调试模式 (pdb) 下,我尝试发送以下垃圾邮件(每个都会选择该选项,但不会通过双击读取它:

ret.click()

ret = driver.find_element_by_xpath("//select[@id='id1']")
select = Select(ret)
select.select_by_visible_text("DoubleClickMe")

select.select_by_value("DoubleClickMe")

我尝试将这些命令发送到足够快的位置,如果工作正常,它应该很容易被视为双击。

我有什么遗漏或做错了吗?

我正在使用:

Windows 7 64-bit
Selenium 2.44
Python 2.7
IE11

【问题讨论】:

    标签: python html selenium multi-select


    【解决方案1】:

    只是抛出想法......虽然没有测试过这个

    (已编辑)

    user = self.find_element_by_id("id1")
    for option in user.find_elements_by_tag_name("option"):
       if option.text == "Option to be selected":
          option.click()
    

    【讨论】:

    • 没有用:/它只是选择了选项;我尝试了 double_click(option) 和 click(option)
    • 也许尝试不同的网页? (当然不是永久的,只是为了衡量网页是否很奇怪......)
    • 我已经尝试了 3 个(每个都有自己的服务器)——也许它只是讨厌我
    • 可能是 IE 的问题。试试铬
    • 啊修好了。我认为......只需使用 option.click() (参见新编辑的代码)
    【解决方案2】:

    试试下面的逻辑

    menu = driver.find_element_by_css_selector("#id1")
    option = menu.find_element_by_css_selector("option[value='DoubleClickMe']")
    
    ActionChains(driver).double_click(option).perform()
    

    更新 1

    尝试以下逻辑。 首先将鼠标移动到该元素并尝试在不传递元素的情况下双击。

    ActionChains(driver).move_to_element(option).double_click().perform()
    Or
    ActionChains(driver).move_to_element(option).click().click().perform()
    

    【讨论】:

    • 奇怪...它正在做的事情是突出显示页面左上角的文本...如果我向下移动鼠标,就好像它正在按住单击(突出显示我悬停)
    • 我不太确定 python 代码(我使用 Java + WebDriver)。我刚刚更新了选项元素的定位器。试试看吧。
    • 看来问题出在 ActionChains 上。如果我只是简单地使用 option.click(),它将单击该选项(因此它会找到正确的元素)。但是,当我在 ActionChains 中尝试时,它变得很时髦
    • 我在回答中添加了另一个可能的解决方案。试试看吧。
    • 每当我使用 ActionChains 时,它就像在屏幕的左上角工作(我试图双击中间的东西)。我看过了,那里没有与选择框相似的html;另外,如果我只使用 option.click(),它会正确单击该选项 - 只是在使用 ActionChains 时不会这样做
    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2021-01-06
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多