在Selenium中按标记名称和特定文本选择元素

w8ntj3qf  于 2022-11-24  发布在  其他
关注(0)|答案(3)|浏览(187)

我有这个HTML

<div class="callout callout-accordion" style="background-image: url(&quot;/images/expand.png&quot;);">
    <span class="edit" data-pk="bandwidth_bar">Bandwidth Settings</span>
    <span class="telnet-arrow"></span>
</div>

我尝试选择文本为Bandwidth Settingsspan,然后单击类名为calloutdiv

if driver.find_element_by_tag_name("span") == ("Bandwidth Settings"):
    print "Found"
    time.sleep(100)
    driver.find_element_by_tag_name("div").find_element_by_class_name("callout").click()

print "Not found"
time.sleep(100)

我一直收到

Testing started at 1:59 PM ...
Not found

Process finished with exit code 0

我错过了什么?

选择父 div

if driver.find_element_by_xpath("//span[text()='Bandwidth Settings']") is None:
        print "Not Found"
    else:
        print "Found"
        span = driver.find_element_by_xpath("//span[text()='Bandwidth Settings']")
        div = span.find_element_by_xpath('..')
        div.click()

我得到了
Web驱动程序异常:消息:未知错误:要素

vhmi4jdf

vhmi4jdf1#

一种方法是像这样使用find_element_by_xpath(xpath)

if driver.find_element_by_xpath("//span[contains(.,'Bandwidth Settings')]") is None:
   print "Not found"
else:
   print "Found"
   ...

对于完全匹配(如您在评论中所要求的),请使用"//span[text()='Bandwidth Settings']"
对于您的 * 编辑过的 * 问题,请尝试以下操作之一:
直接查找(如果没有其他匹配元素):

driver.find_element_by_css_selector("div[style*='/images/telenet/expand.png']")

通过 span 定位(前提是该级别上没有任何其他 div):

driver.find_element_by_xpath("//span[contains(.,'Bandwidth Settings')]/../div")
hs1ihplo

hs1ihplo2#

需要使用的代码:

from selenium.common.exceptions import NoSuchElementException

try:
    span = driver.find_element_by_xpath('//span[text()="Bandwidth Settings"]')
    print "Found"
except NoSuchElementException:
    print "Not found"

如果需要选择父元素div

div = span.find_element_by_xpath('./parent::div')
5lhxktic

5lhxktic3#

如果页面上有sizzle(jQuery),您可以按文本选择跨距,如下所示:

$("span:contains('Bandwidth Settings')")

使用C#绑定时,将按如下方式选择:

By.CssSelector("span:contains('Bandwidth Settings')")

相关问题