当前位置: 首页 > 知识库问答 >
问题:

什么是CSS选择器路径来查找text()

司信厚
2023-03-14

我正在用

WebElement AdministratorMessage=driver.findElement(By.cssSelector("div:contains('Your new administrator(s) have been created and invitation email(s) sent')"));

<div class="saveMsg nd___highlighted" ng-show="showBanner==true" style="display: none; outline: rgb(204, 0, 0) dashed 2px;">
<i class="fa fa-check" style="outline: rgb(255, 255, 255) none 0px;"></i>
                Your new administrator(s) have been created and invitation email(s) sent
                <i class="fa fa-close msgClose" ng-click="hideSuccessMsg()"></i>
            </div>

错误消息:

org.openqa.selenium.InvalidSelectorException: 无效选择器: 指定了无效或非法的选择器 (会话信息: chrome=48.0.2564.116) (驱动程序信息: chromedriver=2.19.346078 (6f1f0cde889532d48ce8242342d0b84f94b114a1),platform=Windows NT 6.3 x86_64) (警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:31 毫秒 有关此错误的文档,请访问: http://seleniumhq.org/exceptions/invalid_selector_exception.html 构建信息: 版本: '2.48.2', 修订版: '41BCCDD10cf2c0560f637404c2d96164b67d9d67', 时间: '2015-10-09 13:08:06' 系统信息: 主机: 'INDIA-DEV36', ip: '192.168.166.56', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_60' 驱动程序信息: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=C:\Users\HARSH~1.SHA\AppData\Local\Temp\scoped_dir8680_6077},takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=48.0.2564.116, platform=WIN8_1, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] 会话 ID: cfd3e5b7a892aca75855ba4299c03bac *** 元素信息: {Using=css selector, value=div:contains('Your new管理员已创建并发送邀请电子邮件')} at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678) at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363) at org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:492) at org.openqa.selenium.By$ByCssSelector.findElement(By.java:430) atorg.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355) at com.atlassian.webdriver.DefaultAtlassianWebDriver.findElement(DefaultAtlassianWebDriver.java:232) at com.client.app.pages.AdministratorHome.isAdministratorEmailMessageDisplay(AdministratorHome.java:283) at com.client.app.administrator.CreateAdministratorCondecoSenseStepDefs.verify_SucessMessageDisplay(CreateAdministratorCondecoSenseStepDefs.java:129) at ✽.Then New已成功创建管理员 US171AutoEmail@condecosoftware.com,您的新管理员已创建并发送邀请电子邮件(src/test/resources/com/client/app/sense_administrator/CreateAdministratorCondeco.feature:22)

共有3个答案

秦博延
2023-03-14

您不能使用CSS选择器在查找中搜索文本。您必须找到元素并搜索所需的文本。

WebElement administratorMessage = null;
String searchText = "Your new administrator(s) have been created and invitation email(s) sent";
List<WebElement> divs = driver.findElements(By.cssSelector("div.saveMsg.nd___highlighted"));
for (WebElement div : divs)
{
    if (div.getText().contains(searchText))
    {
        administratorMessage = div;
        break;
    }
}

if (administratorMessage != null)
{
    // searchText found
}
else
{
    // searchText NOT found
    System.out.println("No element was found containing the message, \"" + searchText + "\"");
}
闻人吕恭
2023-03-14

如果你想尝试使用xpath找到它,试试这个...

By.xpath("//span[text()='Text']")
单于正业
2023-03-14

您正在使用此选择器:

By.cssSelector("div:contains('Your new administrator(s) have been created and invitation email(s) sent')")

CSS 选择器不支持包含。因此,您收到一个错误,指出选择器无效。

如果要使用< code>contains,应该使用< code>xpath。

By.xpath("//div[contains(text(), 'Your new administrator(s) have been created and invitation email(s) sent')])
 类似资料:
  • 我是新的Selenium C#自动化。试图在网上找到,但没有得到任何帮助。html代码看起来像这样。我需要找到元素,然后使用CSS单击它。该网站只在IE上运行。

  • 问题内容: 我已经看过几次CSS代码中使用的“大于”(),但是我无法弄清楚它的作用。它有什么作用? 问题答案: 选择直系子女 例如,如果您有这样的嵌套div: 然后在样式表中声明css规则,如下所示: 您的规则仅适用于具有“中级”类的div,因为这些div是元素为“外部”类的元素的直接后代(直接子代)(当然,除非您声明其他更具体的规则来覆盖这些规则) 。见小提琴。 边注 如果您>>`。 注意:IE

  • 问题内容: 我在Twitter Bootstrap中看到了这个选择器: 有谁知道这种技术叫什么及其作用? 问题答案: 这是一个属性通配符选择器。在您提供的示例中,它将查找具有CONTAINS类的任何子元素。 因此,请在此示例中选择元素: 您也可以搜索“开头为…” 这将在这样的事情上工作: 和“以…结尾” 这将工作

  • 搜索字符并不容易。我在看CSS的时候发现了这个 这是什么意思?

  • 问题内容: 例如: 我不知道是什么意思 这是什么之间的区别,只是定义样式没有? 问题答案: 请参阅W3.org上的相邻选择器。 在这种情况下,选择器意味着样式仅适用于直接在另一个段落之后的段落。 一个普通的选择器会将样式应用于页面中的每个段落。 这仅适用于IE7或更高版本。在IE6中,样式不会应用于任何元素。顺便说一下,这也适用于组合器。

  • 问题内容: CSS问题:如果两个不同的选择器应用于一个元素,谁会赢? 我知道这不应该发生,但是我想调整旧应用程序,而CSS居于中间。 问题答案: 规范中的实际上是合理可读的。综上所述: 规则和内联规则获胜。 否则,通常会赢得更具体的胜利。是比更加具体的选择器。 如果规则同样具体,则以最后宣布的为准。 没有特别的理由说明为什么这种“不应该发生”。通常先指定一个广泛适用的规则,然后添加一个更具体的规则