一尘不染

无法在Selenium Python中执行点击操作

selenium

我正在使用python中的硒编写测试脚本。我有一个网页,

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

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

The src 图像的属性可以是 open.gif or close.gif.

我可以通过简单地检查标签的 src属性来检测天气的正负 img 我也可以很容易地访问父标签, a,
by using .find_element_by_xpath("..").

The problem is that I can’t perform the click action not on the img nor the
a tag.

I’v tried webdriver.Actions(driver).move_to_element(el).click().perform();
but it did not work.

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

编辑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;
    }
}

EDIT 2:

我在Google上搜索了几个小时,发现从Java驱动程序触发Javascript事件和click操作存在问题。另外span,我的网页上有一个带有onclick事件的标签,并且上面也有这个问题。


阅读 305

收藏
2020-06-26

共1个答案

一尘不染

经过诸如 .execute_script("changeTree();"), .submit(), 等的尝试,我
已经通过使用 ActionChains 类解决了该问题。现在,我可以单击
具有Java脚本事件的所有元素作为 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()

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

2020-06-26