如何在Selenium Webdriver(Python)中find包含特定文本的元素?

我试图用Seleniumtesting一个复杂的JavaScript接口(使用Python接口,并跨越多个浏览器)。 我有一些forms的button:

<div>My Button</div> 

我希望能够search基于“我的button”(或不区分大小写,部分匹配,如“我的button”或“button”)的button

我发现这非常困难,在某种程度上,我觉得我失去了一些明显的东西。 我迄今为止最好的事情是:

 driver.find_elements_by_xpath('//div[contains(text(), "' + text + '")]') 

不过,这是区分大小写的。 我试过的另一件事是遍历页面上的所有div,并检查element.text属性。 但是,每当你得到一个表格的情况:

 <div class="outer"><div class="inner">My Button</div></div> 

div.outer也有“我的button”的文字。 为了解决这个问题,我试着看看div.outer是div.inner的父类,但不知道如何做(element.get_element_by_xpath('..')返回元素的父类,但它testing不等于div.outer)。 此外,遍历页面上的所有元素似乎非常慢,至less使用Chrome的Web驱动程序。

想法?

编辑:这个问题有点含糊。 在这里被问及(并回答)一个更具体的版本: 如何获取Selenium WebDriver中的元素的文本(通过Python API),而不包括子元素文本?

尝试以下操作:

 driver.find_elements_by_xpath("//*[contains(text(), 'My Button')]") 

你可以尝试一个xpath如:

 '//div[contains(text(), "{0}") and @class="inner"]'.format(text) 

您也可以将其与页面对象模式一起使用,例如:

试试这个代码:

 @FindBy(xpath = "//*[contains(text(), 'Best Choice')]") WebElement buttonBestChoice; 
 wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(text(), 'YourTextHere')]"))); assertNotNull(driver.findElement(By.xpath("//*[contains(text(), 'YourTextHere')]"))); String yourButtonName=driver.findElement(By.xpath("//*[contains(text(), 'YourTextHere')]")).getAttribute("innerText"); assertTrue(yourButtonName.equalsIgnoreCase("YourTextHere")); 

尝试这个。 非常简单:

 driver.getPageSource().contains("text to search"); 

这真的在我的seleniumweb驱动程序。