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

硒的副链,副链。CSS选择器,由。XPath、ByJQuery。ByJQuerySelector没有按我期望的方式工作

苗信鸥
2023-03-14

我在计算一个特定的选择器时遇到了麻烦。当它到达我的选择器时,我的NUnit测试一直失败。我正在寻求帮助来纠正这个问题。继续看例子。

给定以下超文本标记语言代码:

<div class="form-item required row" data-form-item-property="MyDataGrouping" data-form-item-id="view1_MyDataGrouping">
  <label class="form-label span2" for="view1_MyDataGrouping">
  <div class="form-value span3">
    <div class="radio">
      <input id="undefined" type="radio" data-property="MyDataGrouping" checked="checked" value="1" name="view1_MyDataGrouping">
      <label title="My Groups">My Groups</label>
    </div>
    <div class="radio">
      <input id="undefined" type="radio" data-property="MyDataGrouping" value="2" name="view1_MyDataGrouping">
      <label title="Default Groups">Default Groups</label>
    </div>
  </div>
</div>

我创建了一个类来处理这种风格的单选按钮和复选按钮(它提供容器、标签和输入的选择器。它还提供标签文本的保存)

class RadioButton {
  public By ItemsContainer { get; set; }
  public By InputSelector 
  { 
     get 
     { 
        return new ByChained( LabelSelector, By.XPath("/../input")); 
     } 
  }
  public By LabelSelector 
  { 
    get 
    { 
      // put the single tick marks in to prevent an error with a null LabelText
      return new ByChained( ItemsContainer, 
      new ByJQuery.ByJQuerySelector("label:contains('" + LabelText + "')", true)); 
    } 
  }
  public String LabelText { get; set; }

  public RadioButton( By itemsContainer, string labelText )
  {
    ItemsContainer = itemsContainer;
    LabelText = labelText;
  }

  [Test]
  public void TestRadioButton() 
  {
    IWebDriver driver = new FirefoxDriver();
    RadioButton myRadio = new RadioButton( 
      By.CssSelector("div[data-form-item-property=MyDataGrouping]");

    // The following two lines work
    driver.FindElement(myRadio.ItemsContainer).Click();
    driver.FindElement(myRadio.LabelSelector).Click();

    // The next line does not work
    driver.FindElement(myRadio.InputSelector).Click();
  }

我已经验证了Selenium可以找到ItemsContainer选择器和LabelSelector而不会失败。然而,它在InputSelector上遇到了问题。LabelText设置为“My Groups”(我的组)NUnit返回以下内容:

OpenQA。硒。NoTouchElementException:无法使用找到元素。链接([By.Chained.CssSelector:div[数据表单项属性=MyDataGrouping].OpenQA.Selenium.By]),由。XPath://输入])

显然,如果保证数字始终保持不变,我会使用输入元素的value属性。但我不是。因此,我需要首先标识标签,然后XPath选择输入(因为我必须返回树)。

进一步的尝试导致我将InputSelector的getter更改为:

public By InputSelector { get { return new ByChained(ItemsContainer, new ByJQuery.ByJQuerySelector(".radio:contains('"+LabelText+"')",true)); } }

虽然这没有失败,但它也没有像我预期的那样单击输入元素。

等效的SeIDE函数。单击css=div[数据表单项属性=MyDataGrouping]div.radio:包含(我的组)输入

有什么想法吗?

共有1个答案

叶明辉
2023-03-14

好吧,我在最后关于更改InputSelector的注释实际上确实起作用了。我忘记在选择器文本的末尾添加“输入”。

public By InputSelector 
{
  get
  {
    return new ByChained(
      ItemsContainer, 
      new ByJQuery.ByJQuerySelector(".radio:contains('"+LabelText+"') input",true)); 
  } 
}

然而,我仍然想知道为什么我的第一个方法失败了。有什么想法吗?

 类似资料:
  • 我见过这些选择器很多次,但并不清楚它们之间的主要区别是什么。有人能解释一下这些符号之间的区别吗?我们应该在什么时候使用这些符号?

  • 问题内容: 我在selenium测试中有以下xpath语句: 它达到了我想要的,但是我的测试在IE6中非常缓慢。有人知道我将如何做与CSS选择器相同的选择器吗?我想我了解如何执行上述操作,但text()=“ IPODate”部分除外。 以下是我要从中选择的表格示例: ....很多很多行 …还有很多行… 在此示例中,只有一行具有IPODate单元。 问题答案: CSS定位器用于其中包含文本IPODa

  • 我写了一个Spring批处理作业,从数据库中读取,然后写入csv。 这项工作的工作,但不幸的是,在我的输出CSV文件,它只是把什么是在我的域对象的toString方法。 我真正想要的是bean中用逗号分隔的所有值。这就是为什么我在下面的ItemWriter中加入了分隔线聚合器。 但我认为我对DelimitedLineAggregator的理解是错误的。我以为LineAggregator用于输出,但

  • 问题内容: 我想在下面的HTML片段中选择BONKERS。它的区别在于,它是单独存在的,而其所有兄弟姐妹都包含。是显而易见的选择,但由于文本节点而无法使用。我以为我知道这些东西,但这正驱使我疯狂。 我需要一个纯CSS解决方案(不能选择JS),并且无法控制源HTML。 ! 问题答案: 您可以按照这种方法。通过所需的CSS 设置元素的样式,然后重置可在样式中继承的CSS样式,即: CSS: 您可能不需

  • 请求yo帮助分页链接。在我的数据库中,我有3条记录,我想每页显示一条记录。当我选择分页链接的下一个数字时,数据没有被提取。事情是当我单击分页链接的第2个数字时,echo var_dump()显示Result是空的,并且我没有获得echo$data->电子邮件的任何值。但是当我搜索时第一次能够显示单个记录,问题只是分页的下一个链接,那么可能会有什么错误呢?我不能得到一个答案,我不确定发生了什么,所以

  • 对于以下 HTML,硒 xpath 选择器是什么: 我需要让Selenium IDE根据元素文本定位列表中的第二项。我认为可以做到,但显然不行。