繁体   English   中英

错误消息:无法找到元素。 可能是什么问题? Python 3.7,Selenium 3.141.0

[英]Error Message: Unable to locate element. What may be the problem? Python 3.7, Selenium 3.141.0

当使用硒通过Xpath查找元素标签时,它使用从chrome复制的该元素的xpath进行工作,目的是测试它是否正常工作。 由于id元素在每次打开网页时都会更改,因此我知道这会在我的Web自动化程序中导致错误,现在从同一标签中,我正在使用class元素,因为它不会在每次打开网页时都会更改,但是Selenium根本找不到该元素。 当我将xpath中的元素更改为带有xpath相对名称的类时,我最初是从webbroswer复制并测试的。 可能是什么问题?

这是我要转到的html源代码和Xpath的示例:

<div class="popover fade right in" role="tooltip" id="popover784483" style="top: -9px; left: 328.5px; display: block;">
    <div class="arrow" style="top: 88.9423%;"></div>
    <h3 class="popover-title">
        <font style="vertical-align: inherit;">
            <font style="vertical-align: inherit;">Member details</font>
        </font>
    </h3>
    <div class="popover-content">
        <img class="center-block" src="http://api.vdarts.net:8080/picture/portrait/default.png" style="max-width:200px;height:auto;">
        <hr>
        <font style="vertical-align: inherit;">
            <font style="vertical-align: inherit;">Account: CapitainJack </font>

Xpath最初使用,但id更改:

//*[@id="popover784483"]/div[2]/font[1]/font

要使用的Xpath:

//*[@class="popover fade right in"]/div[2]/font[1]/font

有很多方法可以解决此问题。

您可以匹配部分文本内容Xpath,例如

//*[contains(text(), 'Account')]

您可以使用Img标签和以下字体

(//img//following::font)[2]

我建议您改用CSS选择器。

复合类名称是指元素具有多个由空格分隔的类时。 例如<div class="class1 class2 class3"></div>

如果要选择所有3个类的元素(以任意顺序),则可以使用:

element = driver.find_element_by_css_selector(".class1.class2.class3")

如果要使用XPath,我发现以下方法可以工作(使用与上述相同的示例):

browser.find_elements_by_xpath("//*[contains(concat(' ',@class,' '),' class1 ') and contains(concat(' ',@class,' '),' class2 ') and contains(concat(' ',@class,' '),' class3 ')]")

注意:您可以使用不同的布尔运算符来过滤掉某些类名(例如'and''and not'等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM