在我的网页中,我有以下两个按钮:

<button onclick="addToSelected('newApplicationForm');">Add Strategy</button>

<button onclick="submitAddNewApplication('newApplicationForm');">Submit</button>


如何使用By类的方法识别它们?

#1 楼

By.xpath("//button[contains(.,'Add Strategy')]")
By.xpath("//button[contains(.,'Submit')]")


与以下内容相同:

By.xpath("//button[contains(text(),'Add Strategy')]")
By.xpath("//button[contains(text(),'Submit')]")


评论


根据提供的html,这是我们可以给出的最佳答案。但是,如果提供了更多的html,我们可能会找到一种更好的方法。请记住,xpath是在硒中查找项目的较慢方法之一。还有听起来听起来像是唱片破损的风险,我也不愿使用内部文本来标识元素,因为这些元素已本地化并且您的自动化无法在本地化版本中运行,并且与实际的唯一标识符相比,文本更可能发生更改在标记中。

–山姆·伍兹(Sam Woods)
2012年2月24日在18:03

如果可能,我会避免使用xpaths。它们难以阅读且难以调试。这是一个没有xpaths的解决方案,它应该与答案的第一行相同。字符串buttonText =“添加策略”; var allButtons = driver.FindElements(By.TagName(“ button”)); var button = buttons.First(button => button.Text == buttonText);

– Silv
20-10-22在11:04



#2 楼

例如...登录按钮在登录屏幕上可用...

//Click on Login

WebElement click = driver.findElement(By.xpath("//*[@id='btnLogOn']"));

click.click();


#3 楼

这里的xpath示例将起作用-但您也可以使用css选择器在“ onclick”属性的内容内进行匹配。使用了“开始于”属性选择器,但可以改用“包含”选择器(*=

#4 楼

是的,正如Tarun所说,您可以使用xpath,但是在我们的项目中,这通常是开发人员向每个元素添加ID的必需操作。因为有时UI或文本可能会更改,所以您必须修改测试脚本。

评论


此类测试应该以用户使用应用程序的方式来测试应用程序-也就是说,他们应该基于UI而不是元素ID进行尽可能多的测试。因此,他们应该找到基于文本而非ID的按钮。是的,这需要在显示文本更改时更改测试,但这是一件好事-因为测试确保UI符合要求,所以UI更改应该破坏它们。

– Marnen Laibow-Koser
2015年3月4日4:46



我谨不同意Marnen Laibow-Koser的说法。基于文字UI文本的测试会导致维护方面的噩梦(到那儿去,这样做很糟糕)。对按钮,链接等文本的验证应作为一项单独的测试,而不是测试功能的副作用。通过文字文本在页面上查找对象也使测试翻译成另一种语言的页面变得更加困难。

–大卫·彼得森(David Peterson)
16-10-6在19:05

完全不是关于文本的验证。而是要确保控件是用户可以找到并理解它的地方。请记住,文本是UI元素;类不是。我知道不使用文字文本似乎更容易,但这只会导致UI测试实际上并未测试UI。

– Marnen Laibow-Koser
18年1月15日在16:19