元素(By.xpath((" / HTML /体/格[2] / DIV [3] / MD-含量/ MD-卡/ MD-卡内容/ DIV / DIV / DIV /格/ MD-定制表/ DIV / MD-表容器/表/ THEAD / TR /第[3] /跨度")))点击();
这是我想让它运作的代码。
这是我想要点击的路径
/ HTML /体/格[2] / DIV [3] / MD-含量/ MD-卡/ MD-卡内容/ DIV / DIV / DIV / DIV / MD-定制表/ DIV / MD-表容器/表/ THEAD / TR /第[3] /跨度
这是错误
消息: 失败:找不到使用定位器的元素:By(xpath,/ html / body / div [2] / div [3] / md-content / md-card / md-card-content / div / div / div / div / md -custom表/ DIV / MD-表容器/表/ THEAD / TR /第[3] /跨度) 堆: NoSuchElementError:找不到使用定位器的元素:By(xpath,/ html / body / div [2] / div [3] / md-content / md-card / md-card-content / div / div / div / div / md -custom表/ DIV / MD-表容器/表/ THEAD / TR /第[3] /跨度) at WebDriverError(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:26:26) 在NoSuchElementError(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/error.js:241:26) at /usr/lib/node_modules/protractor/built/element.js:717:27 在ManagedPromise.invokeCallback_(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1379:14) 在TaskQueue.execute_(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) 在TaskQueue.executeNext_(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2775:27 at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:639:7 at process._tickCallback(internal / process / next_tick.js:103:7)错误 在ElementArrayFinder.applyAction_(/usr/lib/node_modules/protractor/built/element.js:403:27) 在ElementArrayFinder._this。(匿名函数)[点击](/usr/lib/node_modules/protractor/built/element.js:101:30) 在ElementFinder。(匿名函数)[点击](/usr/lib/node_modules/protractor/built/element.js:740:22) 在对象。 (/home/vegan/hb-productupload/gateway/src/test/javascript/e2e/account/productDashboard/productDashboardControllerSpec.js:36:47) at /usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:94:23 at new ManagedPromise(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1082:7) 在controlFlowExecute(/usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:80:18) 在TaskQueue.execute_(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) 在TaskQueue.executeNext_(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2820:25 来自:任务:在控制流程中运行它("应该能够将产品仪表板检查为cta") 在对象。 (/usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:79:14) at /usr/lib/node_modules/protractor/node_modules/jasminewd2/index.js:16:5 在ManagedPromise.invokeCallback_(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1379:14) 在TaskQueue.execute_(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2913:14) 在TaskQueue.executeNext_(/usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2896:21) at /usr/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2775:27 从异步测试: 错误 在套房。 (/home/vegan/hb-productupload/gateway/src/test/javascript/e2e/account/productDashboard/productDashboardControllerSpec.js:33:9) 在对象。 (/home/vegan/hb-productupload/gateway/src/test/javascript/e2e/account/productDashboard/productDashboardControllerSpec.js:8:1) 在Module._compile(module.js:413:34) 在Object.Module._extensions..js(module.js:422:10) 在Module.load(module.js:357:32) 在Function.Module._load(module.js:314:12)
1规格,1次失败在13.16秒内完成
[15:19:25] I / launcher - WebDriver的0个实例仍在运行 [15:19:25]我/发射器 - 铬#01失败1次测试[15:19:25] I / launcher - 整体:1个失败的规格[15:19:25] E /启动器 - 进程 退出时出现错误代码1
所以对于同一个地方,这是html:
<span translate="" class="ng-scope ng-binding">Number of Products</span>
这是selecor
body > div.site-content > div.layout-column.flex > md-content > md-card > md-card-content > div > div > div > div > md-custom-table > div > md-table-container > table > thead > tr > th.md-column.ng-scope.ng-isolate-scope.flex.md-sort.md-active > span
对于相同的跨度,这可以点击
dashboardPageObject.element.all(by.css('[md-order-by="count"]')).get(1);.click();
browser.driver.sleep(28);
dashboardPageObject.element.all(by.css('[md-order-by="count"]')).get(1);.click();
点击2次但不等待28秒。
我不关心选择器xpath或css。
例如另一个
/html/body/div[2]/div[3]/header/md-content/md-tabs/md-tabs-wrapper/md-tabs-canvas/md-pagination-wrapper/md-tab-item[5]/span
这个工作
element(by.xpath('/html/body/div[2]/div[3]/header/md-content/md-tabs/md-tabs-wrapper/md-tabs-canvas/md-pagination-wrapper/md-tab-item[5]/span'));
答案 0 :(得分:4)
首先,正如我在评论中提到的那样,sleep()
计时器需要几毫秒而不是几秒。所以你只用这个命令等待0.28秒。如果你真的想要睡28秒,可以将它扩展到28000。
但是,这不是最佳方法。您应该以Expected Conditions的形式使用隐式等待,以便您的测试有效并以一致的方式执行。
根据您尝试点击的元素的性质,您必须决定哪种方法最适合您,但最终可能会使用presenceOf()或visibilityOf()。
presenceOf()
等待将某些内容附加到DOM
visibilityOf()
获取现有元素并等待它可见。
最后,xpath不是一个很好的定位器。它现在可以在您当前的测试中使用,但xpath非常脆弱,因为随着开发的继续,它很容易改变。我建议您找到另一种方法来找到该元素,因为在该特定元素上没有很多属性我可能会选择cssContainingText()
结合以上内容:
var el = element(by.cssContainingText('span', 'Number of Products'));
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(el), 5000); // maximum wait of 5 seconds
expect(something).toEqual(your expected result);
答案 1 :(得分:-1)
这是 po 文件
import { element, by, ElementArrayFinder, ElementFinder } from 'protractor';
export class scopePos {
greet() {
element(by.xpath("//scope-setup-panel/mat-expansion-panel/div/div/div/div[1]/div[2]/div[2]")).click()// click is not working here
}
}
步骤定义文件
export default function () {
this.When(/^I verified the event scope card$/, function (next) {
//z created an object of po file and calling
z.greet()
next();
});
}