Jquery在Selenium中找不到元素

3 投票
1 回答
1196 浏览
提问于 2025-04-16 07:59
 sel.add_script( sel.get_location(), "jquery.js")

 #here I get  u'fd6c42bcc770ca9decc4f358df3688290a4257ad'`  
       idOfResultWithSomeImage=sel.get_eval("window.jQuery('#result').find('img').filter('[alt=SeleImage]').eq(0).parents('form:first').find('a').eq(1).attr('id')")`

    #here I get u"window.jQuery('#fd6c42bcc770ca9decc4f358df3688290a4257ad').parent().find('button')"
        pathOfButton="window.jQuery('#" + idOfResultWithSomeImage+ "').parent().find('button')"

        #here I get false :/ 
        isButtonPreset = sel.is_element_present(pathOfButton)
        #so here I get error. Element not present.
        sel.click(pathOfButton)

当我在firebug的控制台查看时,它找到了这个按钮。

我正在使用

# -*- coding: utf-8 -*-

而且我是在WingIde里编程。

你知道这是为什么吗?

编辑

#from here I get 08f0ddbfa71df43bee87d9becdec5ced4ead3419
idOfResultWithRyanairFlight=sel.get_eval("window.jQuery('#result').find('img').filter('[alt=Ryanair]').eq(0).parents('form:first').find('a').eq(1).attr('id')")

我在调试模式下检查了一下:

#it returns true
sel.is_element_present("css=#08f0ddbfa71df43bee87d9becdec5ced4ead3419")
#it returns false
sel.is_element_present("window.jQuery('#08f0ddbfa71df43bee87d9becdec5ced4ead3419')")
#it return false
sel.is_element_present("window.jQuery(#08f0ddbfa71df43bee87d9becdec5ced4ead3419)")

我在firebug控制台输入了这些查询,第一和第二个都能正常工作。

编辑

有趣的是,我在c#里写了同样的脚本,结果也遇到了同样的问题。

 var dOfA = selenium.GetEval("window.jQuery('#result').find('img').filter('[alt=SomeIMG]').eq(0).parents('form:first').find('a').eq(1).attr('id')");


            var a=selenium.IsElementPresent("window.jQuery('#" + dOfA + "').parent().find('button')");
            var b = selenium.IsElementPresent("$('#" + dOfA + "')");
            var c = selenium.IsElementPresent("jQuery('#" + dOfA + "')");
            var d = selenium.IsElementPresent("css=#" + dOfA);
            var e = selenium.GetEval("window.jQuery('#" + dOfA + "')");

只有d是正确的。

1 个回答

0

如果你想在Selenium中使用CSS或jQuery的选择器,我觉得你需要直接使用CSS选择器。换句话说,你需要像这样写:

pathOfButton = "css=#" + idOfResultWithSomeImage + " ~ button"
if (!sel.is_element_present(pathOfButton))
    pathOfButton = "css=button ~ #" + idOfResultWithSomeImage

sel.click(pathOfButton)

可能还有稍微更好的方法来实现这个;另外,我并没有用过Python,所以我的语法可能不太准确。

想要了解更多关于定位元素的信息,可以查看这个Selenium的文档页面

撰写回答