【问题标题】:What is the CSS Selector path to find text()查找 text() 的 CSS 选择器路径是什么
【发布时间】:2016-06-17 13:41:48
【问题描述】:

我正在使用

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),平台=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.186.56', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_60' 驱动信息: org.openqa.selenium.chrome.ChromeDriver 功能 [{applicationCacheEnabled=false, 可旋转=false, mobileEmulationEnabled=false, 铬={userDataDir=C:\Users\HARSH~1.SHA\AppData\Local\Temp\scoped_dir8680_6077}, 需要HeapSnapshot=true,databaseEnabled=false,handlesAlerts=true, hasTouchScreen=false,版本=48.0.2564.116,平台=WIN8_1, browserConnectionEnabled=false,nativeEvents=true, acceptSslCerts=true,locationContextEnabled=true, webStorageEnabled=true,browserName=chrome,takeScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] 会话 ID: cfd3e5b7a892aca75855ba4299c03bac *** 元素信息:{Using=css selector, value=div:contains('您的新管理员已创建并已发送邀请电子邮件')} 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在 org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) 在 org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158) 在 org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363) 在 org.openqa.selenium.remote.RemoteWebDriver.findElementByCssSelector(RemoteWebDriver.java:492) 在 org.openqa.selenium.By$ByCssSelector.findElement(By.java:430) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355) 在 com.atlassian.webdriver.DefaultAtlassianWebDriver.findElement(DefaultAtlassianWebDriver.java:232) 在 com.client.app.pages.AdministratorHome.isAdministratorEmailMessageDisplayed(AdministratorHome.java:283) 在 com.client.app.administrator.CreateAdministratorCondecoSenseStepDefs.verify_SucessMessageDisplayed(CreateAdministratorCondecoSenseStepDefs.java:129) 在✽。然后新管理员创建成功 US171AutoEmail@condecosoftware.com,您的新管理员已被 创建和邀请电子邮件 已发送(src/test/resources/com/client/app/sense_administrator/CreateAdministratorCondeco.feature:22)

【问题讨论】:

    标签: selenium css-selectors


    【解决方案1】:

    你正在使用这个选择器:

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

    css selector 不支持contains。因此,您会收到一条错误消息,指出 selector 无效。

    如果你想使用contains,你应该使用xpath

    By.xpath("//div[contains(text(), 'Your new administrator(s) have been created and invitation email(s) sent')])
    

    【讨论】:

    • 我必须使用 Css 选择器,因为使用 xpath 它无法在屏幕上显示此消息 5 秒并且 Xpath 无法找到它
    【解决方案2】:

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

    By.xpath("//span[text()='Text']")
    

    【讨论】:

      【解决方案3】:

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

      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 + "\"");
      }
      

      【讨论】:

        猜你喜欢
        • 2018-07-04
        • 2022-07-21
        • 2015-02-04
        • 1970-01-01
        • 1970-01-01
        • 2012-11-16
        • 2010-12-10
        • 2011-05-26
        • 2014-11-20
        相关资源
        最近更新 更多