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

InvalidSelectorError:不允许复合类名

欧阳俊捷
2023-03-14

我试图得到以下每个元素使用

element = driver.findElement(By.className("code-list-item code-list-item-public "));

inspect元素的输出如下。

<div class="column one-fourth codesearch-aside"></div>

<div class="column three-fourths codesearch-results">

    <div class="sort-bar"></div>
    <div id="code_search_results">
        <div class="code-list">
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
            <div class="code-list-item code-list-item-public "></div>
        </div>

但是它失败了,并抛出下面的错误。

Caused by: org.openqa.selenium.InvalidSelectorException: The given selector code-list-item code-list-item-public  is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: Compound class names not permitted
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html

另外,我如何遍历每个类?每个类都包含子部分,我想在进入下一个类之前进一步单独处理这些子部分。

共有1个答案

宗政昱
2023-03-14

如果没有必要,我不会那么担心类名。我会使用css选择器。

<代码>。代码表

注意在css中。表示类,所以我指向带有类code-list的div

您还可以使用: nth-child()函数获取具有索引号的特定子div

<代码>。代码表

上面的css允许您选择第一个子div

根据你的截图

<代码>。代码表

一个代码块,可以帮助OP理解应该如何处理此场景

//maximizing the window for better view
driver.manage().window().maximize();

//a selector to find all the links on the page
By selector = By.xpath("//p[@class='title']/a[1]");

//finding the list of all elements
List<WebElement> list = driver.findElements(selector);

/*Iterating over the collection may throw StaleElementReference exception due to DOM refresh
according to my knowledge for loop is best in such case
*/
for (int i = 0; i<list.size(); i++){

    new WebDriverWait(driver,10).until(ExpectedConditions.elementToBeClickable(selector));

    //Click on the title
    driver.findElements(selector).get(i).click();

    //Navigating back to the main page. This is not feasible but no other option present due to page structure
    driver.navigate().back();
}

 类似资料:
  • 我得到以下错误: "不允许使用复合类名" 尝试访问Web元素时,元素的类名之间有空格。Web元素的页面源如下所示。 我试图通过CSS路径找到元素,如下所示。但是这个元素是不可搜索的。 这是在链接中给出的解决方法,但仍然没有成功。你的帮助将不胜感激。

  • 我试图获取具有特定类名的所有元素: 然而我得到的错误是: 我知道类名中不允许有空格,但是我该怎么办呢? 谢啦

  • 当我搜索要选择的按钮时,我遇到了一个问题。当我尝试使用搜索它时 但是,它给了我一个错误 - 。我阅读了有关此问题的信息,似乎使用解决方案器是解决问题的方法,而不是使用。但是,我无法使 csS 选择器正常工作。这是包含我正在搜索的元素的html片段。 如何选择“pager__item pager__item - last”项目?

  • 我要找到下面的按钮。它是一个蚂蚁控制器。 它位于数据输入表单中,它的XPath变化取决于我们在表单顶部所做的选择。所以XPath不能使用。然后我试了CSS选择器,它也不支持。 最后,我使用类名作为位置策略,并使用移动到元素。 代码成功执行到以下行。 单击部分我们不起作用并抛出元素是不可见的。但元素是可见的

  • 我在尝试使用类名时遇到代码问题。我已尝试并运行时错误32显示为: 也许有人可以帮助编写下面的代码。我有chrome浏览器103.5060.114,但web驱动程序103.5060.56。我找不到其他司机下载。 超文本标记语言: VBA代码: 我的目标是将发送接收WhatsApp图标带到Excel表

  • 问题内容: 我有下面的代码,单击一个元素以弹出一个屏幕并在其中复制文本 但是,当我尝试单击该弹出窗口中的按钮时, 它产生一条错误消息: 这是我要单击的HTML 。该按钮。 我应该怎么写才能单击关闭按钮? 问题答案: Leon的评论提出了正确的信息,即不再支持复合类名称。相反,您可以尝试使用CSS选择器。在您的情况下,以下代码行应帮助您获取所需的元素: 它在class属性中找到具有所有三个类(act