2015-07-13 123 views
0

我正在寻找这个小硒脚本的解决方案。当列表中出现超过1次的文字时,问题就会发生。我正在寻找与xpath命令[contains()。然后脚本停止。Selenium:如何找到确切的文本匹配,当有几个文本发生

正如你看到我的脚本试图使用CSS选择器(未评论),但它无效。我已经看到一些解决方案,使用正则表达式与css选择器与^和$,但我不知道它是如何工作的。

编辑:我正在寻找只选择第三个元素“LIT”,因为你看到有那么多次LIT里面列表阻止脚本。

这里是片段的HTML

<div class="prodUnitCat"> 
<ul class="fixFacetZindex clearBoth" id="divChildrenCategoryFilter_0"> 
/ul> 
<ul data-lvlcat="2"> 
<li data-idcat="1000015739"><span>ACCESSOIRES LITERIE</span> (9)</li> 
<li data-idcat="1000015760"><span>ELEMENT DE LIT</span> (5)</li> 
<li data-idcat="1000015773"><span>LIT</span> (9)</li> 
<li data-idcat="1000015794"><span>LIT D'APPOINT</span> (2)</li> 
</ul> 
</div> 

,在这里我的代码

prod = db.select(sql) 
    for record in prod: 


     cat1  = record[10] 
     cat2  = record[11] 
     cat3  = record[12] 
     cat4  = record[13] 

     # loading check 
     WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_id(headerFieldID)) 


     # cat selection 
     driver.find_element_by_xpath(u"//span[contains(text(),'" + cat1 +"')]").click() 
     driver.find_element_by_xpath(u"//span[contains(text(),'" + cat2 + "')]").click() 
     #driver.find_element_by_css_selector("span[contains('" + cat2 +"')]").click() 
     driver.find_element_by_xpath(u"//span[contains(text(),'" + cat3 + "')]").click() 
     driver.find_element_by_xpath(u"//div[@id=\"categContent\"]/div[4]/ul/li/span[contains(text(),'" + cat4 + "')]").click() 
     loginButtonElement = WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath(loginButtonXpath)) 
     loginButtonElement.click() 
+1

预期结果是什么?你想找什么? – styvane

+0

哦,对不起,我试图找到 LIT但我认为那里有几个“LIT”的发生它不起作用 – Andronaute

+0

你是否得到任何错误与您当前的代码?谢谢。 – alecxe

回答

1

使用//span[text()='" + cat3 +"'].。请勿使用包含关键字,因为它会尝试搜索子字符串LIT.如果你删除了包含,那么它将尝试仅匹配整个单词“LIT”并区分大小写。

+0

它像一个魅力...感谢你。我会接受你的回应 – Andronaute