Selenium IDE:如何断言属性存在

时间:2016-12-22 21:11:51

标签: selenium selenium-ide

我正在使用Selenium IDE。

我知道如何测试元素的属性是否具有某个值。但是,如何测试属性是否存在?

以下是成功测试属性是否具有特定值的行:

<tr>
    <td>assertAttribute</td>
    <td>id=_ctl0_MainPlaceHolder_dgMemberList_DXSelBtn0@disabled</td>
    <td>disabled</td>
</tr>

以下是未成功测试该属性是否存在于第一位的行:

<tr>
    <td>assertElementPresent</td>
    <td>id=_ctl0_MainPlaceHolder_dgMemberList_DXSelBtn0@disabled</td>
    <td></td>
</tr>

如何让它发挥作用?

感谢,

-Ilya

2 个答案:

答案 0 :(得分:0)

您可以使用“getAttribute”方法,如果它返回“null”,则表示根本没有属性...

来自Selenium文档:

WebElement.getAttribute( attributeName ) → Thenable<(string|null)>

计划命令以查询元素的给定属性的值。将返回当前值,即使它已在页面加载后被修改。更确切地说,此方法将返回给定属性的值,除非该属性不存在,在这种情况下,将返回具有相同名称的属性的值。如果两个值均未设置,则返回null(例如,textarea元素的“value”属性)。 “style”属性最好转换为带有尾部分号的文本表示。

例如:

HTML code:

<div id="a"         >1</div>
<div id="a" x="xxx" >2</div>
<div id="a" x       >3</div>

在Nodejs中测试代码:

var webdriver = require('selenium-webdriver');
var capabilitiesObj = {
    'browserName'     : 'firefox'
};
var driver          = new webdriver.Builder().withCapabilities(capabilitiesObj).build();
driver.get('http://localhost/customer.js/temp/index60.html');

driver.findElements(webdriver.By.css('div[id=a]')).then((elements) => {
    elements[0].getAttribute('x').then((att)=> {
        console.log(att);
    });

}).catch(console.log.bind(console));

driver.quit();

每个div的结果都不同:

for div 1: null
for div 2: 'xxx'
for div 3: ''

答案 1 :(得分:0)

我不认为简单的id定位器处理属性。所以切换到xpath:

这应该有效:

<tr>
    <td>verifyElementPresent</td>
    <td>xpath=//.[@id='id3' and @attribute1]</td>
    <td></td>
</tr>

请注意,如果您更改特定ID(id1,id2,id3),它将传递前2个ID,但第3个传递失败:

<div id="id1" attribute1="xyz" style="background-color: transparent;">Some text</div>
<div id="id2" attribute1="" style="background-color: transparent;">Some text</div>
<div id="id3" style="background-color: transparent;">Some text</div>