我无法点击“选择图片”按钮。这是html:
<tr ng-controller="MasterImageController" ng-init="init(0)" class="ng-scope">
<td rowspan="2" valign="top"></td>
<td>
<div class="alert alert-success" style="display: none;" id="masterImageMessageContainer">
<span id="masterImageMessage"> </span>
</div>
<div>
<span class="btn btn-success btn-file">
<span class="glyphicon glyphicon-picture">
::before
</span>
" Select image "
<input type="file" name="masterImage-file" onchange="angular.element(this).scope().masterImageFileChanged(this)" value="" id="masterImage-file">
</span>
<span class="ng-binding"></span>
</div>
</td>
</tr>
我试过了:
By.xpath("input[@name='masterImage-file']"))
但无法通过此xpath单击该按钮。没有框架。
错误显示:
预期条件失败:等待位于以下位置的元素:By.xpath:input [@ name ='masterImage-file'](尝试30秒,间隔为500 MILLISECONDS)
另一条消息显示
无法找到该元素。
我添加了Thread.sleep(1500);
答案 0 :(得分:0)
我认为您可以使用double slash //
//input[@name='masterImage-file']
您也可以使用该ID确保其唯一//input[@id='masterImage-file']
答案 1 :(得分:-1)
选择图片不在<input>
标记内,而是在<span>
标记内。要单击选择图像按钮,您可以使用以下定位器策略:
By.xpath("//tr[@class='ng-scope']//td//span[btn btn-success btn-file]")
元素是 Angular Element ,您可能需要在点击之前诱导 WebDriverWait ,如下所示( Java ):
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//tr[@class='ng-scope']//td//span[btn btn-success btn-file]"))).click();
更新:
您可以更精细地使用以下代码行:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//tr[@class='ng-scope']//td//span[btn btn-success btn-file]/span[@class='glyphicon glyphicon-picture']"))).click();
答案 2 :(得分:-1)
我不确定你为什么不使用这个ID。
By locator = By.id("masterImage-file");
如果此ID在页面上不唯一,则这是另一个选项
By locator = By.xpath("//span[contains(.,'Select image')]//input");
我还会添加一个等待以确保元素已加载。可能是页面的一部分加载缓慢
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(locator)).click();
如果由于某种原因无效,您需要调查:
这个元素是否在IFRAME中?我知道你说不是,但你应该再检查一下。这是造成这类错误的典型原因。
这个元素在页面上是唯一的吗?在打开页面的Chrome中打开开发控制台,然后尝试$$("#masterImage-file")
。它是否返回超过1个元素?如果确实如此,那可能就是问题所在。您必须找到另一种方法来引用此INPUT
。