8

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

在此处输入图像描述

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

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

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

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

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

我试过了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:

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

4

1 回答 1

20

经过一些尝试,如.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()

我不知道它是否只是发生在我身上或发生了什么,但我发现我应该在键盘命令之前找到该元素;否则脚本不会执行该操作。我认为这与陈旧的元素或类似的东西有关;无论如何,感谢大家的关注。

于 2013-11-05T10:15:12.783 回答