我遇到一个问题,如果使用.isPresent(),我可以让我的xpath在测试脚本上显示零错误;验证元素是否在页面上,但是如果我改用“ click”命令,则会收到错误消息,指示找不到xpath。 xpath在这里起作用:
element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i')).isPresent();
这里的xpath
element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i')).click();
产生
失败:使用定位器找不到任何元素:By(xpath,// * [@ id =“ layout-padding”] / ui-view / layout-authen / ui-view / div / div [2] / scroll-检测器/设置部分[8] / div [1] / a / i)
像这样element(by.xpath('.//*[.="TextIWant"]')).isPresent();
与isPresent()
一起工作,而对.click()
失败,搜索文本的相对xpath(就将来更改而言可能更安全)。
我尝试了不同的xpath工具(在Chrome和Firefox以及一个附加组件中)来检查xpath,但结果是相同的。为什么在单击该元素时会找到该元素但出错?在此之前,此脚本会查找并单击其他一些元素。我需要怎么做才能使其单击显然可以找到的元素?
这是我复制的元素:
div class="header"
a href="" class="toggle-bt ng-binding" ng-click="view.showContent = !view.showContent"
i class="fa fa-angle-right" ng-class="view.showContent ? 'fa-angle-down' : 'fa-angle-right'" style=""></i>
TextIWant
</a>
<div class="description ng-binding">
Settings for the TextIWant
</div>
</div>
答案 0 :(得分:0)
请尝试以下一个
driver.findElement(By.cssSelector("div.header div.description"))).isPresent();
driver.findElement(By.cssSelector("div.header div.description"))).click();
请参阅以下有关CSS选择器的更多信息 http://www.seleniumeasy.com/selenium-tutorials/css-selectors-tutorial-for-selenium-with-examples
答案 1 :(得分:0)
当您尝试单击元素时,它可能是不可单击的。试试这个:
var EC = protractor.ExpectedConditions;
var elm = element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i'));
browser.wait(EC.elementToBeClickable(element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i'))), 30000, "Element is not clickable").then(function() {
elm.click();
});
答案 2 :(得分:0)
尝试使用等待和javascript执行程序:
var elm = element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i'));
browser.wait(EC.elementToBeClickable(element(by.xpath('//*[@id="layout-padding"]/ui-view/layout-authen/ui-view/div/div[2]/scroll-detector/settings-section[8]/div[1]/a/i'))), 30000, "Element is not clickable").then(function() {
browser.executeScript('arguments[0].click()', elm);
});