我只想单击页面中的按钮。
html代码看起来像:
<tr ng-repeat="row in rowCollection" ng-class="{ "error-row": row.errorMessage }" ng-style="vm.getColor(row)" class="ng-scope" style="background: rgb(255, 242, 255) none repeat scroll 0% 0%;">
<td class="ng-binding">Wylaczenie nadan RDF</td><td class="ng-binding">WAITING_FOR_NOTIFICATION</td>
<td>
<a href="" ng-click="vm.showProcessDiagram(row.executor)" class="ng-binding">rfsSendingExecutor</a>
</td>
<td class="ng-binding">2017-09-06 11:14:12</td><td class="ng-binding">2017-09-06 11:14:13</td>
<td has-role="REQUEST" class="text-center">
<!-- ngIf: row.inXml || row.outXml -->
<button ng-if="row.inXml || row.outXml" ng-click="vm.showXml(row)" title="Show" class="btn btn-xs ng-scope"><span class="fa fa-code"></span></button>
<!-- end ngIf: row.inXml || row.outXml -->
</td>
<td has-role="ERROR" class="text-center"><button ng-show="row.errorMessage" ng-click="vm.showError(row.errorMessage)" title="Show" class="btn btn-xs ng-hide"><span class="fa fa-search"></span></button></td>
<td class="text-center">
<button ng-show="vm.enableCancel(row)" ng-click="vm.cancelTask(row.workItemId)" title="Cancel" class="btn btn-xs ng-hide">
<span class="fa fa-ban text-warning"></span>
</button>
<button ng-show="vm.enableRepeat(row)" ng-click="vm.repeatTask(row.id)" title="Repeat" class="btn btn-xs ng-hide">
<span class="fa fa-refresh text-success"></span>
</button>
<button ng-show="vm.enableRepeat(row)" ng-click="vm.repeatTaskWithParams(row.id)" title="Repeat with parameters" class="btn btn-xs ng-hide">
<span class="fa fa-refresh text-warning"></span>
</button>
<button ng-show="vm.enableSkip(row)" ng-click="vm.skipTask(row.workItemId)" title="Skip" class="btn btn-xs">
<span class="fa fa-angle-double-right text-success"></span>
</button>
</td>
</tr>
我要做的就是单击此按钮:
<button ng-show="vm.enableSkip(row)" ng-click="vm.skipTask(row.workItemId)" title="Skip" class="btn btn-xs">
<span class="fa fa-angle-double-right text-success"></span>
我看过xpath教程,并在论坛上查看了许多其他帖子。我不确定我缺少什么。我只是想通过xpath查找以下元素,如下所示:
button_to_click= findElement(By.xpath("//button[@title='Skip']"));
但这不起作用。问题:为什么仅按标题不起作用?
我尝试另一种方式,这样做:
button_to_click= findElement(By.xpath("//button[@class='btn btn-xs']"));
它运行良好,但是当我在此类中有3或4个元素时,只需按错误的按钮即可。
我怎样才能完全按下该按钮有人可以帮助我?
也许应该我尝试这样的事情?
button_to_click= findElement(By.xpath("//button[@class='btn btn-xs']//button[@title='Skip']"));
为什么它仅按标题不起作用?我该怎么做呢?请耐心等待新手。
编辑1
如果您想知道我在做什么,我会添加更多代码。 :
这段代码很好用:
driver = new ChromeDriver();
driver.url ="http://mypage.com"
button_to_click= findElement(By.xpath("//button[@class='btn btn-xs']")).Click();
而且此代码不起作用:
driver = new ChromeDriver();
driver.url ="http://mypage.com"
button_to_click= findElement(By.xpath("//button[@title='Skip']")).Click();
编辑2
我会给您一个示例页面进行测试。您只需要下载html文件并在浏览器中打开它即可。Html page file
我们现在想做什么?
如果您运行此html文件,则将看到所有页面。
现在我们要在屏幕上点击一下这个按钮:
当您点击此按钮后,您将在下面看到点击计数器:
有谁知道如何单击它?我尝试了几种方法,仍然找不到解决方案。请帮忙。
编辑3
我也尝试--但这也不起作用
drive.FindElement(By.XPath("//tr[class='ng-scope']/td[text()='Wylaczenie nadan RDF'] and button[@title='Skip'']]")).Click();
参考方案
根据您的问题,以下代码行有效:
button_to_click= findElement(By.xpath("//button[@class='btn btn-xs']")).Click();
这行代码不起作用:
button_to_click= findElement(By.xpath("//button[@title='Skip']")).Click();
说明:
观察HTML DOM
,很明显WebApplication
使用了很多JavaScript
和Ajax Calls
。因此是例如ng-repeat
,ng-class
等具有动态值,例如{ "error-row": row.errorMessage }
,vm.showError(row.errorMessage)
等。因此很难使用这些值/属性来构造xpath
或CSSselector
只要xpath
唯一地标识我们感兴趣的特定元素,就可以将//button[@title='Skip']
用作xpath
。但是由于没有发生,我怀疑可能有多个与此xpath
匹配的元素,其中某些元素可能被禁用/隐藏。因此,使用xpath
属性作为title
Skip
的FAILED
。
将xpath
用作//button[@class='btn btn-xs']
不会失败,因为在这里,我们考虑了class
属性,该属性在CSSselector
以及xpath
内广泛使用,该属性向下映射到querySelector / querySelectorAll。因此,此选项更可靠且完美。
更新:
尽管将xpath
用作//button[@class='btn btn-xs']
可以毫无问题地为您工作,但我不确定为什么要避免使用它。关于您在评论中提到的xpath
,由于您使用<button>
标记进行了详细搜索,因此似乎无需引用任何父节点,例如tr[text()='Wylaczenie nadan RDF']
。如果xpath
作为//button[@class='btn btn-xs']
不能唯一地标识元素,则可以考虑如下组合class
和title
属性:
button_to_click= findElement(By.xpath("//button[@class='btn btn-xs' and @title='Skip']")).Click();
jQuery不起作用 - php我正在使用带有ajax的jquery。有时,给出错误$未定义。这是我的代码:<script language="javascript" type="text/javascript"> var base_path="<? echo $this->baseUrl().'/…
Div单击与单选按钮相同吗? - php有没有一种方法可以使div上的click事件与表单环境中的单选按钮相同?我只希望下面的div提交值,单选按钮很丑代码输出如下:<input id="radio-2011-06-08" value="2011-06-08" type="radio" name="radio_date…
故障排除“警告:session_start():无法发送会话高速缓存限制器-标头已发送” - php我收到警告:session_start()[function.session-start]:无法发送会话缓存限制器-标头已发送(错误输出开始如果我将表单数据提交到其他文件进行处理,则可以正常工作。但是,如果我将表单数据提交到同一页面,则会出现此错误。请建议<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0…
CodeIgniter更新查询被执行两次 - php我正在使用CodeIgniter 2.2。每次访问页面时,我都必须用+1更新数据库。代码可以工作,但是每次都会增加+2。示例:如果是total views=2,则在单击页面后total views应该是3,但是数据库中的值是4。我确定我在控制器中仅调用一次模型add_one_to_view_image。控制者 function view(){ $view_i…
jQuery Ajax文件上传在客户端浏览器上无法正常工作 - javascript我正在尝试使用Ajax和JQuery实现个人资料图片上传功能我能够将个人资料图片成功上传到我尝试过的所有机器和移动设备上的数据库中。它适用于我在Chrome,Edge,Firefox,Safari甚至Vivaldi上使用。问题是我住在加拿大的客户无法将他们的个人资料图片上传到数据库。另外,纵向宽高比的图像倾向于向侧面旋转。我一直在要求他重新注册并多次提供…