无法选中复选框,异常"元素不可见"

时间:2016-12-28 07:21:44

标签: selenium selenium-webdriver

在可以包含更多行的表中,可以使用电子邮件ID搜索用户。搜索后,选择第一个复选框。但是硒正在抛出不可见的异常元素。

  

// * [@ id中=' share_user'] / tbody的/ TR 1 / TD 1 //标签

     

// * [@ id中=' share_user'] / tbody的/ TR 1 / TD 1 //输入

     

//标签[@for =' checkbox_416']

最后一个标识符是动态的。仍然得到元素不可见的异常。

表格代码如下所述



<table class="table table-striped table-hover dataTable" id="share_user"
	aria-describedby="share_user_info">
	<thead>
		<tr role="row">
			<th class="small-cell sorting" role="columnheader" tabindex="0"
				aria-controls="share_user" rowspan="1" colspan="1" style="width: 137px;"
				aria-label="Share Profile : activate to sort column ascending">Share Profile </th>
			<th class="medium-cell sorting" role="columnheader" tabindex="0"
				aria-controls="share_user" rowspan="1" colspan="1" style="width: 523px;"
				aria-label="User Details: activate to sort column ascending">User Details</th>
			<th class="medium-cell sorting_asc" role="columnheader" tabindex="0"
				aria-controls="share_user" rowspan="1" colspan="1" style="width: 366px;"
				aria-sort="ascending" aria-label="Access: activate to sort column descending">Access</th>
		</tr>

	</thead>

	<tbody role="alert" aria-live="polite" aria-relevant="all">
		<tr class="odd">

			<td class="">
				<div class="checkbox check-default">

					<input name="checkUser" id="checkbox_416" value="416" class="shareCheck"
						type="checkbox">
						<label for="checkbox_416"></label>
				</div>
			</td>
			<td class=" ">
				<img src="" class="img-responsive display-inline share-image">
					<div class="display-inline">

						<p class="share-name">alexx</p>
						<p class="muted">
							<i class="fa fa-envelope" hidden="true"></i>
							<span>alexxm360@gmail.com</span>
						</p>
					</div>
			</td>

			<td style="vertical-align: middle;" class="  sorting_1">

				<div class="select2-container medium-cell" id="s2id_rolelink416"
					style="float:left;">
					<a href="javascript:void(0)" onclick="return false;" class="select2-choice"
						tabindex="-1">
						<span class="select2-chosen">PROFILE ADMIN</span>
						<abbr class="select2-search-choice-close"></abbr>
						<span class="select2-arrow">
							<b></b>
						</span>
					</a>
					<input class="select2-focusser select2-offscreen" id="s2id_autogen11"
						type="text">
						<div class="select2-drop select2-display-none select2-with-searchbox">
							<div class="select2-search">
								<input autocomplete="off" autocorrect="off"
									autocapitalize="off" spellcheck="false" class="select2-input"
									type="text">
							</div>
							<ul class="select2-results">
							</ul>
						</div>
				</div>
				<select name="profileUsers.roleId" id="rolelink416"
					class="medium-cell select2-offscreen" style="float:left;" tabindex="-1">
					<option value="6">PROFILE ADMIN</option>
					<option value="7">PROFILE AGENT</option>
					<option value="8">PROFILE VIEWER</option>
					<option value="196">profile role</option>

				</select>

			</td>

		</tr>
	</tbody>
</table>
&#13;
&#13;
&#13;

也提供屏幕截图。 xpath

html

4 个答案:

答案 0 :(得分:1)

尝试使用Expected Conditions

进行显式等待
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement checkbox = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='share_user']/tbody/tr[1]/td[1]//input")));
checkbox.click();

答案 1 :(得分:0)

试试这个

int ele_size=driver.findElements(By.xpath("locator")).size();

driver.findElements(By.xpath("locator")).get(ele_size-1).click();

如果匹配定位器的元素存在于DOM中但当前不可见,我们可能会遇到元素不可见的异常。所以我们必须在第一个语句中获取元素的大小,然后在下一个语句中我们必须从列表中获取第一个元素并单击元素。

答案 2 :(得分:0)

使用此//*[@id='share_user']/tbody/tr[1]/td[1]/div工作

答案 3 :(得分:0)

您可以使用以下表达式,我已经验证了正常工作。

driver.findElement(By.xpath("//*[@id='share_user']/tbody/tr[1]/td[1]/div")).click();