通过与特定文本标记名称选择元素 - 硒

问题描述:

我有这样的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 Settings,并点击DIV与类名= callout

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 

我错过了什么?


选择父股利

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: Message: unknown error: Element

+0

driver.find_element_by_tag_name(“span”)会找到多个元素 –

+0

哦。我懂了。我怎样才能选择一个'文字=='字符串'跨度? – ihue

+0

请尝试使用类而不是跨度 driver.FindElement(By.ClassName(“Edit”))。文本 –

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

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

精确匹配(如您在你的评论中要求)u SE "//span[text()='Bandwidth Settings']"

在已编辑的问题,请尝试以下之一:

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

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

通过跨找到(前提是没有其他分区该级别):

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

如何选择那个父母的div? – ihue

+0

我试过'driver.find_element_by_css_selector(“div.callout”)。点击()',点击它找到的第一个:( – ihue

+0

我希望你不介意给我一个小提示。 – ihue

,你需要使用的代码:

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

如果你的页面(jQuery的),您可以通过他们的文字,像这样选择跨度上的咝咝声:

$(“跨度:包含( '带宽设置')“)

这将像这样使用C#绑定

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