量角器可以使用.click();查找元素。导致找不到它

时间:2018-06-28 19:45:02

标签: angular selenium-webdriver xpath protractor

我遇到一个问题,如果使用.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>

3 个答案:

答案 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);
});