Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 硒化物:如何从ElementsCollection获取所有活动元素?_Java_Selenium_Selenium Webdriver_Selenide - Fatal编程技术网

Java 硒化物:如何从ElementsCollection获取所有活动元素?

Java 硒化物:如何从ElementsCollection获取所有活动元素?,java,selenium,selenium-webdriver,selenide,Java,Selenium,Selenium Webdriver,Selenide,我试图为集合编写if语句,但遇到了一个问题。例如,以下元素具有指示元素是否处于活动状态的li标记: <dl class="p-property-item"> <dt class="p-item-title" data-spm-anchor-id="42e07cb3WzvrLA">Color:</dt> <dd class="p-item-main"> <ul id="j-sku-list-3" class="sku-a

我试图为集合编写if语句,但遇到了一个问题。例如,以下元素具有指示元素是否处于活动状态的
li
标记:

<dl class="p-property-item">
<dt class="p-item-title" data-spm-anchor-id="42e07cb3WzvrLA">Color:</dt>
    <dd class="p-item-main">
        <ul id="j-sku-list-3" class="sku-attr-list util-clearfix" data-sku-prop-id="14" data-sku-show-type="none" data-isselect="true" data-spm-anchor-id="2114.10010108.1000016/B.i3.42e07cb3WzvrLA">
               <li class="active">
                    <a data-role="sku" data-sku-id="29" id="sku-2-29" href="javascript:void(0)" data-spm-anchor-id="2114.10010108">
                        <span data-spm-anchor-id="42e07cb3WzvrLA">White</span>
                    </a>
               </li>
        </ul>
                    <div data-role="msg-error" class="msg-error sku-msg-error" style="display: none;">
                        Please select a Color
                    </div>
    </dd>
但是我不知道如何从集合中获取具有“active”
li
的元素。我的意思是,如何获取所有活动元素,是否有任何选项来识别它们

注意:所有元素都是可见的,因此它与“按可见项筛选”选项无关

我还使用了这里提到的java方法:


但在我的例子中,我得到了一个错误:
运算符&&不能应用于“boolean”,“com.codeborne.selenide.elementscolection”
您可以使用elementscolection的方法进行检查:


您可以使用ElementsCollection的方法进行检查:


您在下面使用的定位器返回
span
元素的集合,并且不能使用父
li
元素对其进行筛选:

@FindBy(how = How.CSS, using = "#j-product-info-sku > dl:nth-child(2) > dd > ul > li > a > span")
您可以使用
.p-property-item li.active span
css选择器直接获取所有活动元素。
您还可以使用
.p-property-item li
选择器获取
li
元素的集合,然后通过
active
类对其进行过滤并获取颜色

在下面的方法中,您试图通过
文本
而不是
进行筛选,请使用
条件。cssClass(“活动”)

您的代码应该如下所示:

ElementsCollection colorList = $$(".p-property-item li");
String activeColor = colorList.filterBy(Condition.cssClass("active")).shouldHaveSize(1).$("span").text();

//or

ElementsCollection colorList = $$("#j-product-info-sku > dl:nth-child(2) > dd > ul > li");
ElementsCollection activeList = colorList.filterBy(Condition.cssClass("active"));
ElementsCollection disabledList = colorList.filterBy(Condition.cssClass("disabled"));

您在下面使用的定位器返回
span
元素的集合,并且不能使用父
li
元素对其进行筛选:

@FindBy(how = How.CSS, using = "#j-product-info-sku > dl:nth-child(2) > dd > ul > li > a > span")
您可以使用
.p-property-item li.active span
css选择器直接获取所有活动元素。
您还可以使用
.p-property-item li
选择器获取
li
元素的集合,然后通过
active
类对其进行过滤并获取颜色

在下面的方法中,您试图通过
文本
而不是
进行筛选,请使用
条件。cssClass(“活动”)

您的代码应该如下所示:

ElementsCollection colorList = $$(".p-property-item li");
String activeColor = colorList.filterBy(Condition.cssClass("active")).shouldHaveSize(1).$("span").text();

//or

ElementsCollection colorList = $$("#j-product-info-sku > dl:nth-child(2) > dd > ul > li");
ElementsCollection activeList = colorList.filterBy(Condition.cssClass("active"));
ElementsCollection disabledList = colorList.filterBy(Condition.cssClass("disabled"));

找到了解决方案:为了只将活动元素放入集合中,我决定忽略类为“disabled”的
li
元素


到目前为止,集合只包含活动元素

找到了解决方案:为了只将活动元素放入集合中,我决定忽略类为“disabled”的
li
元素


到目前为止,该集合仅包含活动元素

Hi@Sers!谢谢你把我引向正确的轨道。但事实证明有几种实现:1)css选择器收集禁用和活动元素
\j-product-info-sku>dl:nth child(2)>dd>ul>li>a>span
  • 选择器仅收集活动元素
    \j-product-info-sku>dl:n子项(2)>dd>ul>li.active a span
    3)
  • 选择器仅收集禁用元素
    \j-product-info-sku>dl:n子项(2)>dd>ul>li.禁用了span
    ,但现在我又陷入了死胡同:该方法可以通过使用第二个选项来获取活动元素,问题是a)如何排序第一个选项的集合以仅获取活动元素?b) 如何使用第三个选项?@TimurAibulatov我给你的例子中的filter by cssClass应该只为你带来类活动的li元素。更改选择器,删除
    >a>span
    。要禁用,只需将
    active
    类替换为
    disabled
    为什么不使用单独的2)和3)选项选择器而不使用过滤器?Hi@Sers!谢谢你把我引向正确的轨道。但事实证明有几种实现:1)css选择器收集禁用和活动元素
    \j-product-info-sku>dl:nth child(2)>dd>ul>li>a>span
  • 选择器仅收集活动元素
    \j-product-info-sku>dl:n子项(2)>dd>ul>li.active a span
    3)
  • 选择器仅收集禁用元素
    \j-product-info-sku>dl:n子项(2)>dd>ul>li.禁用了span
    ,但现在我又陷入了死胡同:该方法可以通过使用第二个选项来获取活动元素,问题是a)如何排序第一个选项的集合以仅获取活动元素?b) 如何使用第三个选项?@TimurAibulatov我给你的例子中的filter by cssClass应该只为你带来类活动的li元素。更改选择器,删除
    >a>span
    。要禁用,只需将
    active
    类替换为
    disabled
    为什么不使用单独的2)和3)选项选择器而不是过滤器?
    Condition hasChild = hasChildWithCondition(By.cssSelector("li"), Condition.text("active"));
    
    ElementsCollection colorList = $$(".p-property-item li");
    String activeColor = colorList.filterBy(Condition.cssClass("active")).shouldHaveSize(1).$("span").text();
    
    //or
    
    ElementsCollection colorList = $$("#j-product-info-sku > dl:nth-child(2) > dd > ul > li");
    ElementsCollection activeList = colorList.filterBy(Condition.cssClass("active"));
    ElementsCollection disabledList = colorList.filterBy(Condition.cssClass("disabled"));
    
    ElementsCollection colorList = $$("#j-product-info-sku > .p-property-item > .p-item-main > ul > li:not(.disabled) > a");