硒/ Chrome-选择不带ID的复选框输入

时间:2018-11-28 20:12:47

标签: c# selenium selenium-webdriver xpath selenium-chromedriver

谢谢您的协助。 Selenium / Chrome的新手,在我遇到特定情况之前,一直运行良好。

我有一个模态,包含5个字段(3个下拉列表和2个LI的UL)

每个LI都包含一个标签和input-复选框。

所有下拉菜单都有一个ID,因此可以轻松使用FindElement(By.Id("ID")).SelectText("TEXT");

进行操作

但是Ul中的Li却没有它们,并且每次尝试定位它们时,我都获得了NoSuchElementExceptions。

<ul id="CertificatesToAdd" name="CertificatesToAdd" class="nav nav-list 
    checkbox-list add-certificate-required" data-trigger="manual" data- placement="top">
  <li>
    <label class="checkbox" style="font-weight:normal !important;">
    <input type="checkbox" class="add-certificate-checkbox" 
    value="171">
    Certificate of Registration
    </label>
  </li>
  <li>
    <label class="checkbox" style="font-weight:normal !important;">
    <input type="checkbox" class="add-certificate-checkbox" 
    value="172">
    Collection Agency License
    </label>
  </li>
</ul>

我尝试了待办事项下面的两个FindElement行,并且都返回 OpenQA.Selenium.NoSuchElementException: Unable to locate element

new SelectElement(BaseTest.Driver.FindElement(By.Id("AddCertificateCountry")))
  .SelectByText("Canada");
new SelectElement(BaseTest.Driver.FindElement(By.Id("AddCertificateState")))
  .SelectByText("Alberta");

//TODO: correct input value for checkbox
new SelectElement(BaseTest.Driver.FindElement(By.CssSelector(
  "#CertificateToAdd>li:nth-child(2)"))).SelectByValue("172");

new SelectElement(BaseTest.Driver.FindElement(By.XPath(
  "//*[@id="CertificatesToAdd"]/li[2]/label/input"))).SelectByValue("172");

任何想法都会有所帮助和赞赏。

2 个答案:

答案 0 :(得分:1)

要单击与<label>标记关联的复选框,可以使用以下解决方案:

  • 注册证书

    BaseTest.Driver.FindElement(By.XPath("//label[@class='checkbox'][normalize-space()='Certificate of Registration']/input[@class='add-certificate-checkbox']")).Click();
    
  • 托收代理许可证

    BaseTest.Driver.FindElement(By.XPath("//label[@class='checkbox'][normalize-space()='Collection Agency License']/input[@class='add-certificate-checkbox']")).Click();
    

答案 1 :(得分:0)

您在这里以li为目标:

<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms" 
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Frida3.Components.TestView"
             x:Name="this">
  <ContentView.Content>
      <StackLayout>
          <Label Text="{Binding Path=Text, Source={x:Reference this}}" />
      </StackLayout>
  </ContentView.Content>
</ContentView>

这里的xpath表示输入是标签的子级,而不是同级:

new SelectElement(BaseTest.Driver.FindElement(By.CssSelector(
  "#CertificateToAdd>li:nth-child(2)"))).SelectByValue("172");

我认为您可能可以从那里弄清楚。