【问题标题】:Checking boxes with selenium chromedriver带有 selenium chromedriver 的复选框
【发布时间】:2019-07-31 16:56:00
【问题描述】:

我正在从字符串数组列表中选择页面上的复选框。例如我的数组包含 [wva-00:04:F3:12:A7:2E, wva-00:04:F3:12:A6:F7, wva-00:04:F3:12:A6:90]

我已经测试了程序,它进入了 for 循环和 if 语句,所以我知道它是从 getPageSource 中查找文本。但是使用下面的 xpath 会引发此错误。没有这样的元素:无法找到元素:{"method":"xpath","selector":"//label[text()='wva-00:04:F3:12:A7:2E']"}。请让我知道我做错了什么。另请注意,我不能使用诸如“marked_439”之类的 id,它们为每个页面生成不同的,并且不会是相同的数字。

Web page Table

    for(int i = 0; i < edcNumbers.size(); i++)

        if(driver.getPageSource().contains(edcNumbers.get(i)))
            driver.findElement(By.xpath("//label[text()='"+edcNumbers.get(i)+"']/preceding-sibling::input[@type='checkbox']")).click();

javascript

				
			</tr>
		</thead>
		<tbody class="yui-dt-body">
			
				<tr class="yui-dt-odd">
					<td id="yui-0-0" headers="yui-header-0" class="yui-dt-col-"><input type="checkbox" id="marked_439" name="439"></td>
					<td id="yui-0-1" headers="yui-header-1" class="yui-dt-col-ALPHA">wva-00:04:F3:12:A7:2E</td>
					<td id="yui-0-2" headers="yui-header-2" class="yui-dt-col-ALPHA">imiprairie</td>
					<td id="yui-0-3" headers="yui-header-3" class="yui-dt-col-NUMERIC"></td>
					<td id="yui-0-4" headers="yui-header-4" class="yui-dt-col-ALPHA"></td>
					<td id="yui-0-5" headers="yui-header-5" class="yui-dt-col-NUMERIC"></td>
					<td id="yui-0-6" headers="yui-header-6" class="yui-dt-col-ALPHA">2018-07-25</td>
					<td id="yui-0-7" headers="yui-header-7" class="yui-dt-col-ALPHA">2018-06-18</td>
					<td id="yui-0-8" headers="yui-header-8" class="yui-dt-col-ALPHA">2018-11-01</td>
					<td id="yui-0-9" headers="yui-header-9" class="yui-dt-col-ALPHA"></td>
					<td id="yui-0-10" headers="yui-header-10" class="yui-dt-col-ALPHA">203</td>
					<td id="yui-0-11" headers="yui-header-11" class="yui-dt-col-ALPHA">0004F3:12A72E</td>
					<td id="yui-0-12" headers="yui-header-12" class="yui-dt-col-ALPHA"></td>
					<td id="yui-0-13" headers="yui-header-13" class="yui-dt-col-ALPHA"></td>
					<td id="yui-0-14" headers="yui-header-14" class="yui-dt-col-edit">
						<a rel="modal" href="settings/edc/mod/439" title="Edit">
							<button></button>
						</a>
					</td>
					<td id="yui-0-15" headers="yui-header-15" class="yui-dt-col-recycle">
            <a rel="modal" href="settings/edc/rma/439" title="RMA">
              <button></button>
            </a>
          </td>
					
						
							<td id="yui-0-16" headers="yui-header-16" class="yui-dt-col-delete yui-dt-last">
								<a rel="modal" href="settings/edc/del/439" title="Delete Confirmation">
									<button></button>
								</a>
							</td>
						
					
				</tr>
			
				<tr class="yui-dt-even">
					<td id="yui-1-0" headers="yui-header-0" class="yui-dt-col-"><input type="checkbox" id="marked_440" name="440"></td>
					<td id="yui-1-1" headers="yui-header-1" class="yui-dt-col-ALPHA">wva-00:04:F3:12:A6:F7</td>
					<td id="yui-1-2" headers="yui-header-2" class="yui-dt-col-ALPHA">imiprairie</td>
					<td id="yui-1-3" headers="yui-header-3" class="yui-dt-col-NUMERIC"></td>
					<td id="yui-1-4" headers="yui-header-4" class="yui-dt-col-ALPHA"></td>
					<td id="yui-1-5" headers="yui-header-5" class="yui-dt-col-NUMERIC"></td>
					<td id="yui-1-6" headers="yui-header-6" class="yui-dt-col-ALPHA">2018-07-25</td>
					<td id="yui-1-7" headers="yui-header-7" class="yui-dt-col-ALPHA">2018-06-18</td>
					<td id="yui-1-8" headers="yui-header-8" class="yui-dt-col-ALPHA">2018-11-01</td>
					<td id="yui-1-9" headers="yui-header-9" class="yui-dt-col-ALPHA"></td>
					<td id="yui-1-10" headers="yui-header-10" class="yui-dt-col-ALPHA">203</td>
					<td id="yui-1-11" headers="yui-header-11" class="yui-dt-col-ALPHA">0004F3:12A6F7</td>
					<td id="yui-1-12" headers="yui-header-12" class="yui-dt-col-ALPHA"></td>
					<td id="yui-1-13" headers="yui-header-13" class="yui-dt-col-ALPHA"></td>
					<td id="yui-1-14" headers="yui-header-14" class="yui-dt-col-edit">
						<a rel="modal" href="settings/edc/mod/440" title="Edit">
							<button></button>
						</a>
					</td>
					<td id="yui-1-15" headers="yui-header-15" class="yui-dt-col-recycle">
            <a rel="modal" href="settings/edc/rma/440" title="RMA">
              <button></button>
            </a>
          </td>
					
						
							<td id="yui-1-16" headers="yui-header-16" class="yui-dt-col-delete yui-dt-last">
								<a rel="modal" href="settings/edc/del/440" title="Delete Confirmation">
									<button></button>
								</a>
							</td>
						
					
				</tr>
			
				<tr class="yui-dt-odd">
					<td id="yui-2-0" headers="yui-header-0" class="yui-dt-col-"><input type="checkbox" id="marked_441" name="441"></td>
					<td id="yui-2-1" headers="yui-header-1" class="yui-dt-col-ALPHA">wva-00:04:F3:12:A6:90</td>
					<td id="yui-2-2" headers="yui-header-2" class="yui-dt-col-ALPHA">imiprairie</td>
					<td id="yui-2-3" headers="yui-header-3" class="yui-dt-col-NUMERIC"></td>
					<td id="yui-2-4" headers="yui-header-4" class="yui-dt-col-ALPHA"></td>
					<td id="yui-2-5" headers="yui-header-5" class="yui-dt-col-NUMERIC"></td>
					<td id="yui-2-6" headers="yui-header-6" class="yui-dt-col-ALPHA">2018-07-25</td>
					<td id="yui-2-7" headers="yui-header-7" class="yui-dt-col-ALPHA">2018-06-18</td>
					<td id="yui-2-8" headers="yui-header-8" class="yui-dt-col-ALPHA">2018-11-01</td>
					<td id="yui-2-9" headers="yui-header-9" class="yui-dt-col-ALPHA"></td>
					<td id="yui-2-10" headers="yui-header-10" class="yui-dt-col-ALPHA">203</td>
					<td id="yui-2-11" headers="yui-header-11" class="yui-dt-col-ALPHA">0004F3:12A690</td>
					<td id="yui-2-12" headers="yui-header-12" class="yui-dt-col-ALPHA"></td>
					<td id="yui-2-13" headers="yui-header-13" class="yui-dt-col-ALPHA"></td>
					<td id="yui-2-14" headers="yui-header-14" class="yui-dt-col-edit">
						<a rel="modal" href="settings/edc/mod/441" title="Edit">
							<button></button>
						</a>
					</td>
					<td id="yui-2-15" headers="yui-header-15" class="yui-dt-col-recycle">
            <a rel="modal" href="settings/edc/rma/441" title="RMA">
              <button></button>
            </a>
          </td>
					
						
							<td id="yui-2-16" headers="yui-header-16" class="yui-dt-col-delete yui-dt-last">
								<a rel="modal" href="settings/edc/del/441" title="Delete Confirmation">
									<button></button>
								</a>
							</td>

