【问题标题】:No able to select particular check box using Selenium (Java)无法使用 Selenium (Java) 选择特定复选框
【发布时间】:2014-07-29 05:44:54
【问题描述】:

我想点击下一页上的可用商店取货复选框

http://www.target.com/c/pants-shorts-baby-toddler-boys-clothing/-/N-59yk1#navigation=true&viewType=medium&sortBy=newest&isleaf=true&navigationPath=59yk1&parentCategoryId=9976007&facetedValue=/-/N-59yk1&RatingFacet=0&categoryId=139007

而特定的 HTML 部分有

<input type="checkbox" name="facetId" id="in store, onlineCheckbox3" 
value="10058540" omniture="Store Pickup Eligible">

我也尝试了很多东西 By.id() , By.cssSelector() 和 xpath。

有人可以尝试告诉我工作代码...在这之间我会继续尝试。

【问题讨论】:

  • 该 HTML 有效吗?将两个值作为 ID 分配给元素是不合法的,并且 ID 不能有空格和逗号。那不是合法身份证。如果实际的 HTML 是这样的,而您正在尝试抓取它,则您将不得不依赖其他一些功能。 value 属性是什么意思?是标识符吗?如果 HTML 如此糟糕,XPath 选择可能不起作用,但如果您认为 value 可能是标识符,您可以尝试 //input[@value='10058540']
  • @helderdarocha 我尝试使用 value .. 但使用 cssSelector() .. 它不起作用。我猜 ID 有空间是问题所在:\
  • 解析不好的 HTML 并不容易。您可以尝试在其他元素、位置表达式上使用 XPath,并查看它们中的任何一个是否有效。也许如果您可以识别一个外部元素来定义一个上下文,然后简单地选择它可能工作的输入。比如://some-element[some-unique-condition]//input[some-relative-position].

标签: java html selenium xpath checkbox


【解决方案1】:

它会选择你需要写的By.id

<input type="checkbox" name="facetId" id="facetId" 
value="10058540" omniture="Store Pickup Eligible">

【讨论】:

    【解决方案2】:

    问题是您要单击的复选框最初是隐藏的。你可以像这样点击它:

    driver.findElement(By.xpath("//a[contains(text(),'in store, online')]")).click();
    driver.findElement(By.xpath("//span[contains(text(),'Store Pickup Eligible')]/../../input")).click();
    

    这将展开元素“in store, online”,然后点击标有“Store Pickup Eligible”的复选框。

    【讨论】:

      【解决方案3】:

      您可以通过 CSS 使用:[id*='onlineCheckbox3'] 找到此复选框。正如 Richard 所说,您必须先单击类别才能显示元素。通过以下方式查找:[id=dimensions]&gt;ul&gt;li:nth-child(9) a。有时单击 a 不起作用(取决于 html 结构),您必须单击锚点内的元素,将其换成 span,它应该可以工作。在定位元素时,我更喜欢所有 CSS 选择器,但你可以使用任何你喜欢的方法。

      【讨论】:

        猜你喜欢
        • 2023-03-13
        • 1970-01-01
        • 2017-11-10
        • 1970-01-01
        • 2020-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        相关资源
        最近更新 更多