我在网页中有一个按钮元素
<button type="button" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close" role="button" title="Close">
<span class="ui-button-icon-primary ui-icon ui-icon-closethick"></span>
<span class="ui-button-text">Close</span>
</button>
我正在尝试使用以下Xpath找到它:"//button[@class = 'ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close']"
仅当我选择查看页面中的项目时,此按钮元素才会出现。页面内有多个项目;所以我需要在关闭一个已经打开的窗口之后一一打开。
我需要多次使用Xpath进行操作
btnWorkItemClose = bla.elementByXpath("//button[@class = 'ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close']");
btnWorkItemClose.click();
backlogGrid.sendKeys(Keys.ARROW_DOWN);
backlogGrid.sendKeys(Keys.ENTER);
doSomeFuntionWithTheWorkItem();
btnWorkItemClose = bla.elementByXpath("//button[@class = 'ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close']");
btnWorkItemClose.click();
该元素在第一个实例中成功定位,但在第二个用法中未成功定位。我有例外
“没有这样的元素:无法找到元素:{” method“:” xpath“,” selector“:” // button [@class ='ui-button ui-widget ui-state-default ui-corner-全部仅ui-button-icon ui-dialog-titlebar-close']“}”]
注意:当我在网页中手动使用Xpath时,它可以准确地找到该元素,并且尝试了不同的等待方法,但都没有帮助。
但是,当我使用Xpath "//button[@title= 'Close']"
时,两个实例都可以正常工作。
您能告诉我这里发生了什么吗?
答案 0 :(得分:0)
我认为无需从第二次点击中删除
btnWorkItemClose = bla.elementByXpath("//button[@class = 'ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close']");
我尝试仅在其正常工作后才能定位
答案 1 :(得分:0)
对于xpath,class是一个属性,值作为字符串进行比较。
这意味着@class = 'class1 class2'
不等于@class = 'class2 class1'
,在您的情况下可能是问题所在。这里举例说明如何找到更有效的元素:
-CSS选择器:button[title='Close']
-CSS选择器:button.ui-dialog-titlebar-close.ui-widget
,在这里您可以根据需要添加任意数量的类
-xpath:.//button[contains(@class='ui-dialog-titlebar-close']
,或者如果您需要使用更多的类而不用担心它们的顺序,请参见以下示例:
.//button[contains(@class,'ui-dialog-titlebar-close') and contains(@class,'ui-widget')]
第二个问题,如果要使用 xpath 获取内部元素,则将.
放在细节(https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html)的开头。如果您在所有DOM中而不是在bla
中搜索按钮元素。这是使用xpath在bla元素内查找关闭按钮的正确方法:
btnWorkItemClose = bla.elementByXpath(".//button[contains(@class,'ui-dialog-titlebar-close') and contains(@class,'ui-widget')]");