【问题标题】:Unable to perform click action in selenium python无法在 selenium python 中执行单击操作
【发布时间】:2013-11-04 14:11:30
【问题描述】:

我正在 python 中使用 selenium 编写一个测试脚本。我有一个包含这样的树视图对象的网页:

我想遍历菜单以转到所需的目录。加号/减号指示的相应 HTML 代码如下:

<a onclick="changeTree('tree', 'close.gif', 'open.gif');">
    <img id="someid" src="open.gif" />
</a>

图片的src属性可以是open.gifclose.gif

我可以通过检查img 标签的src 属性来检测天气的好坏。我还可以使用.find_element_by_xpath("..") 轻松访问父标签a

问题是我无法在imga 标签上执行点击操作。

我试过webdriver.Actions(driver).move_to_element(el).click().perform();但它没有用。

我想我应该提到访问元素没有问题,因为我可以打印它们的所有属性;我只是无法对它们执行操作。有什么帮助吗?

编辑 1:

下面是折叠和展开树的js代码:

function changeTree(tree, image1, image2) {
    if (!isTreeviewLocked(tree)) {
        var image = document.getElementById("treeViewImage" + tree);
        if (image.src.indexOf(image1)!=-1) {
            image.src = image2;
        } else {
            image.src = image1;
        }

        if (document.getElementById("treeView" + tree).innerHTML == "") {
            return true;
        } else {
            changeMenu("treeView" + tree);
            return false;
        }
    } else {
        return false;
    }
}

编辑 2:

我在 Google 上搜索了几个小时,发现触发 Javascript 事件和来自网络驱动程序的点击操作存在问题。此外,我的网页中有一个span 标记,它有一个onclick 事件,我也有这个问题。

【问题讨论】:

  • 我假设没有错误被抛出?附近是否有附加了 javascript 的元素?
  • @MrTi,是的,没有错误,当然还有一些js代码。我不知道这怎么可能相关。
  • 你能发布监听加/减点击事件的javascript代码吗?
  • @MrTi,我把问题里的js代码贴出来了,请问js代码和问题的关系吗?
  • 我正在寻找在点击发生时调用changeTree() 的代码。这将有助于确保您的 selenium 代码点击正确。

标签: python selenium click dom-events


【解决方案1】:

经过.execute_script("changeTree();").submit() 等尝试后,我通过使用ActionChains 类解决了这个问题。现在,我可以单击所有具有 java-script 事件的元素为onclick。我使用的代码是这样的:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('someURL')
el = driver.find_element_by_id("someid")
webdriver.ActionChains(driver).move_to_element(el).click(el).perform()

我不知道是我自己遇到的还是怎么回事,但我发现我应该在键盘命令之前找到该元素;否则脚本不会执行该操作。我认为这与陈旧的元素或类似的东西有关;总之,谢谢大家的关注。

【讨论】:

  • 这里的驱动是什么?还有什么是webdriver?
  • @Zeinab Abbasi,太棒了!应该是“el = driver.find_element_by_id("someid")”?
  • @MarkK 你说得对!这是一个错字!谢谢!
  • @LawrenceDeSouza driver 是您设置为 webdriver.Firefox() 实例的名称。 webdriverselenium 模块中的类 webdriver。使用ActionChains 时未将其设置为与driver 相同的名称,因此可能难以理解。你也可以eldriver = webdriver.ActionChains(etcetc).move(etc).click(etc) 然后eldriver.perform()
猜你喜欢
  • 1970-01-01
  • 2020-08-21
  • 2023-03-22
  • 2019-11-21
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多