2017-06-20 56 views
0

下面是页面的DOM结构:CSS选择基于文本让网页元素

enter image description here

我已经试过

button:contains("srave") 

我也试过

button[innerText="srave"] 
button[text="srave"]`  
button[innerHtml="srave"]` 

他们都没有工作。

未定义元素属性时需要获取元素的方法。 PS:textContent()返回srave作为结果。

编辑:

我在页面上有很多这样的按钮元素。我知道我可以遍历它们并检查文本。但我想直接根据它包含的文本获取web元素,以减少执行时间

+0

您可能需要使用JavaScript对于这一点,我不熟悉一个css选择器为 – alexis

+0

[有没有一个包含特定文本的元素的CSS选择器?](https:// stackoverflow。com/questions/1520429/is-there-a-css-selector-for-elements-containing-certain-text) –

+0

没有什么独特的标识元素,所以'xpath'可能是你的最后一招,或者添加一些东西给元素来识别它 –

回答

0

您可以使用jquery获得相同的结果,因为css未选择文本。

工作拨弄

fiddle link

试试这个

alert($('button').find('span').html()); 

您可以使用下面的CSS来获得button名称以 “srave”。

HTML

<button data-name="srave"> 
    <span>Brave</span> 
</button> 

CSS

button[data-name="srave"] { 
    background:tomato; 
} 
+0

感谢Lokesh!我想要得到在它上面有文字的按钮。网页上有许多类似的网页元素。你可以分享css选择器吗? –

+0

你可以通过'data-attribute'得到它我更新了jsfiddle你可以检查它 – LKG

+0

我不能改变我在上面截图中共享的html代码。我必须仅使用该DOM结构并尝试获取具有按钮和文本划分的Web元素。 –

0

你尝试:按钮[CLASS = 'K-按钮K-按钮icontext']或按钮[DIR ='LTR ']我不认为你在你的例子中尝试的cssSelector是正确的,因为你复制了按钮。如果这两项都不起作用,则可能是页面上的多个按钮具有相同的选择器。在这种情况下,使用xpath可能会更好,或者可以使用相同的选择器获取所有元素的列表,然后从您创建的列表中获取该列表中的任何一个,然后单击它。

+0

'按钮'是一个错字。我使用了正确的CSS选择器语法。 有很多web元素匹配标准按钮[class ='k-button k-button-icontext']或按钮[dir ='ltr'],我想搜索其上有文字'srave'的按钮。 –

+0

您可以使用xpath,或者您可以创建一个具有该CSS选择器的webelements列表(列表),然后遍历所有这些选择器,直到找到包含您正在查找的文本的按钮。在你的循环中你可以使用element.getText();.然后将实际文本与预期文本(srave)进行比较。如果文字匹配,然后点击按钮。如果没有,继续循环中的元素列表,直到找到匹配。 – danidangerbear

+0

由于我有许多与类和其他属性匹配的元素,因此需要很多时间来执行。这就是为什么我试图为获得元素获得最佳解决方案 –

0

不,您不能使用CSS选择器。您可以使用XPath。

//button[text()='srave'] 

或者

//button[contains(text(),'srave')] 
0

要添加到这里danidangerbear是一个Java方法,将你想要做什么:

public String getElementText(String elementText){ 
List<WebElement> elements = driver.findElements(By.cssSelector("button")); 
    String elementText = null; 
    for(WebElement element : elements) 
     if(element.getText().equals(actualValue)){ 
      elementText = element.getText(); 
      break; 
     } else { 
      elementText = "element text does not exist"; 
      continue; 
     } 
    return elementText; 
}