- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Html 在这里(注意 - 这部分嵌套在 iframe 中):
<div data-reactroot="">
<div class="src-scenes-authenticated-components-sign-in-form-styles__main--I0vWu">
<div class="src-scenes-authenticated-components-sign-in-form-styles__featureList--2RQdY"></div>
<button class="src-components-button-styles__defaultButtonTheme--2-m2n src-components-button-styles__button--2hZHd">
<div class="src-components-button-styles__content--28F4J">
<div class="src-scenes-authenticated-components-sign-in-form-styles__signInButton--3AQAr">Sign In</div>
</div>
</button>
<div class="src-scenes-authenticated-components-sign-in-form-styles__footer--1kMhz"></div>
</div>
</div>
以下是我尝试定位 <button>
的方法元素:
.elementByXPath('/html/body/div[2]/div/div') // parent div of button
.elementByXPath('/html/body/div[2]/div/div/div[1]') // first child
.elementByXPath('/html/body/div[2]/div/div/div[2]') // sibling AFTER button
.elementByXPath('/html/body/div[2]/div/div/button') // error - NoSuchElement
我尝试使用 child::button
找到该按钮,和following-sibling::button
...仍然没有运气。我也尝试过寻找 <div>
嵌套在按钮内的元素。还是找不到。我还尝试在找到第一个子元素后找到按钮元素(因为它是第二个子元素),仍然得到相同的错误(NoSuchElement)。
我尝试的另一件事是 .moveTo()
...这确实有效,但是当我点击它时什么也没有发生。
我错过了什么?
完整的测试代码在这里:
import wd, { asserters } from 'wd';
import configureLogging from './helpers/logging';
import { setup, config } from './helpers/config.js';
const {
capabilities,
testTimeout } = config;
export default function owaChromeLogin() {
describe('Login flow via OWA for Chrome', function() {
this.timeout(testTimeout);
let driver;
setup();
before(function() {
driver = wd.promiseChainRemote();
configureLogging(driver);
let desired = {
...capabilities.owa.chrome
};
return driver.init(desired);
});
after(function() {
return driver;
.quit();
});
// this is all to log into OWA AND the plugin
it('should go to OWA and log in', function() {
return driver
.get('https://outlook.office365.com/owa/')
.elementById('i0116') // username
.type('****@****.onmicrosoft.com')
.elementById('idSIButton9') // 'next' button
.click()
.waitForElementById('i0118', asserters.isDisplayed, 10000, 500) // password field...flaky - StaleElementReference
.type('****')
.elementById('idSIButton9') // 'sign in' button
.click()
.elementById('idSIButton9') // 'yes' button to stay signed in
.click()
.waitForElementByXPath('//*[@id="primaryContainer"]/div[4]/div/div[1]/div/div[4]/div[1]/div/div[1]/div/div/div[2]/div/button', asserters.isDisplayed, 5000, 300)
.should.eventually.exist;
});
it('should click New Email', function() {
return driver
.elementByXPath('//*[@id="primaryContainer"]/div[4]/div/div[1]/div/div[4]/div[1]/div/div[1]/div/div/div[1]/div/button[1]')
.click()
.waitForElementByXPath('//*[@id="primaryContainer"]/div[4]/div/div[1]/div/div[4]/div[3]/div/div[5]/div[1]/div/div[3]/div[4]/div/div[1]/div[2]/div[3]/div[2]/div[1]/button[1]', asserters.isDisplayed, 5000, 300)
.should.eventually.exist;
});
it('should be able to open the Outreach plugin', function() {
return driver
// wait for AND click on Outreach logo button (bottom RH)
.waitForElementByXPath('//*[@id="primaryContainer"]/div[4]/div/div[1]/div/div[4]/div[3]/div/div[5]/div[1]/div/div[3]/div[4]/div/div[1]/div[2]/div[3]/div[2]/div[2]/div/div/div/div/div[1]/div/div/button', asserters.isDisplayed, 5000, 300)
.click()
.waitForElementByXPath('/html/body/div[12]/div/div/div/div/div/div/ul/li[5]', asserters.isDisplayed, 5000, 300) // "Open Outreach"
.click()
// need to target items within iframe
.waitForElementById('exttsp0', asserters.isDisplayed, 10000, 300) // iframe (parent)
.elementByXPath('/html/body/div[2]/div/div') // parent div of button
.elementByXPath('/html/body/div[2]/div/div/div[1]') // first child
.elementByXPath('/html/body/div[2]/div/div/button') // error - NoSuchElement
});
});
}
最佳答案
解决了!在观看我的自动测试运行第一百次后,我意识到 .waitForElementByXPath('xpath ofparent element')
的输出提供了多个元素,而不是仅一个。这是在加载它所在的 iframe 之前发生的。因此,我需要在尝试定位 iframe 之前添加一个时间延迟( sleep ) - .frame(0)
...因为它全部在我的第一个 iframe 中),然后我能够通过 id 定位按钮。我知道使用 .sleep()
并不理想,但我计划稍后再回到这一点。
总的来说,测试方法如下:
wd.addPromiseChainMethod('getSignInButton', function() {
return this
.sleep(3000)
.frame(0)
.waitForElementById('parentDiv', asserters.isDisplayed, 10000, 300)
.elementById('signInButon')
.click()
});
关于javascript - 找不到按钮元素,但可以找到同级元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48552404/
我正在尝试使此 OSX 代码(golfed 以便于讨论)在 Ubuntu Linux 上运行。 cat >main.c #include #include void provided_by_ma
带有 .next() jquery 方法的小选择器让我发疯。 故事是这样的,我在表行上使用 Bootstrap 过滤器和 jquery。当过滤器执行时,它会将显示样式属性更改为 table-row,如
无法理解为什么此代码将 DIV 元素的颜色更改为蓝色,但不更改 SPAN 元素的颜色。有什么想法吗? $(document).ready(function(){ $
这个问题在这里已经有了答案: How can I target a specific group of siblings in a flat hierarchy? (1 个回答) 关闭 6 年前。
请看here ,左侧的菜单应该在复选框选中的属性上滑入和滑出,但我的 CSS 不工作,任何人都可以帮助我。在我的代码菜单中,当前设置为 left:-240px,因为它应该滑入 left:0 选中复选框
我正在创建的这个系统遇到了问题。我总共有四个兄弟 div 容器。它们在普通桌面 View 中是这样的: 蓝红蓝红 这适用于 2/3 视口(viewport)以将 background-color 显示
使用 UITabBar,我有 4 个同级 View (每个选项卡项目一个)。加载应用程序时,第一个选项卡项目和 View 可见。第一个 View 有一个发布 NSNotification 的 IBAc
这个问题已经有答案了: Self-references in object literals / initializers (31 个回答) 已关闭 9 年前。 我有一个json结构如下:
我有多个带有标题、描述和号召性用语的产品。每个的字数没有规定。我正在使用 flexbox 来展示这些产品,这样每个元素的容器高度相等,并且可以轻松地清除到下一行,而不必弄乱第 nth-child。 我
我正在努力解决 IE7 问题。我希望我的兄弟 div 与其 sibling 的宽度相同。第一个 sibling 充当标题,而其他 sibling 有一定的尺寸。我可以使用一些建议。 http://js
我正在创建 3 行,每行有 4 列。但我想要实现的是,当 1 调整一行中任何列的大小时,其余列应根据行的总剩余宽度调整大小。假设如果行的总宽度为 100%,并且如果我将第一列的大小调整 60%,则剩余
到目前为止,我有以下cinoptions: cino= cino+=:0 cino+=g0 cino+=p0 cino+=(0 cino+={0 cino+=l1 cino+=t0 cino+=u2
如果我没有解释清楚,请提前道歉。我会尽力澄清我正在尝试做的事情。事不宜迟...假设您在页面上有一系列数字(仅由一个空格分隔),其中括号表示您所在的当前页面。 在页面上看起来是这样的: [1] 2 3
我的 parent 中有两个 sibling ,并且 sibling 的数据正在更新,数据已更新,但是 ngOnInit(){} 未调用。 https://stackblitz.com/edit/an
我正在创建一个可滑动的菜单,它可以正常工作,但有一个方面除外。我希望菜单始终具有 100% 的高度……无论用户在页面上向下滚动多远。但是,每当我将其设置为 height: 100%; 时,菜单都不会滑
first-child last-child first-child-1 last-chi
我想显示一个评论列表以及每个评论的评论列表等等: 这是我的 HTML 代码: Titre d'un commentaire statique Qui cum ven
我进行了彻底的搜索,但没有找到任何关于如何查询和检索多个 XML 同级的值的示例或指导。 有很多关于如何检索单个兄弟值的示例。 例如,给出以下 XML 片段: 800000 80000
这个问题已经有答案了: Is there a "previous sibling" selector? (33 个回答) 已关闭 7 年前。 在 CSS 中,如果同级元素位于输出中的上方(HTML 中
console.log((this).sibling('.advanceOptWrap')); 以上代码返回 Uncaught TypeError: $(...).sibling is not a f
我是一名优秀的程序员,十分优秀!