使用特定文本按标签名称选择元素 - Selenium

时间:2017-02-16 19:06:30

标签: python selenium webdriver automated-tests

我有这个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>

我尝试使用text = Bandwidth Settings选择 span ,然后点击类名为callout div

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

我错过了什么?

选择Parent 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()

我得到了

  

WebDriverException:消息:未知错误:元素

3 个答案:

答案 0 :(得分:2)

一种方法是像这样使用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']"

在您的EDITED问题上,请尝试以下方法之一:

直接找到(如果没有其他匹配元素):

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

通过跨度定位(假设该级别没有其他div):

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

答案 1 :(得分:0)

您需要使用的代码:

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')

答案 2 :(得分:0)

如果你在页面上有嘶嘶声(jQuery),你可以按照文字选择跨度:

$(&#34; span:包含(&#39;带宽设置&#39;)&#34;)

使用C#绑定

将选择使用哪个
By.CssSelector("span:contains('Bandwidth Settings')")