【问题讨论】:

  • 您可以进行一些编辑以提供一个很好的 MCVE 示例,使用集成到堆栈溢出的 HTML/CSS/Javascript sn-ps 功能。
  • 你试过这个。 "driver.findElement(By.xpath("//label[normalize-space(.)='"+edcNumbers.get(i)+"']/preceding-sibling::input[@type='checkbox']" )).click();"
  • 你能否在 xpath 中传递 td 而不是 label 并告诉我们。
  • 能否请您复制/粘贴 HTML 或链接到该网站?代码图像不是很有帮助,特别是如果您正在寻找最有效的 xPath/CSS 选择器。
  • 我已经尝试了上面所有的代码建议,但仍然显示相同的错误。我在上面添加了更多的html,希望能有所帮助。我的程序和 html 都相当大,所以我不想发布整个内容。让我知道我还能做些什么来帮助消除任何困惑。

标签: javascript java selenium xpath selenium-chromedriver


【解决方案1】:

尝试通过 ID 定位元素,而不是使用 XPath:

driver.findElement(By.id("yui-0-1")).click();

我认为这就是你想要抓住的元素。

【讨论】:

  • 这似乎选择了整行,而不是复选框。此外,所有行标题 id 的变化。如果你在上面看到,一行会有 yui-0-0 然后下一行有 yui-1-0。我需要根据我在页面上查找的设备 ID 选择特定的复选框。
  • 所以听起来你想通过元素的内部 HTML 进行搜索。这可以通过driver.findElement(By.xpath("[text()[contains(., 'wva-00:04:F3:12:A7:2E'")]]) 来完成
  • 是的,我想选中找到的文本旁边的框。但是我尝试了下面的代码,它给了我一个错误,说它不是一个有效的 xpath 表达式: driver.findElement(By.xpath("[text()[contains(., '"+edcNumbers.get(i)+"' )]/preceding-sibling::input[@type='checkbox']")).click();
【解决方案2】:

感谢大家的帮助,你们都为找到解决方案做出了贡献。通过在数组中查找文本,然后获取其 ID 并将其添加到不同的列表中,我能够用不同的方法解决这个问题。由于复选框 ID 仅相差一个数字(即 yui-0-1 到 yui-0-0),我只是更改了字符串以匹配复选框 ID 以便选择它。

wvaIDs.add( driver.findElement(By.xpath("//*[contains(text(), '"+edcNumbers.get(i)+"')]")).getAttribute("id"));

char numToChange = wvaIDs.get(i).charAt(wvaIDs.get(i).length()-1);
int a=Integer.parseInt(String.valueOf(numToChange));  
a--; 
String newName = wvaIDs.get(i).substring(0,6)+a;
driver.findElement(By.id(newName)).click();

【讨论】:

    猜你喜欢
    • 2015-12-03
    • 1970-01-01
    • 2020-07-24
    • 2017-01-16
    • 2019-12-27
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多